Harbour + SQLMIX

Forum sobre SQL.

Moderador: Moderadores

MSDN_7
Usuário Nível 1
Usuário Nível 1
Mensagens: 15
Registrado em: 27 Nov 2025 12:38
Curtiram: 1 vez

Re: Harbour + SQLMIX

Mensagem por MSDN_7 »

Itamar, o problema não é aparecer em tela depois que grava, é justamente a informação estar gravada no banco, ela não fica.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 8099
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 5 vezes
Curtiram: 1 vez

Re: Harbour + SQLMIX

Mensagem por Itamar M. Lins Jr. »

Olá!
Pois é.
Se grava só no DBF, vc tá mandando para o lugar errado.
Só se grava no SGBD(MySQL) e fecha e puxa novamente para o DBF.
Se tá no DBF esses dados novos, veio de onde ?
Saudações,
Itamar M. Lins Jr.
MSDN_7
Usuário Nível 1
Usuário Nível 1
Mensagens: 15
Registrado em: 27 Nov 2025 12:38
Curtiram: 1 vez

Re: Harbour + SQLMIX

Mensagem por MSDN_7 »

Vamos por etapas, com certeza algo eu fiz errado :
Código para conectar ao banco Oracle :

Código: Selecionar todos

     rddSetDefault( "SQLMIX" )
     /*
          conectar com o banco : oracle
     */
     cRDD := "SQLMIX"

     oCon := RDDInfo( RDDI_CONNECT, {"OCILIB", "localhost", "system", "102030", "oracle18c"}, cRDD )

     IF oCon == NIL
          alert("Erro ao conectar!")
          RETURN( nil )
     else
          alert('Oracle conectado')
     ENDIF
Ele conecta, tanto que traz no TBrowse os dados que estão fisicamente gravados no banco de dados Oracle, eu abro a tabela pelo Oracle SQL Developer e vejo as informações que gravei por lá aparecerem no TBrowse.

Uso esse código para gravar os dados :

Código: Selecionar todos

                    produto->(dbCloseArea())

                    cSQL := "INSERT INTO produto (descricao,modelo) values ('teste1','teste2')"

                    If rddInfo( RDDI_EXECUTE, cSQL  )

                         dbusearea( .T., , "SELECT * FROM produto", "produto" )

                         alert('gravou')
                    Else
                         alert('falhou')
                    EndIF
Seguindo essa lógica, o que está faltando fazer ?
Detalhe, executei o exemplo do SQLMIX que usa MySQL e deu certo, grava fisicamente no banco, mas, com Oracle, não funciona !

Se eu consigo conectar, pegar os dados, exibir em tela, quer dizer que não tem problema com a conexão, certo ?
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 8099
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 5 vezes
Curtiram: 1 vez

Re: Harbour + SQLMIX

Mensagem por Itamar M. Lins Jr. »

Olá!
Infelizmente, eu não fiz testes com Oracle.
Mas achei isso aqui perguntando para IA. Parece que precisa do commit.
Captura_de_tela_20260502_133247.png
Captura_de_tela_20260502_133247.png (75.1 KiB) Exibido 152 vezes
Saudações,
Itamar M. Lins Jr.
MSDN_7
Usuário Nível 1
Usuário Nível 1
Mensagens: 15
Registrado em: 27 Nov 2025 12:38
Curtiram: 1 vez

Re: Harbour + SQLMIX

Mensagem por MSDN_7 »

Isso eu não sabia, o que a IA disse depois, qual o comando ?
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 8099
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 5 vezes
Curtiram: 1 vez

Re: Harbour + SQLMIX

Mensagem por Itamar M. Lins Jr. »

Olá!
Captura_de_tela_20260502_133454.png
Captura_de_tela_20260502_133454.png (79.17 KiB) Exibido 148 vezes
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 8099
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 5 vezes
Curtiram: 1 vez

Re: Harbour + SQLMIX

Mensagem por Itamar M. Lins Jr. »

Olá!
Perguntei se podia mandar o COMMIT na sentença SQL, mas infelizmente ou fica ativado ou fica mandando depois toda vez que usar INSERT, UPDATE...
Captura_de_tela_20260502_135334.png
Captura_de_tela_20260502_135334.png (78.89 KiB) Exibido 126 vezes
Saudações,
Itamar M. Lins Jr.
MSDN_7
Usuário Nível 1
Usuário Nível 1
Mensagens: 15
Registrado em: 27 Nov 2025 12:38
Curtiram: 1 vez

Re: Harbour + SQLMIX

Mensagem por MSDN_7 »

Inseri no código principal :

Código: Selecionar todos

DBInfo( DBI_SQL_AUTOCOMMIT, .T. )
também tem (no começo do fonte principal) :

Código: Selecionar todos

#include "dbinfo.ch"
mas, aparece o erro dizendo que DBI_SQL_AUTOCOMMIT não existe, e claro, buscando dentro do .CH, não existe mesmo.
a IA ajuda e não ajuda né !
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 8099
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 5 vezes
Curtiram: 1 vez

Re: Harbour + SQLMIX

Mensagem por Itamar M. Lins Jr. »

Olá!
Tenta esse:

Código: Selecionar todos

// Força o commit no Oracle
rddInfo( RDDI_EXECUTE, "COMMIT" )
Saudações,
Itamar M. Lins Jr.
MSDN_7
Usuário Nível 1
Usuário Nível 1
Mensagens: 15
Registrado em: 27 Nov 2025 12:38
Curtiram: 1 vez

Re: Harbour + SQLMIX

Mensagem por MSDN_7 »

Agora a IA ajudou...rsss
inserindo após o INSERT o trecho de código :

Código: Selecionar todos

rddInfo( RDDI_EXECUTE, "COMMIT" )
grava fisicamente no banco ORACLE, problema resolvido, muito obrigado !
fica aqui o registro para quem for precisar um dia, em todos os outros bancos, os exemplos que usam SQLMIX funcionam 100%, porém....se vc for usar o ORACLE, ai tem que usar o COMMIT junto senão não grava no banco.

Abraços Itamar !
MSDN_7
Usuário Nível 1
Usuário Nível 1
Mensagens: 15
Registrado em: 27 Nov 2025 12:38
Curtiram: 1 vez

Re: Harbour + SQLMIX

Mensagem por MSDN_7 »

Como fiz o mesmo questionamento no fórum internacional, acabei de postar a solução direcionando para esse link do fórum, ajudando mais pessoas.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 8099
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 5 vezes
Curtiram: 1 vez

Re: Harbour + SQLMIX

Mensagem por Itamar M. Lins Jr. »

Olá!
Tem mais essas dicas aqui, para evitar ficar mandando commit a cada sentença SQL no Oracle.
NÃO TESTEI!

Código: Selecionar todos

rddInfo( RDDI_EXECUTE, "SET AUTOCOMMIT ON" )
Ou essa quando abrir a conexão:

Código: Selecionar todos

cConn := "DBE=ORA;LOG=usuario/senha@instancia;AUTOCOMMIT=Y"
Ou seja:

Código: Selecionar todos

     oCon := RDDInfo( RDDI_CONNECT, {"OCILIB", "localhost", "system", "102030", "oracle18c", "AUTOCOMMIT=Y"}, cRDD )
Tem que testar ai para ver se vai.
Fui ver o download é 2 Gib(Oracle) para testar aqui, muito grande e tenho que mudar de RPM para DEB... muito trabalho, fica para a próxima os testes.
Saudações,
Itamar M. Lins Jr.
Responder