FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour OpenADS libre y de código abierto 🏛️💎💪
Posts: 1090
Joined: Thu Sep 27, 2007 03:47 PM

Re: OpenADS libre y de código abierto 🏛️💎💪

Posted: Tue Nov 03, 2026 08:20 PM

Saludos al forum openads_serverd.exe y openads_bench.exe de la version openads-1.5.1, como funcionan nunca he trabajado con OpenADS Hay manera de crear las librerias para 32bit,

Ruben Dario Gonzalez
Cali-Colombia
rubendariogd@hotmail.com - rubendariogd@gmail.com
Posts: 269
Joined: Fri Sep 25, 2026 01:40 AM

Re: OpenADS libre y de código abierto 🏛️💎💪

Posted: Tue Nov 03, 2026 08:28 PM

Hola Rubén:

Son dos herramientas distintas:

  • openads_serverd.exe es el servidor de OpenADS. Se queda en ejecución atendiendo conexiones de las aplicaciones. También puede ofrecer la consola web Studio si se inicia con la opción --http-port. Para probarlo, usa una carpeta con COPIAS de tus datos, no los originales.
  • openads_bench.exe es una prueba de rendimiento, no el programa para abrir tus tablas. Genera sus propios datos temporales, ejecuta varias pruebas y muestra los tiempos. No necesitas ejecutarlo para que funcione tu aplicación.

Para una aplicación en modo local tampoco es obligatorio arrancar el servidor: puede usar la DLL de OpenADS directamente, a través del RDD ADS.

Sobre los 32 bits: el ZIP de Windows de v1.5.1 que has descargado es x64; he comprobado que contiene ace64.dll y sus librerías, no ace32.dll. No basta con cambiar el nombre de esas librerías.

Hay una publicación posterior, v1.09.74, que sí ofrece un paquete separado openads-1.09.74-windows-x86.zip. He comprobado su contenido: incluye ace32.dll y librerías de importación para MSVC, MinGW y Borland. Usa los archivos que correspondan a la misma versión, sin mezclar la DLL nueva con archivos de v1.5.1. Descárgalo para probar primero con una copia de la aplicación y de los datos:
https://github.com/FiveTechSoft/OpenADS/releases/tag/v1.09.74

El código también contempla compilación de 32 bits con el preset msvc-x86 de CMake. La librería de importación que enlaces debe corresponder a tu compilador; una .lib de MSVC no se debe dar por válida para Borland.

¿Qué usas para tu aplicación de 32 bits: Harbour o xHarbour, y Borland, MinGW o MSVC? Con esos datos podemos concretar qué archivos necesitas, sin mezclar arquitecturas ni formatos de librería.

Posts: 1090
Joined: Thu Sep 27, 2007 03:47 PM

Re: OpenADS libre y de código abierto 🏛️💎💪

Posted: Wed Nov 04, 2026 05:18 PM

Uso Bcc77 32 bit y Harbour 3.2
Trato de compilar un ejemplo pero me da error
este es el .hbp

openads_demo.prg
-comp=bcc
-w3
-es2

-lrddads
-lace32
-lrddcdx
-lrddntx
-lrddfpt

Me da este error

K:\Proy_pruebas\prue_ADS>hbmk2 eje_ads.hbp
hbmk2: Processing environment options: -comp=bcc
hbmk2[eje_ads]: Warning: Ignored option valid only on command-line: '-comp=bcc'
in eje_ads.hbp:5
hbmk2[eje_ads]: Warning: Ignoring explicitly specified core library: rddcdx (in
option '-lrddcdx' in eje_ads.hbp:11)
hbmk2[eje_ads]: Warning: Ignoring explicitly specified core library: rddntx (in
option '-lrddntx' in eje_ads.hbp:12)
hbmk2[eje_ads]: Warning: Ignoring explicitly specified core library: rddfpt (in
option '-lrddfpt' in eje_ads.hbp:13)
Harbour 3.2.0dev (r2403071241)
Copyright (c) 1999-2021, https://harbour.github.io/
Compiling 'openads_demo.prg'...
Lines 464, Functions/Procedures 1
Generating C source output to 'C:\Users\Personal\AppData\Local\Temp\hbmk_62rt7e.dir\openads_demo.c'... Done.
C:\Users\Personal\AppData\Local\Temp\hbmk_62rt7e.dir\openads_demo.c:
Turbo Incremental Link 6.97 Copyright (c) 1997-2022 Embarcadero Technologies, Inc.

