Firebird no Xharbour

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Firebird no Xharbour

Mensagem por Hasse »

Boa noite colegas.

Uso a IDE do Roberto Lopez, compilando com o Harbour 3.2.0, com MingW.

O teste de compilação acusam erro de falta das funções:
hbmk2: Dica: Adicionar op‡Æo 'hbfbird.hbc' faltando nas fun‡äes: FBClose(),
FBFree(), FBGetData(), FBFetch(), FBQuery(), FBStartTransaction(),
FBConnect()
As INCLUDES estão assim:
#include "MINIGUI.CH"
#include "dbinfo.ch"
#include "error.ch"
#include "hbrddsql.ch"
#include "firebird.ch"
#include "common.ch"
#include "Fileio.ch"

Na pasta do PRG tem:
fbclient.dll
firebird.ch
fbclient.lib
firebird.lib
Imagino que estas funções estão dentro de uma das lib's. Elas estão na pasta mas parece que não são assumidas ou não estão do formato adequado.
Onde devem estar estas LIB's ?

Entretanto, observo que as LIB's do Harbour possuem sufixo ".a" - ???????????? -
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Firebird no Xharbour

Mensagem por Hasse »

Boa tarde colegas.

Testei compilar com xHarbour e passou. Gerou o executável.

Código: Selecionar todos

   ? FBCreateDB( cServer + cDatabase, cUser, cPass )
   ? FBCreateDB( "G:\Dev2\DentalOff\Small.gdb","SYSDBA","masterkey" )
A linha acima retornou "0" (zero)

Código: Selecionar todos

   db  := FBConnect( cBanco, "sysdba", "masterkey" )
   db  := FBConnect( "G:\Dev2\DentalOff\Small.gdb", "SYSDBA", "masterkey" )
A linha acima retornou "0x00000001"

Código: Selecionar todos

   trans    := FBStartTransaction( db )
A linha acima aborta o executável, com a mensagem do Windows:
Arquivos que ajudam a descrever o problema:
C:\Users\Padrao\AppData\Local\Temp\WER8AAA.tmp.WERInternalMetadata.xml
C:\Users\Padrao\AppData\Local\Temp\WERAAA6.tmp.appcompat.txt
C:\Users\Padrao\AppData\Local\Temp\WERAB14.tmp.mdmp

Leia nossa declaração de privacidade online:
http://go.microsoft.com/fwlink/?linkid= ... cid=0x0416

Se a declaração de privacidade online não estiver disponível, leia nossa declaração de privacidade offline:
C:\Windows\system32\pt-BR\erofflps.txt
Anexos
Erro.jpg
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Firebird no Xharbour

Mensagem por Hasse »

Boa tarde colegas.

Consegui dominar boa parte da conexão, criar tabelas, ler e gravar tabelas. Mas não consigo gravar dados numéricos contidos em variável dinâmica.
Exemplo:

Código: Selecionar todos

tpm   := FBQuery( db, "CREATE TABLE Teste_FB( COD int, CLIENTE char(20), CIDADE char(25) )", nDialect, trans )
....
trans := FBStartTransaction( db )
FOR xx1 = 1 TO 10000
   cd1 := "1" + strzero( xx1, 09 )
   cd2 := "2" + strzero( xx1, 19 )
   FBExecute( db, "insert into Teste_FB(CLIENTE, CIDADE) values( '&cd1', '&cd2')", nDialect, trans )
NEXT xx1
FBCommit( trans )
Este PRG acima funciona corretamente, gravando os conteúdos das variáveis contendo string cd1 e cd2.

Testei, uma por uma, as linhas abaixo para gravar dado numérico contido na variável xx1:

Código: Selecionar todos

   FBExecute( db, "insert into Teste_FB(COD) values( xx1 )", nDialect, trans )
   FBExecute( db, "insert into Teste_FB(COD) values( 'xx1' )", nDialect, trans )
   FBExecute( db, "insert into Teste_FB(COD) values( &xx1 )", nDialect, trans )
   FBExecute( db, "insert into Teste_FB(COD) values( '&xx1' )", nDialect, trans )
E nenhuma funciona.

Como se faz para contornar este problema ?
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
tonicm
Usuário Nível 2
Usuário Nível 2
Mensagens: 55
Registrado em: 08 Mar 2016 21:51
Localização: Porto

Firebird no Xharbour

Mensagem por tonicm »

Tentar da seguinte forma:

Código: Selecionar todos

FBExecute( db, "insert into Teste_FB(COD) values( "+Transform(xx1, "@E ######.##")+" )", nDialect, trans )

ou

FBExecute( db, "insert into Teste_FB(COD) values( "+AllTrim(Str(xx1))+" )", nDialect, trans )
O que está dentro do transform pode ser mudado conforme for o caso.
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Firebird no Xharbour

Mensagem por Hasse »

Boa noite.

Então pelo que estou entendendo, mesmo que o campo seja int, smallint, ou bigint, o valor gravado deverá ser sempre string ?

Devo sempre transformar o valor numérico em string.

Não é como no DBF que temos campo numérico e grava-se um número.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Firebird no Xharbour

Mensagem por Hasse »

Bom dia TONICM.

A tua sugestão não funcionou.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
tonicm
Usuário Nível 2
Usuário Nível 2
Mensagens: 55
Registrado em: 08 Mar 2016 21:51
Localização: Porto

