SQLRDD++: índices com funções do Harbour agora viram índices de expressão nativos no PostgreSQL (adeus colunas INDKEY_)

Forum sobre SQL.

Moderador: Moderadores

marcoprodata
Usuário Nível 1
Usuário Nível 1
Mensagens: 20
Registrado em: 12 Abr 2010 18:56
Localização: Caratinga
Curtiram: 1 vez

SQLRDD++: índices com funções do Harbour agora viram índices de expressão nativos no PostgreSQL (adeus colunas INDKEY_)

Mensagem por marcoprodata »

Pessoal,

Quero compartilhar uma melhoria que acabou de entrar no SQLRDD++ (o fork open source da SQLRDD mantido no GitHub) e que resolve uma dor antiga de quem usa a lib com PostgreSQL: os índices sintéticos.

O problema

Quem usa SQLRDD sabe: ao criar um índice com função na chave, tipo

Código: Selecionar todos

INDEX ON UPPER(NOME) TAG cli1 TO clientes
INDEX ON STRZERO(ID,10) TAG cli2 TO clientes
INDEX ON DTOS(ADMISSAO) + STRZERO(ID,10) TAG cli3 TO clientes
a lib criava uma coluna extra na tabela (INDKEY_001, INDKEY_002...) para gravar o valor calculado da chave, e indexava essa coluna. Isso trazia vários efeitos colaterais:

A tabela ficava "poluída" com colunas que não são suas;
A criação do índice varria a tabela registro a registro fazendo um UPDATE por linha (em tabela grande, demorava muito);
Todo INSERT/UPDATE precisava recalcular e regravar essas colunas — overhead permanente;
Se alguém alterasse a tabela por fora (pgAdmin, script, outro sistema), o índice ficava dessincronizado silenciosamente;
Pior: até índices sem função nenhuma, só com mais de 3 campos (INDEX ON ID+NOME+CIDADE), caíam nessa regra e ganhavam coluna extra.
O que mudou

Agora, no PostgreSQL, chaves com funções padrão do Harbour viram índices de expressão nativos do banco. O INDEX ON UPPER(NOME) gera algo assim direto no PostgreSQL:

Código: Selecionar todos

CREATE INDEX ... ON clientes ((rtrim(upper(coalesce("nome",'')))), "sr_recno")
Sem coluna extra, criação instantânea (não varre a tabela), e o banco mantém o índice sozinho — INSERT/UPDATE não pagam mais nada, e alteração externa não dessincroniza. SEEK (inclusive parcial), SKIP, SET SCOPE, DBEDIT, tudo funciona igual ao DBF.

Funções traduzidas nesta primeira versão: UPPER, SUBSTR, LEFT, STRZERO (com e sem decimais) — além de STR e DTOS, que já eram tratados. Índices multi-coluna também não viram mais sintéticos, independente da quantidade de campos.

E as funções próprias (UDF)?

Se a chave usa uma função sua (INDEX ON MINHAFUNC(NOME)), aí sim continua o mecanismo antigo da coluna sintética — o banco não tem como calcular uma função que só existe no seu executável. Ou seja: coluna extra agora só quando realmente não tem jeito.

Compatibilidade (importante!)

Índices antigos continuam funcionando normalmente com a lib nova, sem reindexar nada;
A conversão é automática e incremental: quando sua rotina de reindexação recriar o índice, a coluna INDKEY_ daquele índice é dropada e o índice de expressão entra no lugar;
Atenção: executável compilado com a lib antiga não consegue abrir índice já convertido. Regra prática: atualize todos os executáveis que acessam o banco antes de reindexar;
Se precisar do comportamento antigo por qualquer motivo: SR_SetExpressionIndex(.F.).
Como testar

Na pasta tests/postgresql tem um programa novo, testexprindex.prg, que cria uma tabela, popula, cria índices com UPPER/SUBSTR/STRZERO/DTOS e um com UDF, mostra via information_schema que só o índice com UDF criou coluna extra, roda baterias de SEEK e abre DBEDIT para você navegar em cada ordem e conferir com os próprios olhos.

Por enquanto a melhoria é específica do PostgreSQL (build sqlrddpp-postgresql), mas a arquitetura ficou preparada para levar a mesma ideia para Firebird, MySQL/MariaDB e Oracle — todos têm recurso equivalente (índice de expressão / coluna computada).

Limitações conhecidas e honestas: STRZERO com valores negativos e funções aninhadas (UPPER(SUBSTR(...))) ainda caem no sintético, e a ordenação de caracteres segue o collation do banco (como sempre foi no SQLRDD, inclusive com as INDKEY).

A alteração já está no repositório do projeto: https://github.com/marcosgambeta/sqlrddpp

Quem usa SQLRDD com PostgreSQL, testa aí e dá um retorno — quanto mais gente validando em cenário real, mais rápido isso amadurece para os outros bancos.