Ruben Dario Gonzalez
Cali-Colombia
rubendariogd@hotmail.com - rubendariogd@gmail.com
Posts: 269
Joined: Fri Sep 25, 2026 01:40 AM

Re: OpenADS libre y de código abierto 🏛️💎💪

Posted: Wed Nov 04, 2026 05:30 PM

Hola Rubén:

Gracias, con ese log ya se puede separar el problema actual del enlace con OpenADS. La compilación se detiene en Harbour, antes de llegar al compilador C o al enlazador. Todavía no es un error de ace32.lib ni de la DLL.

Tienes cuatro avisos W0001 de referencia ambigua a ADATA, en las líneas 50, 51, 52 y 58. Con -es2, Harbour devuelve error y no genera código si encuentra avisos. Eso explica que aparezca "No code generated" aunque los mensajes anteriores digan "Warning". No quitaría -es2 como arreglo: primero hay que aclarar qué representa ADATA en ese ejemplo.

¿Puedes pegar las líneas 40 a 65 de openads_demo.prg y las declaraciones de variables de esa función, sin credenciales ni datos reales? Si ADATA es una variable de trabajo, habrá que declararla en su ámbito; si es un campo de una tabla, habrá que identificarlo como tal. Sin ver ese fragmento no conviene convertirlo a LOCAL o MEMVAR a ciegas.

Sobre el .hbp: -comp=bcc es una opción de línea de comandos de hbmk2, no del archivo .hbp. Puedes quitar esa línea del archivo y usar hbmk2 -comp=bcc eje_ads.hbp. En tu log ya aparece además como opción del entorno, por lo que ese aviso no demuestra que esté seleccionándose otro compilador.

Los avisos sobre rddcdx, rddntx y rddfpt indican que hbmk2 ignora esas librerías del núcleo indicadas explícitamente; no son los avisos W0001 de ADATA que están deteniendo esta compilación. Primero resolvemos ese punto del PRG y después podremos comprobar si aparece algún problema de enlace con Borland de 32 bits.

Referencia: comportamiento contrastado con el código público actual del compilador Harbour y de hbmk2. No he compilado tu ejemplo con BCC77 ni verificado tu revisión concreta:
https://github.com/harbour/core

Posts: 1090
Joined: Thu Sep 27, 2007 03:47 PM

Re: OpenADS libre y de código abierto 🏛️💎💪

Posted: Wed Nov 04, 2026 07:22 PM

Para corregir el error , definir esto asi
LOCAL aData := {}
l LIne 50estaba asi AAdd( aData := {}, { 1, "alice", 30 } )
la modifique asi AAdd( aData := {}, { 1, "alice", 30 } )
Si genera el ejecutable,
al ejecutar no hace nada , genera este listado de mensajes
Compilo com bcc77 de 4¿32 bits y harbour 3.2
Otra duda
hay que hacer esto lo tome en la documentacion, pero no lo he ejecutado
openads_serverd.exe --install-service --port 16262 --data "F:\OpenADS\testdata\pmsys;c:\pmsys\data"
sc start openads_serverd

Est es la version que tengo

Harbour Build Info

Version: Harbour 3.2.0dev (r2403071241)
Compiler: Borland/Embarcadero C++ 7.7 (32-bit)
Platform: Windows 10 10.0


-------------------------------------------------------------

Application Internal Error - K:\Proy_pruebas\prue_ADS\openads_demo.exe
Terminated at: 2026-11-04 14:05:05
Unrecoverable error 6005: Exception error:

Exception Code:C0000005 ACCESS_VIOLATION
Exception Address:74B5E9CE
EAX:01E0D06E  EBX:0000000F  ECX:001DD06E  EDX:001F9082
ESI:01C30000  EDI:0347C054  EBP:012FFCB4
CS:EIP:0023:74B5E9CE  SS:ESP:002B:012FFC84
DS:002B  ES:002B  FS:0053  GS:002B
Flags:00010203
Exception Parameters: 00000000 01C30000
CS:EIP: F3 A4 8B 44 24 0C 5E 5F C3 8B C7 33 C6 A9 0F 00
SS:ESP: 012FFD28 001F9082 6DFB95C5 03460040 01C13FEC 001F9082 012FFD28 012FFCC0 01C13FEC 01C122B4 001F9082 03460040 012FFD44 6E0C2C0D 01C13FEC 001F908F