Firebird no Xharbour

Mensagem por tonicm »

Tentar assim:

Código: Selecionar todos

FBExecute( db, "insert into Teste_FB (COD) VALUES( '"+Transform(xx1, "######")+"' )", nDialect, trans )
Ou assim:

Código: Selecionar todos

FBExecute( db, "insert into Teste_FB (COD) VALUES( "+Transform(xx1, "######")+" )", nDialect, trans )
Testei no meu PC em MySql e funcionou bem.
Avatar do usuário
filizola
Usuário Nível 3
Usuário Nível 3
Mensagens: 421
Registrado em: 19 Ago 2003 20:10
Localização: Belo Horizonte/MG

Firebird no Xharbour

Mensagem por filizola »

tentou assim:

FOR xx1 = 1 TO 10000
cd1 := "1" + strzero( xx1, 09 )
cd2 := "2" + strzero( xx1, 19 )
*-----------------
FBExecute( db, "insert into Teste_FB(COD,CLIENTE, CIDADE) values(xx1,&cd1.,&cd2.')", nDialect, trans )
*-----------------
NEXT xx1
"Um passo a frente, e já não estará mais no mesmo lugar..."
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Firebird no Xharbour

Mensagem por Hasse »

Sim, já tentei esta opção também.

Abaixo todas as opções que já testei:

Código: Selecionar todos

FBExecute( db, "insert into Teste_Dbas(COD) values( xx1 )", nDialect, trans )
FBExecute( db, "insert into Teste_Dbas(COD) values( 'xx1' )", nDialect, trans )
FBExecute( db, "insert into Teste_Dbas(COD) values( &xx1 )", nDialect, trans )
FBExecute( db, "insert into Teste_Dbas(COD) values( '&xx1' )", nDialect, trans )
FBExecute( db, "insert into Teste_Dbas(COD) values( (xx1) )", nDialect, trans )
FBExecute( db, "insert into Teste_Dbas(COD) values( (&xx1) )", nDialect, trans )
FBExecute( db, "insert into Teste_Dbas(COD) values( '(&xx1)' )", nDialect, trans )
FBExecute( db, "insert into Teste_Dbas(COD) values( Str(xx1) )", nDialect, trans )
FBExecute( db, "insert into Teste_Dbas(COD) values( 'Str(xx1)' )", nDialect, trans )
FBExecute( db, "insert into Teste_Dbas(COD) values( 'Alltrim(Str(xx1))' )", nDialect, trans )
O interessante é que funciona com um número fixo na linha:

Código: Selecionar todos

FBExecute( db, "insert into Teste_Dbas(COD) values( 1 )", nDialect, trans )
FBExecute( db, "insert into Teste_Dbas(COD) values( 2 )", nDialect, trans )
FBExecute( db, "insert into Teste_Dbas(COD) values( 3 )", nDialect, trans )
FBExecute( db, "insert into Teste_Dbas(COD) values( 100 )", nDialect, trans )
FBExecute( db, "insert into Teste_Dbas(COD) values( 155 )", nDialect, trans )
Porém assim não dá para desenvolver um programa minimamente eficiente.

Ou tem alguma opção que funcione ou tem um bug na biblioteca FB do Firebird.

Lembrando que o mesmo problema acontece com a biblioteca RDDINFO()

Em último caso preciso voltar à biblioteca ADO.

Eu estava e ainda estou inclinado pela biblioteca FB do Firebird pois ela não necessita do ODBC e nem de outra biblioteca intermediária, mas se não houver outro jeito este fato me levará a retornar ao ADO.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
tonicm
Usuário Nível 2
Usuário Nível 2
Mensagens: 55
Registrado em: 08 Mar 2016 21:51
Localização: Porto

Firebird no Xharbour

Mensagem por tonicm »

O valor a gravar no campo COD tem de estar fora das aspas:

Código: Selecionar todos

Teu teste:
FBExecute( db, "insert into Teste_Dbas(COD) values( 'Alltrim(Str(xx1))' )", nDialect, trans )

Minha forma:
FBExecute( db, "insert into Teste_Dbas(COD) values( "+Alltrim(Str(xx1))+" )", nDialect, trans )
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Firebird no Xharbour

Mensagem por janio »

Um chute:

xx1 ta declarada como variável LOCAL? Experimente coloca-la como PRIVATE!

Jânio

PS: Uso mediator+mysql e numa situação parecida não consigo usar variável local
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Firebird no Xharbour

Mensagem por Hasse »

PERFEITO, meu caro TONICM. OBRIGADO.

Perdão, eu não notei este 'pequeno' detalhe na tua postagem anterior, aquela de ontem, onde já tinha esta instrução.

Agora preciso de mais 2 detalhes:

1)-A lista completa das Funções e Comandos da biblioteca FB e sua respectiva sintaxe.

2)-A lista com a descrição dos Erros retornados.


Onde eu consigo estes documentos ? Já pesquisei no site do Firebird, mas lá não qualquer menção à estas funções.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
tonicm
Usuário Nível 2
Usuário Nível 2
Mensagens: 55
Registrado em: 08 Mar 2016 21:51
Localização: Porto

Firebird no Xharbour

Mensagem por tonicm »

"For full firebird documentation look at:"

https://github.com/harbour/core/tree/ma ... ib/hbfbird
Responder