Página 3 de 3
Firebird no Xharbour
Enviado: 06 Out 2016 21:41
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" -

????????? -
Firebird no Xharbour
Enviado: 07 Out 2016 17:49
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"
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
Firebird no Xharbour
Enviado: 15 Out 2016 15:59
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 ?
Firebird no Xharbour
Enviado: 15 Out 2016 17:50
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.
Firebird no Xharbour
Enviado: 15 Out 2016 19:03
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.
Firebird no Xharbour
Enviado: 16 Out 2016 09:34
por Hasse
Bom dia TONICM.
A tua sugestão não funcionou.
Firebird no Xharbour
Enviado: 16 Out 2016 14:45
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.
Firebird no Xharbour
Enviado: 16 Out 2016 16:09
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
Firebird no Xharbour
Enviado: 16 Out 2016 20:13
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.
Firebird no Xharbour
Enviado: 16 Out 2016 20:50
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 )
Firebird no Xharbour
Enviado: 16 Out 2016 21:27
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
Firebird no Xharbour
Enviado: 16 Out 2016 21:40
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.
Firebird no Xharbour
Enviado: 18 Out 2016 17:48
por tonicm