C stack:
EIP:     EBP:       Frame: OldEBP, RetAddr, Params...
74B5E9CE 012FFCB4   012FFD44 6E0C2C0D 01C13FEC 001F908F 00000001 01C122B4 01C13FEC 01C13FEC 00000001 00000000
6E0C2C0D 012FFD44   012FFDB0 6E0C7A96 00000001 01C122B4 01C13FEC 001F9082 00000004 012FFE3E 00000000 0000000F
6E0C7A96 012FFDB0   012FFDD4 001F2541 00000001 01C122B4 01C13FEC 001F9082 01C1114C 0029EFD1 01C173FC
001F2541 012FFDD4   012FFDF8 001F90B2 0029E8DA 002048B8 00000000 00000000 00000000 00000000 00000000
001F90B2 012FFDF8   012FFE40 00264EBF 00000005 001F1120 002A00DC 01C11214 5F534441 46544547 54434E55 454C4241
00264EBF 012FFE40   012FFE50 001F90F8 0029EFD1 00000001
001F90F8 012FFE50   012FFE64 001FD4A3 00000000 00000001 00000000
001FD4A3 012FFE64   012FFE7C 001FD5C6 002A00DC 001FD89A 0029E04C 01067000
001FD5C6 012FFE7C   012FFE88 0022E08E 00000001
0022E08E 012FFE88   012FFEB0 00299D98 00000001 01C10140 01C10990 FFFFFFFF 001F1120 01067000 012FFF10 0029AC34
00299D98 012FFEB0   012FFEC8 00000000 0029E04C 76445D49 01067000 76445D30
00000000 012FFEC8   012FFF20 772DC75B 01067000 C9192377 00000000 00000000 01067000 C0000005 75ED9AE0 A4B70E8A
772DC75B 012FFF20   012FFF30 772DC6E1 FFFFFFFF 7732635C

Modules:
001F0000 000D8000 K:\Proy_pruebas\prue_ADS\openads_demo.exe
77270000 001C0000 C:\WINDOWS\SYSTEM32\ntdll.dll
76430000 000F0000 C:\WINDOWS\System32\KERNEL32.DLL
75C80000 002D9000 C:\WINDOWS\System32\KERNELBASE.dll
76C10000 001ED000 C:\WINDOWS\System32\USER32.DLL
770A0000 0001C000 C:\WINDOWS\System32\win32u.dll
75B00000 00022000 C:\WINDOWS\System32\GDI32.dll
76260000 000EB000 C:\WINDOWS\System32\gdi32full.dll
6DF80000 004EF000 K:\Proy_pruebas\prue_ADS\OPENACE32.DLL
75980000 00085000 C:\WINDOWS\System32\msvcp_win.dll
770D0000 00110000 C:\WINDOWS\System32\ucrtbase.dll
74A50000 00034000 C:\WINDOWS\SYSTEM32\WINMM.DLL
76E10000 00085000 C:\WINDOWS\System32\ADVAPI32.DLL
760F0000 000C7000 C:\WINDOWS\System32\msvcrt.dll
77010000 00085000 C:\WINDOWS\System32\sechost.dll
754D0000 000BC000 C:\WINDOWS\System32\RPCRT4.dll
76530000 0006A000 C:\WINDOWS\System32\WS2_32.dll
72790000 0001C000 C:\WINDOWS\SYSTEM32\bcrypt.dll
74B50000 00015000 C:\WINDOWS\SYSTEM32\VCRUNTIME140.dll
746D0000 0006D000 C:\WINDOWS\SYSTEM32\MSVCP140.dll
76F20000 00025000 C:\WINDOWS\System32\IMM32.DLL

Called from ADS_GETFUNCTABLE(0)

