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"

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

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
"For full firebird documentation look at:"

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