Abraço!
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7150
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Curtiram: 1 vez
Contato:

Re: SQLRDD++: índices com funções do Harbour agora viram índices de expressão nativos no PostgreSQL (adeus colunas INDKE

Mensagem por sygecom »

Parabéns mestre por essa evolução.
Eu não uso esses tipos índice, eliminei eles faz tempo.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2847
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP
Curtiu: 4 vezes
Curtiram: 1 vez

Re: SQLRDD++: índices com funções do Harbour agora viram índices de expressão nativos no PostgreSQL (adeus colunas INDKE

Mensagem por Jairo Maia »

Olá Pessoal,
marcoprodata escreveu: 13 Jul 2026 15:56 Na pasta tests/postgresql tem um programa novo, testexprindex.prg, que cria uma tabela, popula, cria índices com UPPER/SUBSTR/STRZERO/DTOS e um com UDF, mostra via information_schema que só o índice com UDF criou coluna extra, roda baterias de SEEK e abre DBEDIT para você navegar em cada ordem e conferir com os próprios olhos.
Já há uns 3 meses, venho tentando entender "minimamente" como proceder para migrar meus sistemas de DBFCDX para o SQLRDD. Gostaria muito de poder mudar ainda esse ano, mas estou encontrando muita dificuldade. Broncas por burrice serão bem vindas, sem problemas, desde que construtivas até agradeço. Decidi migrar usando SQLRDD com PostgreSQL, penso que é a forma mais usada, mas se aqui já estou cometendo o primeiro erro, por favor me corrijam, sem problemas "mudar de rota".

Baixei os fontes de https://github.com/marcosgambeta/sqlrddpp, indicado nesse site, e criei as libs. No entanto, se tento compilar os exemplos, não consigo.

Estou tentando compilar o exemplo também aqui indicado, a saber: testexprindex.prg. Já tentei entender, mas não consigo, recebo sempre essa mensagem:

Código: Selecionar todos

C:\sqlrddpp-main\tests\postgresql>hbmk2 testexprindex
hbmk2: Processando script local: hbmk.hbm
Harbour 3.2.0dev (r2605141250)
Copyright (c) 1999-2025, https://harbour.github.io/
Compiling 'testexprindex.prg'...
Lines 1323, Functions/Procedures 9
Generating C source output to 'C:\Users\Ebscom\AppData\Local\Temp\hbmk_seot13.dir\testexprindex.c'... Done.
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0xc8): undefined reference to `PQexec'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0xd0): undefined reference to `PQresultStatus'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x128): undefined reference to `PQresultStatus'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x1b5): undefined reference to `PQexec'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x1d6): undefined reference to `PQnfields'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x1e4): undefined reference to `PQresultStatus'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x24c): undefined reference to `PQcmdTuples'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x28f): undefined reference to `PQtransactionStatus'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x2e3): undefined reference to `PQfinish'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x32f): undefined reference to `PQstatus'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x37f): undefined reference to `PQstatus'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x424): undefined reference to `PQconnectdb'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x445): undefined reference to `PQsetNoticeProcessor'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x4ef): undefined reference to `PQerrorMessage'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x546): undefined reference to `PQresultStatus'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x54e): undefined reference to `PQresStatus'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x598): undefined reference to `PQnfields'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x64b): undefined reference to `PQnfields'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x6ac): undefined reference to `PQfname'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x700): undefined reference to `PQftype'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x713): undefined reference to `PQfmod'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x88b): undefined reference to `PQfsize'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0xa21): undefined reference to `PQgetlength'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0xe8f): undefined reference to `PQfsize'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0xeea): undefined reference to `PQclear'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0xf49): undefined reference to `PQresultStatus'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0xf6c): undefined reference to `PQntuples'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x1082): undefined reference to `PQexec'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x1090): undefined reference to `PQresultStatus'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x10a5): undefined reference to `PQntuples'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x1233): undefined reference to `PQgetvalue'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x128d): undefined reference to `PQgetvalue'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x12b0): undefined reference to `PQgetvalue'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x13b4): undefined reference to `PQclear'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x13c7): undefined reference to `PQresultStatus'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x13cf): undefined reference to `PQresStatus'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x13d9): undefined reference to `PQresultStatus'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x13fe): undefined reference to `PQclear'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x142a): undefined reference to `PQgetvalue'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x1ad7): undefined reference to `PQgetvalue'
collect2.exe: error: ld returned 1 exit status
hbmk2: Erro: Executando linkeditor. 1
C:\Hb32\comp\mingw\bin\gcc.exe C:/Users/Ebscom/AppData/Local/Temp/hbmk_seot13.dir/testexprindex.o C:/Users/Ebscom/AppData/Local/Temp/hbmk_seot13.dir/hbmk_7zyimj.o    -mconsole -Wl,--start-group -l"sqlrddpp-postgresql" -lodbc32 -lodbccp32 -lhbextern -lhbdebug -lhbvm -lhbrtl -lhblang -lhbcpage -lgtcgi -lgtpca -lgtstd -lgtwin -lgtwvt -lgtgui -lhbrdd -lhbuddall -lhbusrrdd -lrddntx -lrddcdx -lrddnsx -lrddfpt -lhbrdd -lhbhsx -lhbsix -lhbmacro -lhbcplr -lhbpp -lhbcommon -lhbmainstd -lwinmm -lkernel32 -luser32 -lgdi32 -ladvapi32 -lws2_32 -liphlpapi -lwinspool -lcomctl32 -lcomdlg32 -lshell32 -luuid -lole32 -loleaut32 -lmpr -lmapi32 -limm32 -lmsimg32 -lwininet -lhbpcre -lhbzlib   -Wl,--end-group -otestexprindex.exe  -LC:/Hb32/lib/win/mingw -L../../lib/win/mingw
Quem é a C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a no meu sistema? É a lib que criei no último dia 13/07/2026 usando os fontes que baixei.

Se alguém tiver a paciência de dar alguma luz agradeço, porque se eu conseguir compilar os exemplos, terei uma boa documentação pra estudo.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
marcoprodata
Usuário Nível 1
Usuário Nível 1
Mensagens: 20
Registrado em: 12 Abr 2010 18:56
Localização: Caratinga
Curtiram: 1 vez

Re: SQLRDD++: índices com funções do Harbour agora viram índices de expressão nativos no PostgreSQL (adeus colunas INDKE

Mensagem por marcoprodata »

Jairo Maia escreveu: 15 Jul 2026 09:30 Olá Pessoal,
marcoprodata escreveu: 13 Jul 2026 15:56 Na pasta tests/postgresql tem um programa novo, testexprindex.prg, que cria uma tabela, popula, cria índices com UPPER/SUBSTR/STRZERO/DTOS e um com UDF, mostra via information_schema que só o índice com UDF criou coluna extra, roda baterias de SEEK e abre DBEDIT para você navegar em cada ordem e conferir com os próprios olhos.
Já há uns 3 meses, venho tentando entender "minimamente" como proceder para migrar meus sistemas de DBFCDX para o SQLRDD. Gostaria muito de poder mudar ainda esse ano, mas estou encontrando muita dificuldade. Broncas por burrice serão bem vindas, sem problemas, desde que construtivas até agradeço. Decidi migrar usando SQLRDD com PostgreSQL, penso que é a forma mais usada, mas se aqui já estou cometendo o primeiro erro, por favor me corrijam, sem problemas "mudar de rota".

Baixei os fontes de https://github.com/marcosgambeta/sqlrddpp, indicado nesse site, e criei as libs. No entanto, se tento compilar os exemplos, não consigo.

Estou tentando compilar o exemplo também aqui indicado, a saber: testexprindex.prg. Já tentei entender, mas não consigo, recebo sempre essa mensagem:

Código: Selecionar todos

C:\sqlrddpp-main\tests\postgresql>hbmk2 testexprindex
hbmk2: Processando script local: hbmk.hbm
Harbour 3.2.0dev (r2605141250)
Copyright (c) 1999-2025, https://harbour.github.io/
Compiling 'testexprindex.prg'...
Lines 1323, Functions/Procedures 9
Generating C source output to 'C:\Users\Ebscom\AppData\Local\Temp\hbmk_seot13.dir\testexprindex.c'... Done.
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0xc8): undefined reference to `PQexec'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0xd0): undefined reference to `PQresultStatus'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x128): undefined reference to `PQresultStatus'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x1b5): undefined reference to `PQexec'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x1d6): undefined reference to `PQnfields'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x1e4): undefined reference to `PQresultStatus'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x24c): undefined reference to `PQcmdTuples'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x28f): undefined reference to `PQtransactionStatus'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x2e3): undefined reference to `PQfinish'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x32f): undefined reference to `PQstatus'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x37f): undefined reference to `PQstatus'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x424): undefined reference to `PQconnectdb'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x445): undefined reference to `PQsetNoticeProcessor'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x4ef): undefined reference to `PQerrorMessage'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x546): undefined reference to `PQresultStatus'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x54e): undefined reference to `PQresStatus'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x598): undefined reference to `PQnfields'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x64b): undefined reference to `PQnfields'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x6ac): undefined reference to `PQfname'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x700): undefined reference to `PQftype'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x713): undefined reference to `PQfmod'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x88b): undefined reference to `PQfsize'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0xa21): undefined reference to `PQgetlength'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0xe8f): undefined reference to `PQfsize'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0xeea): undefined reference to `PQclear'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0xf49): undefined reference to `PQresultStatus'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0xf6c): undefined reference to `PQntuples'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x1082): undefined reference to `PQexec'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x1090): undefined reference to `PQresultStatus'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x10a5): undefined reference to `PQntuples'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x1233): undefined reference to `PQgetvalue'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x128d): undefined reference to `PQgetvalue'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x12b0): undefined reference to `PQgetvalue'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x13b4): undefined reference to `PQclear'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x13c7): undefined reference to `PQresultStatus'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x13cf): undefined reference to `PQresStatus'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x13d9): undefined reference to `PQresultStatus'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x13fe): undefined reference to `PQclear'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x142a): undefined reference to `PQgetvalue'
C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a(sr_pgs.o):sr_pgs.c:(.text+0x1ad7): undefined reference to `PQgetvalue'
collect2.exe: error: ld returned 1 exit status
hbmk2: Erro: Executando linkeditor. 1
C:\Hb32\comp\mingw\bin\gcc.exe C:/Users/Ebscom/AppData/Local/Temp/hbmk_seot13.dir/testexprindex.o C:/Users/Ebscom/AppData/Local/Temp/hbmk_seot13.dir/hbmk_7zyimj.o    -mconsole -Wl,--start-group -l"sqlrddpp-postgresql" -lodbc32 -lodbccp32 -lhbextern -lhbdebug -lhbvm -lhbrtl -lhblang -lhbcpage -lgtcgi -lgtpca -lgtstd -lgtwin -lgtwvt -lgtgui -lhbrdd -lhbuddall -lhbusrrdd -lrddntx -lrddcdx -lrddnsx -lrddfpt -lhbrdd -lhbhsx -lhbsix -lhbmacro -lhbcplr -lhbpp -lhbcommon -lhbmainstd -lwinmm -lkernel32 -luser32 -lgdi32 -ladvapi32 -lws2_32 -liphlpapi -lwinspool -lcomctl32 -lcomdlg32 -lshell32 -luuid -lole32 -loleaut32 -lmpr -lmapi32 -limm32 -lmsimg32 -lwininet -lhbpcre -lhbzlib   -Wl,--end-group -otestexprindex.exe  -LC:/Hb32/lib/win/mingw -L../../lib/win/mingw
Quem é a C:/Hb32/lib/win/mingw/libsqlrddpp-postgresql.a no meu sistema? É a lib que criei no último dia 13/07/2026 usando os fontes que baixei.