Ruben Dario Gonzalez
Cali-Colombia
rubendariogd@hotmail.com - rubendariogd@gmail.com
Posts: 269
Joined: Fri Sep 25, 2026 01:40 AM

Re: OpenADS libre y de código abierto 🏛️💎💪

Posted: Wed Nov 04, 2026 07:32 PM

Hola Rubén:

Bien, ya has superado la compilación. Ahora el fallo es distinto: el EXE se termina con C0000005 al inicializar el RDD ADS (ADS_GETFUNCTABLE). El listado confirma que está cargando OPENACE32.DLL de la carpeta de la prueba; eso no confirma todavía que esa DLL y la librería de importación usada al enlazar sean la pareja correcta.

Para el ejemplo local no necesitas instalar el servicio. He comprobado el openads_demo.prg público: selecciona ADS_LOCAL_SERVER y trabaja en una carpeta temporal llamada openads_demo. Si tu copia conserva ese modo, utiliza la DLL directamente, sin openads_serverd. Los comandos --install-service y sc start son para registrar y arrancar el servidor de una configuración remota. No los usaría como intento de corregir esta excepción, ni apuntaría esta prueba a carpetas con datos de trabajo.

Hay un antecedente que merece comprobar: las notas de OpenADS v1.8.77 documentan una corrección de convenciones de llamada en x86 que también podía provocar ACCESS_VIOLATION en ADS_GETFUNCTABLE. La coincidencia del nombre NO demuestra que sea tu causa ni que baste con cambiar una DLL.

Para comprobarlo, dime:

  • El nombre exacto del ZIP de OpenADS del que salieron OPENACE32.DLL y la .lib que copiaste. ¿Es openads-1.09.74-windows-x86.zip u otro paquete?
  • El nombre y la subcarpeta de origen de esa .lib, y si rddads.lib es la que venía con tu Harbour/BCC77 o fue compilada aparte.

Mantén la prueba en una carpeta separada, sin sustituir DLL de otras aplicaciones ni mezclar la DLL de una versión con imports de otra. Con esos datos podremos distinguir un desajuste de archivos de un fallo que haya que reproducir. No he reproducido esta excepción con tu BCC77.

Fuentes del ejemplo y del antecedente:
https://raw.githubusercontent.com/FiveTechSoft/OpenADS/master/examples/harbour-hbmk2/openads_demo.prg
https://raw.githubusercontent.com/FiveTechSoft/OpenADS/master/docs/en/release-notes.md

Posts: 1090
Joined: Thu Sep 27, 2007 03:47 PM

Re: OpenADS libre y de código abierto 🏛️💎💪

Posted: Wed Nov 04, 2026 07:42 PM

Si esta es la version que baje. openads-1.09.74-windows-x86.zip.
Solo copie ace32.dll , ace32.lib y openace32.dll. las demas librerias son la que bienem con harbour no las copie, interprete mal

K:\Proy_pruebas\prue_ADS>hbmk2 eje_ads.hbp
hbmk2: Processing environment options: -comp=bcc
hbmk2[eje_ads]: Warning: Ignored option valid only on command-line: '-comp=bcc'
in eje_ads.hbp:2
hbmk2[eje_ads]: Warning: Ignoring explicitly specified core library: rddcdx (in
option '-lrddcdx' in eje_ads.hbp:12)
hbmk2[eje_ads]: Warning: Ignoring explicitly specified core library: rddntx (in
option '-lrddntx' in eje_ads.hbp:13)
hbmk2[eje_ads]: Warning: Ignoring explicitly specified core library: rddfpt (in
option '-lrddfpt' in eje_ads.hbp:14)
Harbour 3.2.0dev (r2403071241)
Copyright (c) 1999-2021, https://harbour.github.io/
Compiling 'openads_demo.prg'...
Lines 463, Functions/Procedures 1
Generating C source output to 'C:\Users\Personal\AppData\Local\Temp\hbmk_0k66nr.dir\openads_demo.c'... Done.
C:\Users\Personal\AppData\Local\Temp\hbmk_0k66nr.dir\openads_demo.c:
Turbo Incremental Link 6.97 Copyright (c) 1997-2022 Embarcadero Technologies, Inc.

Ruben Dario Gonzalez
Cali-Colombia
rubendariogd@hotmail.com - rubendariogd@gmail.com
Posts: 269
Joined: Fri Sep 25, 2026 01:40 AM

Re: OpenADS libre y de código abierto 🏛️💎💪

Posted: Wed Nov 04, 2026 07:45 PM

Rubén, he descargado e inspeccionado ese ZIP. Contiene varias librerías con el mismo nombre, y aquí importa la subcarpeta:

  • ace32.lib de la raíz: 227552 bytes, formato COFF/ar.
  • lib\borland\ace32.lib: 59904 bytes, formato OMF para Borland.
  • lib\msvc\ace32.lib: 334514 bytes, formato COFF/ar.

Para BCC77 de 32 bits, la librería de importación que debes comprobar es lib\borland\ace32.lib, no la ace32.lib de la raíz. ¿La que copiaste tiene 59904 bytes y salió de esa subcarpeta?

Las dos DLL de ese paquete, ace32.dll y openace32.dll, tienen idéntico contenido. La importación Borland apunta a openace32.dll, lo que concuerda con el nombre que aparece cargado en tu log. Copiar ambas no demuestra por sí solo un conflicto.

Si copiaste la .lib de la raíz, haz la prueba en una copia separada del proyecto usando la de lib\borland, con las DLL del mismo ZIP y un enlace limpio, sin reutilizar el EXE anterior ni sustituir archivos de otras aplicaciones. Es una comprobación de formato y procedencia; no puedo afirmar que vaya a resolver el C0000005.

Falta también saber de dónde sale rddads.lib: ¿es la incluida en tu distribución Harbour/BCC77 o la compilaste tú? El ZIP de OpenADS no identifica por sí solo esa pieza. Si ya estabas usando la .lib Borland, no repitas el cambio: confirma ese dato y la procedencia de rddads.lib para seguir con la inicialización que falla.

Sigue sin ser necesario instalar el servicio para el ejemplo local. No he reproducido todavía tu combinación BCC77/rddads/DLL.

Paquete inspeccionado:
https://github.com/FiveTechSoft/OpenADS/releases/tag/v1.09.74

Posts: 1090
Joined: Thu Sep 27, 2007 03:47 PM

Re: OpenADS libre y de código abierto 🏛️💎💪

Posted: Wed Nov 04, 2026 07:51 PM

la rddads.lib es de la distribución Harbour/BCC77,

Ruben Dario Gonzalez
Cali-Colombia
rubendariogd@hotmail.com - rubendariogd@gmail.com
Posts: 1090
Joined: Thu Sep 27, 2007 03:47 PM

Re: OpenADS libre y de código abierto 🏛️💎💪

Posted: Thu Nov 05, 2026 09:18 PM

Trato de hacer una sentencia SQL y da este error
Turbo Incremental Link 6.97 Copyright (c) 1997-2022 Embarcadero Technologies, Inc.
Error: Unresolved external 'HB_FUN_ADSOPENSQLSOURCE' referenced from C:\USERS\PERSONAL\APPDATA\LOCAL\TEMP\HBMK_3448FP.DIR\EJEMPLO_2.OBJ
Error: Unresolved external '
HB_FUN_ADSCLOSESQLSTATEMENT' referenced from C:\USERS\PERSONAL\APPDATA\LOCAL\TEMP\HBMK_3448FP.DIR\EJEMPLO_2.OBJ
Error: Unable to perform link
hbmk2[ejemplo_2]: Error: Running linker. 2
ilink32.exe @C:\Users\Personal\AppData\Local\Temp\epu8e2.lnk

hbmk2: Error: Referenced, missing, but unknown function(s): ADSOPENSQLSOURCE(),
ADSCLOSESQLSTATEMENT()

Ruben Dario Gonzalez
Cali-Colombia
rubendariogd@hotmail.com - rubendariogd@gmail.com
Posts: 269
Joined: Fri Sep 25, 2026 01:40 AM

Re: OpenADS libre y de código abierto 🏛️💎💪

Posted: Thu Nov 05, 2026 09:33 PM

Hola Rubén:

Este fallo es distinto del anterior: ahora el enlazador no encuentra las funciones Harbour ADSOPENSQLSOURCE() y ADSCLOSESQLSTATEMENT(). Los símbolos que faltan llevan el prefijo HB_FUN_; no es un error que esté devolviendo el motor al ejecutar una sentencia SQL. Todavía no se ha generado el EXE de ejemplo_2.