Se alguém tiver a paciência de dar alguma luz agradeço, porque se eu conseguir compilar os exemplos, terei uma boa documentação pra estudo.
Caro Jairo,

Para compilar é necessário adicionar ter as dlls do postgresql, a versão a qual deseja usar, e acrescentar o seguinte no momento da compilação:

hbmk2 <seuprg> sqlrddpp-postgresql.hbc -l libpq.dll

Precisa ter as seguintes dlls na pasta ou no path para rodar o aplicativo:
libcrypto-3-x64.dll
libiconv-2.dll
libintl-9.dll
libpq.dll
libssl-3-x64.dll
libwinpthread-1.dll
marcoprodata
Usuário Nível 1
Usuário Nível 1
Mensagens: 20
Registrado em: 12 Abr 2010 18:56
Localização: Caratinga
Curtiram: 1 vez

Re: SQLRDD++: índices com funções do Harbour agora viram índices de expressão nativos no PostgreSQL (adeus colunas INDKE

Mensagem por marcoprodata »

Outro detalhe, se compilou a lib com o hbmk2 padrão, dentro da sua pasta do harbour vai ter uma pasta addons com a subpasta da lib sqlrdd
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20513
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 2 vezes

Re: SQLRDD++: índices com funções do Harbour agora viram índices de expressão nativos no PostgreSQL (adeus colunas INDKE

Mensagem por JoséQuintas »

Jairo, acredite....
Burrice pode ser usar/tentar usar essas coisas.
É muito sério isto.

É como trocar de fusca pra Ferrari, e ficar querendo usar adaptador pra colocar pneu de fusca.
Isso é uma burrice muito grande, e é exatamente jogar a Ferrari no lixo.

banco de dados SQL é muito mais do que só guardar informação.
O banco SQL tem um mecanismo próprio que agiliza tudo.
Ao usar igual DBF, você está destruindo isso.

Você vai acabar nem aprendendo a usar banco de dados, nem vai usar recursos que eles tem, e vai ficar preso a coisa morta.
Acho que usuário DBF é a risada geral da internet, é andar na contra mão do progresso.

O que insisti muito sobre usar ADO é justamente pra esquecer esse uso igual DBF, e começar a usar o que realmente o SQL tem.

Basicamente você está apenas testando o produto de outra pessoa, ao invés de estar desenvolvendo alguma coisa.
É legal, é um serviço trabalhoso de ser feito, mas o fato é que isso deve ser usado só pra conversão, o mínimo possível.
Se isso ajudar a migrar seu aplicativo 100% automático, ótimo, isso é só uma pequena parte do conjunto.
Sim, por incrível, que pareça, se tudo funcionar perfeito, 100% sem erros, você ainda nem começou a fazer alteração.
E vai estar tudo PIOR do que com DBF.

Muito sério isto.
Você vai ter migrado seu aplicativo pra SQL, não vai ter melhorado bost. nenhuma, ao contrário, vai estar tudo pior que antes.
E o mais interessante:
Vai estar pronto pra outras pessoas que conhecem SQL e podem fazer um serviço melhor do que o seu.
É como dar um tiro no pé.

Já foi o tempo do DBF.
Ninguém hoje em dia usaria DBF, só mesmo os velhotes teimosos que vieram do dBase/Clipper.
No SQL, "TEORICAMENTE", você não precisa se preocupar com ORDER, com USE, SET INDEX, etc. nada disso.
E tem TUDO na mão, o que se refere a base de dados, TUDO MESMO.
E com tudo na mão, usar igual DBF é "tirar da mão".


Use igual ADO mesmo, pra entender como funciona uma base SQL.
Depois decida o que fazer.

Tem a opção de usar o Advantage Database Server como local, o conector.
Esse conector é grátis e funciona sem servidor.
Vai poder usar DBF por comando SQL.
Vai ver a diferença de uso, velocidade, etc.
Vai ver a vantagem encima das bases que já tem, e depois pode trocar pra PostgreSQL ou MySQL ou outro.
NADA A VER com hbnetio, ou letodbf, ou outro pra dbf.

Base SQL é um servidor atendendo tudo que se refere ao banco de dados.
Pense nisso:
base SQL é ter um computador inteiro só pra trabalhar com banco de dados.
Usar igual DBF, é jogar esse computador no lixo, e cada terminal ficar fazendo suas gambiarras no banco de dados.
O que acha que aprende nesse uso ?
Vai achar que tudo precisa de gambiarra, vai encher o aplicativo de gambiarra.

Infelizmente é complicado.
SQLRDD é algo extremamente trabalhoso, desde a criação, e pra toda atualização.
É útil pra uma migração rápida, pra ganhar tempo, trocar tudo e esquecer o DBF.
Mas.... esse "esquecer o DBF" é justamente travar os fontes em usar DBF.
Fica difícil pro programador entender o que é "não usar DBF", se ele está usando igual DBF.

Índices SQL são poderosos.
A alteração citada neste post é justamente pra tentar resolver problema criado ao usar índice igual DBF.
E usuário DBF acha maravilhoso isso..... não é um recurso a mais, é a tentativa de não perder recurso, será que não entendem isso ?

É igual pegar um carro que dirige sozinho sem motorista, e desligar o piloto automático, pra usar igual carro sem motorista.
Se é pra fazer isso, não compra carro automático, não precisa SQL.
E vai perder não só o motorista automático, mas também toda possibilidade do carro NAVEGAR pelas ruas, e usar o melhor caminho, mais rápido e com menos trânsito.
Ou usar gambiarras como celular pra navegar ou outra coisa.

CUIDADO com a interpretação errada sobre usar SQLRDD e similares.
É mesmo pra evitar mexer em fontes.
Mas não mexer em fontes, não significa que é o melhor resultado.
É pra ganhar tempo de migração, e não pra resolver problemas.

Comparação rápida.
Incluir 10.000 registros estilo SQLRDD ou similar pode demorar várias horas.
no estilo SQL poderão ser alguns segundos.
É coisa errada ? Não. O uso de um banco SQL não é igual ao uso de um banco DBF.
Tem coisas que precisam ser repensadas.
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20513
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 2 vezes

Re: SQLRDD++: índices com funções do Harbour agora viram índices de expressão nativos no PostgreSQL (adeus colunas INDKE

Mensagem por JoséQuintas »

Nem precisa acreditar em mim.
O menos traumático talvez fosse instalar um ODBC de ADS e usar DBF/CDX por SQL.
Vai ver resultados surpreendentes, velocidade que nunca viu em programa nenhum, mesmo em rede.
O limite do ADS local era de 20 usuários.
É apenas uma opção de usar SQL encima dos arquivos que já possui.
Pode ser 1.000 vezes mais rápido do que fontes que já tem.

Aí vai entender a diferença entre deixar fontes sem mexer, ou alterar fontes pra ter velocidade total.

Nota:
ADS nem fabrica mais, existe há mais de 25 anos.
Não pense que está na mão bonitinho pra fazer testes.
fivewin até está criando a opção open, mas é outra coisa velha apenas intermediária.
Em 25 anos não usou, não é agora que vai encontrar tudo fácil de usar.
Uns vão falar dessa opção open, outros vão falar que tá morto e não vale a pena, etc. vai ter opinião de todo tipo.
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 8144
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 6 vezes
Curtiram: 1 vez

Re: SQLRDD++: índices com funções do Harbour agora viram índices de expressão nativos no PostgreSQL (adeus colunas INDKE

Mensagem por Itamar M. Lins Jr. »

Olá!
Vejo que todo esforço para melhorar as nossas ferramentas é louvável.
Parabéns pelo bom trabalho no SQLRDD++.
Vou aproveitar essa conversa para tirar o pó aqui e migrar meu ERP para Pg. Que esta vai não vai.
Precisa ser Linux e Windows. Não vou usar ADO.
Estava conversando aqui com a IA e vou usar "COISAS UNIVERSAIS". Se é para mudar que seja para soluções usadas pela maioria.
Vai dar um trabalho bem legal. Vou inclusive mudar os nomes dos FIELDS...Para a nome real lá do manual da SEFAZ por exemplo.
Se é para UNIVERSALIZAR que seja completo. Inclusive para as IAs ajudarem nisso.
Usando o que já uso SQLMIX.
Mas eu não estou DESCARTANDO nada não! Inclusive o SQLRDD++, tá na mira.
O que não vou usar é a SINTAXE DBF no trato com bancos relacionais. No resultado da sentença pode até ser. Como o "Move.Next" do ADO.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2847
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP
Curtiu: 4 vezes
Curtiram: 1 vez

Re: SQLRDD++: índices com funções do Harbour agora viram índices de expressão nativos no PostgreSQL (adeus colunas INDKE

Mensagem por Jairo Maia »

Olá Pessoal,

Consideração 1 (marcoprodata):
marcoprodata escreveu: 15 Jul 2026 10:23 Para compilar é necessário adicionar ter as dlls do postgresql, a versão a qual deseja usar:
Pronto. Baixei as DLLs desse link: https://www.enterprisedb.com/downloads/ ... -downloads, peguei a versão 18.4. Não sei se é a correta para esse caso.
marcoprodata escreveu: 15 Jul 2026 10:23 e acrescentar o seguinte no momento da compilação: hbmk2 <seuprg> sqlrddpp-postgresql.hbc -l libpq.dll
Bingo! Compilou certinho, apenas o seguinte: ao rodar o executável, dá a mensagem: O Aplicativo não pode ser iniciado corretamente, e o código [0xc000007b]. Vou procurar pra saber do que se trata. Talvez algo na minha máquina de desenvolvimento, sei lá...

Mas andou. Dei um passo a mais...

Consideração 2 (José Quintas):

Caramba José... Pedi bronca, não banho de água fria. :D
JoséQuintas escreveu: 15 Jul 2026 11:00O menos traumático talvez fosse instalar um ODBC de ADS e usar DBF/CDX por SQL.
Legal... Falou em grego com sotaque chinês...

JoséQuintas escreveu: 15 Jul 2026 11:00Em 25 anos não usou, não é agora que vai encontrar tudo fácil de usar.
Na verdade em 32... Mas em momento nenhum achei que iria encontrar tudo fácil. Aliás, por isso somente agora que eu "preciso" mesmo de mudar, estou começando a ver qual melhor caminho. Claro que poderia ter começado anos antes, mas não fiz. Agora é correr atráz do "prejuízo"...

Agradeço muito seu comentário. Obrigado. Vou cntinuar na lida, mas preciso mudar a curto prazo. Toda dica, advertência, bronca ou sugestão será bem vinda. valeu...
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20513
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 2 vezes

Re: SQLRDD++: índices com funções do Harbour agora viram índices de expressão nativos no PostgreSQL (adeus colunas INDKE

Mensagem por JoséQuintas »

Geralmente eu posto como geral, e não diretamente a um usuário.
Não entendi o "agora preciso mesmo mudar".
DBF funciona bem, ele é usado como está, preferencialmente DBFCDX.

Com o auxílio de ADS, pode usar DBF por comandos SQL.
Isso te dá a idéia do que é SQL, e como tirar proveito dele.
E vai poder usar encima dos seus DBFs, encima do que já tem, pra avaliar.

Quando digo usar ADO, é usar apenas a conexão, é tudo comando SQL direto, NÃO TEM NADA A VER COM ADO.
INFELIZMENTE, acho que o Itamar nem sabe do que está falando, atribui tudo a testes aleatórios que fez, e que não representam o uso de SQL.

ADO/SQL/ODBC existem há mais de 30 anos.
Nestes 30 anos, tá cheio de programador que sabe mexer, e o ADO continua no windows até hoje.

No seu caso:
Tá pensando em postgree....
E vai aprender isso quando ? com SQLRDD.
Então não vai aprender nunca.
E suas bases de dados poderão pifar a qualquer momento, e não vai saber mexer.
Vai ter que chamar e pagar o preço de um programador que conheça melhor.
Já pensou nisso ?
Ou pode ser que precise apenas um uso parcial e não total do SQL.
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20513
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 2 vezes

Re: SQLRDD++: índices com funções do Harbour agora viram índices de expressão nativos no PostgreSQL (adeus colunas INDKE

Mensagem por JoséQuintas »

Voltando nisso:

Se usar ADO, OU OUTRO:
NÃO precisa mudar total de uma vez.
Pode fazer parcial e ir acostumando com as coisas.

Não tem que ficar inventando estórias, tentando descobrir o que acontece.
Apenas comece, parcial, e veja o resultado.
Decida por si próprio, pelo que acontecer no uso.

Lembrando:
Minha migração pra ADO/MySQL está toda no fórum.
Fui fazendo parcial, pra ver o que ia acontecendo, inclusive gravação simultânea DBF/MySQL.
Fiz pelo que foi acontecendo no uso prático, e não porque alguém falou.
Fui em frente, sem depender de ninguém mexendo em biblioteca ou resolvendo bug de biblioteca.
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
marcoprodata
Usuário Nível 1
Usuário Nível 1
Mensagens: 20
Registrado em: 12 Abr 2010 18:56
Localização: Caratinga
Curtiram: 1 vez

Re: SQLRDD++: índices com funções do Harbour agora viram índices de expressão nativos no PostgreSQL (adeus colunas INDKE

Mensagem por marcoprodata »

Jairo Maia escreveu: 15 Jul 2026 12:38 Olá Pessoal,

Consideração 1 (marcoprodata):
marcoprodata escreveu: 15 Jul 2026 10:23 Para compilar é necessário adicionar ter as dlls do postgresql, a versão a qual deseja usar:
Pronto. Baixei as DLLs desse link: https://www.enterprisedb.com/downloads/ ... -downloads, peguei a versão 18.4. Não sei se é a correta para esse caso.
marcoprodata escreveu: 15 Jul 2026 10:23 e acrescentar o seguinte no momento da compilação: hbmk2 <seuprg> sqlrddpp-postgresql.hbc -l libpq.dll
Bingo! Compilou certinho, apenas o seguinte: ao rodar o executável, dá a mensagem: O Aplicativo não pode ser iniciado corretamente, e o código [0xc000007b]. Vou procurar pra saber do que se trata. Talvez algo na minha máquina de desenvolvimento, sei lá...

Mas andou. Dei um passo a mais...

Consideração 2 (José Quintas):

Caramba José... Pedi bronca, não banho de água fria. :D
JoséQuintas escreveu: 15 Jul 2026 11:00O menos traumático talvez fosse instalar um ODBC de ADS e usar DBF/CDX por SQL.
Legal... Falou em grego com sotaque chinês...

JoséQuintas escreveu: 15 Jul 2026 11:00Em 25 anos não usou, não é agora que vai encontrar tudo fácil de usar.
Na verdade em 32... Mas em momento nenhum achei que iria encontrar tudo fácil. Aliás, por isso somente agora que eu "preciso" mesmo de mudar, estou começando a ver qual melhor caminho. Claro que poderia ter começado anos antes, mas não fiz. Agora é correr atráz do "prejuízo"...

Agradeço muito seu comentário. Obrigado. Vou cntinuar na lida, mas preciso mudar a curto prazo. Toda dica, advertência, bronca ou sugestão será bem vinda. valeu...
Sobre o erro geralmente pode ser conflito de DLL, mantenha as dlls inicialmente na pasta do executavel, pra garantir que não vai chamar alguma dll de outra pasta que esteja no path. Verifique também se compilou o harbour com postgresql, e qual versão do postgresql usou para compilar o harbour.

Sobre a opinião do mestre Quintas, eu discordo dela, o SQLRDD é uma excelente opção para migrar os programas que usam DBF/CDX para bancos SQL, com pouco esforço inicial, e na sequência ir ajustando o programa para usar os comandos SQL com o programa já em funcionamento, sem contar que pra usar os comandos SQL com ele também é mais fácil do que usar a lib postgres nativa do harbour. Sem contar que é um biblioteca já consolidada, eu mesmo uso ela desde 2006 por ai quando foi lançada e nunca tive problemas com ela, tanto que usava essa versão até ser liberado recentemente o código fonte da mesma, que agora usei para atualizar meus sistemas para versão nova do postgresql.
E usar a SQLRDD não me impediu ou atrapalhou o aprendizado de bancos SQL, pois isso é um processo natural pra quem é desenvolvedor.

Minha opinião, vai fundo, converte seu programa em poucos dias, e vai tunnando ele com o tempo, as rotinas criticas, relatórios e etc.
marcoprodata
Usuário Nível 1
Usuário Nível 1
Mensagens: 20
Registrado em: 12 Abr 2010 18:56
Localização: Caratinga
Curtiram: 1 vez

Re: SQLRDD++: índices com funções do Harbour agora viram índices de expressão nativos no PostgreSQL (adeus colunas INDKE

Mensagem por marcoprodata »

Um detalhe, esse trabalho que foi feito (com ajuda da IA, diga se de passagem), é exatamente para facilitar a integração com aplicativos feitos em outras linguagens, por exemplo, hoje tenho sistemas mobile feitos em flutter, de força de vendas que se comunicam com minhas tabelas do ERP em harbour + SQLRDD, só que por causa dessas colunas de indices, tinha um trabalho extra a ser feito, agora não mais, vai facilitar, se tiver um site de vendas e quiser gravar diretamente no seu banco de dados por exemplo, agora fica mais fácil.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 8144
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 6 vezes
Curtiram: 1 vez

Re: SQLRDD++: índices com funções do Harbour agora viram índices de expressão nativos no PostgreSQL (adeus colunas INDKE

Mensagem por Itamar M. Lins Jr. »

JoséQuintas escreveu: 15 Jul 2026 14:57 Quando digo usar ADO, é usar apenas a conexão, é tudo comando SQL direto, NÃO TEM NADA A VER COM ADO.
INFELIZMENTE, acho que o Itamar nem sabe do que está falando, atribui tudo a testes aleatórios que fez, e que não representam o uso de SQL.
Eu não sei, nem as IAs...
Mas segundo o pouco que sei ADO, e justamente a CAMADA que o SQLRDD[++] não usa e também SQLMIX não usa.
Pq tem tratamento próprio interno desses RDDs.
O importante é o SQL. E se vc não sabe, ADO só tem no Windows e nenhuma linguagem moderna faz uso disso.
Pergunte para as IAs da vida ai, o que estão usando no lugar do ADO. E pq não é mais aconselhável usar ADO.
Até onde sei, RDDSQL++ vc digita direto as sentenças SQL, não precisa usar "DO WHILE..." igual ao SQLMIX.
Vai lendo ai via IA o que é o ADO do windows, VARIANT pq degrada etc...Mesmo usando o ADO desconectado do servidor... Vai vendo ai.
Vai vendo o que é COM, ActiveX, etc... Que só tem no Windows e pq no próprio Windows o C# usa ORM, (EF CORE) é o recomendado atualmente.
E outra, vc mesmo pode mudar isso não usar ADO no Windows. Já que para todos o importante são os comandos SQL.
Como eu uso o Harbour, eu tenho 3 possibilidades(salvo engano) de usar SQL, SQLRDD[++] ou SQLMIX ou HbPgsql. Esses dois ultimos temos na pasta contrib do Harbour.
Ainda não vi um exemplo de Browse com o HbPgsql.
Enfim usarei qualquer coisa que mantenha o padrão superior, ao que já tenho.
Saudações,
Itamar M. Lins Jr.
marcoprodata
Usuário Nível 1
Usuário Nível 1
Mensagens: 20
Registrado em: 12 Abr 2010 18:56
Localização: Caratinga
Curtiram: 1 vez

Re: SQLRDD++: índices com funções do Harbour agora viram índices de expressão nativos no PostgreSQL (adeus colunas INDKE

Mensagem por marcoprodata »

Itamar M. Lins Jr. escreveu: 15 Jul 2026 16:53
JoséQuintas escreveu: 15 Jul 2026 14:57 Quando digo usar ADO, é usar apenas a conexão, é tudo comando SQL direto, NÃO TEM NADA A VER COM ADO.
INFELIZMENTE, acho que o Itamar nem sabe do que está falando, atribui tudo a testes aleatórios que fez, e que não representam o uso de SQL.
Eu não sei, nem as IAs...
Mas segundo o pouco que sei ADO, e justamente a CAMADA que o SQLRDD[++] não usa e também SQLMIX não usa.
Pq tem tratamento próprio interno desses RDDs.
O importante é o SQL. E se vc não sabe, ADO só tem no Windows e nenhuma linguagem moderna faz uso disso.
Pergunte para as IAs da vida ai, o que estão usando no lugar do ADO. E pq não é mais aconselhável usar ADO.
Até onde sei, RDDSQL++ vc digita direto as sentenças SQL, não precisa usar "DO WHILE..." igual ao SQLMIX.
Vai lendo ai via IA o que é o ADO do windows, VARIANT pq degrada etc...Mesmo usando o ADO desconectado do servidor... Vai vendo ai.
Vai vendo o que é COM, ActiveX, etc... Que só tem no Windows e pq no próprio Windows o C# usa ORM, (EF CORE) é o recomendado atualmente.
E outra, vc mesmo pode mudar isso não usar ADO no Windows. Já que para todos o importante são os comandos SQL.
Como eu uso o Harbour, eu tenho 3 possibilidades(salvo engano) de usar SQL, SQLRDD[++] ou SQLMIX ou HbPgsql. Esses dois ultimos temos na pasta contrib do Harbour.
Ainda não vi um exemplo de Browse com o HbPgsql.
Enfim usarei qualquer coisa que mantenha o padrão superior, ao que já tenho.
Segue um exemplo de browse usando o hbpgsql que fiz a muito tempo quando converti um programa pequeno inteiro usando a hbpgsql.
tdbedit.prg
(3.14 KiB) Baixado 5 vezes
Responder