Hay que distinguir las funciones C de la API ACE/OpenADS de los wrappers que permiten llamarlas desde Harbour. Que la DLL tenga AdsCloseSQLStatement no implica que tu rddads.lib incluya el wrapper Harbour con ese mismo nombre. En el adsfunc.c público actual de Harbour he comprobado AdsCreateSQLStatement y AdsExecuteSQLDirect, pero no encuentro HB_FUNC para esos dos nombres que faltan en tu enlace. Eso no identifica aún qué contiene exactamente tu rddads.lib de la revisión r2403071241.

¿Puedes pegar el fragmento de ejemplo_2.prg donde creas, ejecutas y cierras la consulta, junto con el .hbp y la procedencia de ese ejemplo? Sin credenciales ni datos reales. Ya tengo anotado que usas Harbour/BCC77 de 32 bits y la rddads.lib de esa distribución; no necesitas repetirlo.

Con ese fragmento podremos ver si el ejemplo necesita un módulo adicional o usa una interfaz distinta de la que tienes enlazada. No cambiaría DLL ni instalaría el servicio por estos dos símbolos, y tampoco sustituiría los nombres de las llamadas a ciegas: hay que comprobar sus parámetros y qué devuelven. No he reproducido este enlace con tu BCC77.

Fuente Harbour consultada:
https://github.com/harbour/core/blob/81be99f6/contrib/rddads/adsfunc.c

Posts: 1090
Joined: Thu Sep 27, 2007 03:47 PM

Re: OpenADS libre y de código abierto 🏛️💎💪

Posted: Fri Nov 06, 2026 04:08 PM

SAludso, y gracis por su respuesta. Ya logre superar los errores que coloque anterior mente. coloco el ejemplo1.prg ya me funciona , coloco el otro ejemplo_4 para hacer una sentencias sql, si se ejecuta pero no me genera la sentaria SQL da un mensaje Error en la ejecucion del SQL. Codigo: 0
el error es como que no tenga datos la tabla.
El Otra trate de instalar el Server
Corri este .bat
[row]
:: Ejecutar como Administrador en el Servidor
openads_serverd.exe --uninstall-service
openads_serverd.exe --install-service --port 6262 --http-port 8080 --data "J:\PRUEBAADS"
sc config openads_serverd start= auto
sc start openads_serverd
[row]
Est es el archivo openads.ini
[/row]
[server]
host = 127.0.0.1
port = 6262
backlog = 16

Concurrent-client cap (0 = unlimited). Default 500 — raise for

multi-instance workloads (e.g. B_BIG with 700 instances):

max_sessions = 1000
data = J:\PRUEBAADS
http_port = 6263

http_user = admin:change-me # console is open

[row]

Me instala el servicio
Pero si ingreso al navegador , supesta mente desde el navegador le doy 127.0.0.1 , deberia de mostra el admon del servero o estoy equivocado

ejemplo1.prg // me funciona
/*

  • Build: hbmk2 openads_demo.hbp (after set OPENADS_LIB=...)
    */
    #include "ads.ch"
    #include "rddsys.ch"
    #include "inkey.ch"

REQUEST ADS, ADSCDX, ADSNTX

PROCEDURE Main()

LOCAL cDir := "J:\PRUEBAADS" //hb_DirTemp() + "openads_demo"
LOCAL cDbf := cDir + hb_ps() + "TERCERO.dbf" //"cust.dbf"
? "Directorio temporal detectado:", hb_DirTemp()

USE ( cDbf ) VIA "ADSCDX" NEW EXCLUSIVE
INDEX ON FIELD->codprov TAG cod_pr
OrdSetFocus( "COD_PR" )
dbGoTop()
DO WHILE ! Eof()
? " rec", RecNo(), "codprov=[" + FIELD->codprov + "] nombre=" + FIELD->nombre
dbSkip()
ENDDO
?
DbCloseArea()
AdsDisconnect()

? "Done."
? "Presione una tecla para cerrar..."
Inkey(0)
RETURN
[/row]

El que no me genera la consulta
Ejemplo 4.prg

[row]
#include "ads.ch"
#include "rddsys.ch"
#include "inkey.ch"

REQUEST ADS, ADSCDX, ADSNTX

PROCEDURE Main()
LOCAL cSql := "SELECT codprov, nombre FROM TERCERO WHERE codprov >= '100' ORDER BY nombre"
LOCAL cAliasSQL := "CONSULTA"

AdsSetServerType( ADS_LOCAL_SERVER )
AdsSetFileType( ADS_CDX )
RddSetDefault( "ADSCDX" )

// Harbour ejecuta el SQL directo y abre el Alias automáticamente en un solo paso
IF ADSExecuteSQLDirect( cSql, cAliasSQL )


SELECT (cAliasSQL)
DO WHILE ! Eof()
? "SQL Row -> Codigo:", FIELD->codprov, " Nombre:", FIELD->nombre
DbSkip()
ENDDO


(cAliasSQL)->( DbCloseArea() )
ELSE
? "Error en la ejecucion del SQL. Codigo:", AdsGetLastError()
ENDIF

?
? "Proceso terminado. Presione una tecla..."
Inkey(0)
RETURN

[/row]

Ruben Dario Gonzalez
Cali-Colombia
rubendariogd@hotmail.com - rubendariogd@gmail.com
Posts: 269
Joined: Fri Sep 25, 2026 01:40 AM

Re: OpenADS libre y de código abierto 🏛️💎💪

Posted: Fri Nov 06, 2026 04:24 PM

Hola Rubén:

Bien, el enlace anterior ya está superado y ejemplo1 puede leer la tabla. En ejemplo_4 hay un problema anterior a comprobar si el SELECT encuentra registros: el comentario que dice que AdsExecuteSQLDirect abre automáticamente el alias en un solo paso no corresponde al wrapper de Harbour que he consultado.

SQL local

En el adsfunc.c público de Harbour, AdsCreateSQLStatement( cAliasSQL ) crea primero el área de trabajo SQL. Después AdsExecuteSQLDirect( cSql ) ejecuta la sentencia sobre esa área actual. Su segundo argumento no crea el alias. Si no existe un área con statement, el wrapper devuelve .F. sin llegar a llamar al motor; por eso ese .F. junto con AdsGetLastError() igual a 0 no demuestra que TERCERO esté vacía ni que el motor haya rechazado la consulta.

Además, tu ejemplo1 abre J:\PRUEBAADS\TERCERO.dbf con ruta completa, mientras ejemplo_4 usa solamente FROM TERCERO y no establece en ese programa una conexión a J:\PRUEBAADS. Son dos diferencias que hay que separar: conexión al directorio de la copia de prueba y creación del área SQL antes de ejecutar. El ejemplo público 05_sql.prg muestra esa secuencia con AdsConnect(cDir), AdsCreateSQLStatement y AdsExecuteSQLDirect; no ejecutes su parte de creación/borrado de tablas sobre tus datos.

No he compilado tu ejemplo con BCC77 ni comprobado tu revisión concreta de rddads.lib. La comprobación útil ahora es saber si, en una copia aislada, pasan por separado la conexión al directorio y la creación del statement; solo después tiene sentido evaluar el resultado del SELECT. Si falla uno de esos pasos, indica cuál y el error de ese paso, sin enviar la tabla ni datos reales. El servicio no es necesario para este programa: has seleccionado ADS_LOCAL_SERVER.

Consola del servidor

La consola HTTP es otra prueba independiente. En el BAT has indicado --http-port 8080, pero en el INI figura http_port = 6263. Escribir solo 127.0.0.1 en el navegador no selecciona ninguno de esos puertos: en el mismo equipo del servicio, la dirección correspondiente al BAT sería http://127.0.0.1:8080/, si ese es el puerto con el que realmente está arrancando y escuchando. Si arranca con 6263, sería http://127.0.0.1:6263/. Desde otro PC, 127.0.0.1 apunta a ese otro PC, no al servidor.

Antes de reinstalar o cambiar nada, comprueba el estado del servicio y su BINARY_PATH_NAME con sc query openads_serverd y sc qc openads_serverd. Así vemos los argumentos registrados realmente, en vez de asumir que el INI se está leyendo o qué puerto ha ganado. Pega solo estado/ruta/argumentos y qué devuelve el navegador en el puerto correspondiente, ocultando credenciales si aparecen. Si J: es una unidad de red mapeada en tu sesión, indícalo también: el servicio puede no verla con su cuenta de ejecución. No abras puertos ni expongas la consola a Internet para esta prueba.

Fuentes públicas consultadas:
https://github.com/harbour/core/blob/master/contrib/rddads/adsfunc.c
https://github.com/FiveTechSoft/OpenADS/blob/main/cookbook/console/05_sql.prg
https://github.com/FiveTechSoft/OpenADS/blob/v1.09.74/tools/serverd/main.cpp
https://fivetechsoft.github.io/OpenADS/en/studio-guide/

Posts: 1090
Joined: Thu Sep 27, 2007 03:47 PM

Re: OpenADS libre y de código abierto 🏛️💎💪

Posted: Fri Nov 06, 2026 08:44 PM

Ya me funcion como me indicaste atraves del navegador. http://127.0.0.1:8080/ El objetico de esta pagina es para hacer administracion.
Ya me funciona las sentencias sql.
es posible usar oDax := TDatabase():New() una vez genera la senteccia SQL. porque no me funciona
Que diferencia hay entre .adt y .dbf

Ruben Dario Gonzalez
Cali-Colombia
rubendariogd@hotmail.com - rubendariogd@gmail.com
Posts: 269
Joined: Fri Sep 25, 2026 01:40 AM

Re: OpenADS libre y de código abierto 🏛️💎💪

Posted: Fri Nov 06, 2026 08:55 PM

Hola Rubén:

Bien, ya confirmas que funcionan tanto el acceso a la consola en el puerto 8080 como las sentencias SQL. Son dos pasos superados.

TDatabase y el resultado de un SELECT

Hay que distinguir la sentencia SQL de su resultado abierto en un área de trabajo. TDatabase no ejecuta el texto de la consulta por llamar a New(). En la fuente FWH 26.03 que he revisado, New() sin argumentos toma el área seleccionada en ese momento, si está abierta. También permite asociarse a un alias ya abierto. Por tanto, importa qué área está seleccionada después de ejecutar el SELECT y si el alias del resultado sigue abierto cuando creas el objeto. Que el SQL haya funcionado no basta si entretanto seleccionaste otra área o cerraste la consulta.

No afirmo todavía que esa sea la causa en tu programa ni que el resultado permita editar la tabla original. Leer una consulta y actualizar sus tablas son cuestiones diferentes, especialmente si hay JOIN, cálculos o agrupaciones.

Pega solo el fragmento desde la creación del statement hasta TDatabase():New() y su primer uso, incluido cualquier SELECT o cierre de área intermedio, y el error exacto o qué significa aquí "no funciona". Indica también tu versión FWH. Harbour/BCC77 de 32 bits ya lo tenemos anotado; no hace falta repetirlo. Sin datos reales ni credenciales. No he probado tu consulta con tu compilador.

ADT y DBF

Son formatos de tabla, no dos formas distintas de escribir una sentencia SQL:

  • DBF es la familia de formatos habitual en xBase. Según el RDD/variante, puede usar índices CDX o NTX.
  • En el formato ADT, los archivos asociados son normalmente ADI para índices y ADM para memos. Ofrece tipos de campo propios; la documentación actual de OpenADS enumera, entre otros, enteros, timestamp, autoincremento y money.

La compatibilidad depende del motor y de la variante concreta, no solo de la extensión. Tampoco convertiría tus DBF para resolver este problema de TDatabase: cambiar el formato no selecciona ni mantiene abierto el alias de una consulta. Cualquier ensayo de formato debe hacerse con tablas sintéticas o copias separadas, nunca renombrando los archivos originales. No he comprobado aquí la interoperabilidad de ADT de otros motores con tu versión 1.09.74.

Documentación pública actual sobre formatos, no una prueba de tu binario:
https://github.com/FiveTechSoft/OpenADS/blob/main/cookbook/docs/connection-strings.md
https://github.com/FiveTechSoft/OpenADS/blob/main/cookbook/docs/field-types.md