Firebird
Moderador: Moderadores
Firebird
Pessoal, estou usando o ODBC para acessar o Firebird. No começo eu me enrolei mas no final deu tudo certo. Agora, eu tb consegui acessar usando o hbfbird do contrib, gerei os exemplos, mas as mensagens de erro não aparecem. Andei pesquisando e vi que pode ser o arquivo firebird.msg incompatível.
Alguém já passou por isso ? Queria muito poder ter o Firebird nativo também.
Por enquanto eu vou de ODBC mesmo.
Alguém já passou por isso ? Queria muito poder ter o Firebird nativo também.
Por enquanto eu vou de ODBC mesmo.
Firebird
Boa noite, Vlademiro.
Como vc fez para usar a hbfirebird ?
Você usa o quê para compilar ?
pode dar dicas ?
Gostaria de experimentar, tbm.
Eu uso BCC 5.82
Como vc fez para usar a hbfirebird ?
Você usa o quê para compilar ?
pode dar dicas ?
Gostaria de experimentar, tbm.
Eu uso BCC 5.82
Ramon A. Körber Jr.
Harbour 3.2 MiniGUI Extended Edition
xDevStudio v0.70 - BCC 5.82 - Lazarus FreePascal
Firebird
AdoDB - ODBC
Windows - Linux
Linux User Number 404280
MSN - ramon15061959@hotmail.com
Skype - ramon15061959
ICQ - UIN 82580595
Harbour 3.2 MiniGUI Extended Edition
xDevStudio v0.70 - BCC 5.82 - Lazarus FreePascal
Firebird
AdoDB - ODBC
Windows - Linux
Linux User Number 404280
MSN - ramon15061959@hotmail.com
Skype - ramon15061959
ICQ - UIN 82580595
Firebird
Uso com Mingw e testei tb com BCC 5.8
Em todas as duas versões do harbour, as mensagens de erro não aparecem.
Para ambas siga o procedimento abaixo para compilar
(1) De preferência crie uma máquna virtual sem nada de Firebird. Esse foi meu erro. Eu instalei ele, instalei o IBExpert mais outro cliente SQL. Depois fui testar e nada. Só depois que desinstalei tudo e instalei só o Firebird foi que deu certo.
(2) Instale o Firebird em C:\Firebird. Deixe as outras opções padrão. Não vá instalar em Arquivos de programas nem nada com espaços. Eu testei primeiramente em "Arquivos de Programas" mas não adianta, o Harbour não acha na hora de compilar. Eu sei que tem que botar aspas simples para o windows reconhecer com espaços, foi assim que eu fiz, botei aspas simples, botei duas barras, mas mesmo assim não deu certo. Inclusive no README do Harbour o exemplo lá é em C:\Firebird. Então não adianta teimar. kkkk
(3) Baixe os fontes do Harbour (eu baixei em C:\core-master)
(4) Use apenas as opções mínimas
(5) Agora execute o win-make
(6) Depois win-make install
Agora os problemas...
Temos dois problemas. Um para cada compilador.
(a) Mingw : a compilação termina normalmente, mas vc deve copiar a lib fbclient_ms.lib da pasta lib do firebird (C:\Firebird\lib) para a pasta lib da mingw (lib\win\mingw) e vai renomear a mesma para libfbclient.a . Pronto. Essa dica foi do Alexandre Simoes em outra postagem antiga.
(b) No Borland dá um problema durante a compilação do Harbour. Falta a Unicows.dll. Não perca tempo indo atrás dela, o problema se resolve copiando a unicows.lib que está em c:\core-master\lib\3rd\win\bcc\ . Esse problema rodou no Harbour users, no Fivetech mas eu encontrei em uma postagem antiga aqui também. O Daniel que resolveu. Depois que você copiar tem que gerar o Harbour de novo win-make mas só que dessa vez dá certo, depois win-make install
https://pctoledo.org/forum/viewto ... ws#p114619
***
Se deu certo, o seu harbour compilado vai ter a pasta contribs\hbfbird
Dentro dela tem os testes para vc executar. Para compilar os exemplos precisa da fbclient.dll.
***
Se alguém resolver o problema das mensagens de erro temos uma solução completa. mas do jeito que está lá não serve pra muita coisa. As funções estão ok, dá pra criar banco de dados, realizar consultas, transações, etc. Tem colega aqui (acho que é o Poka) que usa só para criar o banco, depois ele faz tudo com ODBC. Quando dá um erro no banco (tipo registro duplicado, foreign key, etc) nós não sabemos o que aconteceu porque as mensagens não funcionam. COmo já disse suspeito do firebird.msg. Mas não entendo de Firebird, estou testando ele agora.
Em todas as duas versões do harbour, as mensagens de erro não aparecem.
Para ambas siga o procedimento abaixo para compilar
(1) De preferência crie uma máquna virtual sem nada de Firebird. Esse foi meu erro. Eu instalei ele, instalei o IBExpert mais outro cliente SQL. Depois fui testar e nada. Só depois que desinstalei tudo e instalei só o Firebird foi que deu certo.
(2) Instale o Firebird em C:\Firebird. Deixe as outras opções padrão. Não vá instalar em Arquivos de programas nem nada com espaços. Eu testei primeiramente em "Arquivos de Programas" mas não adianta, o Harbour não acha na hora de compilar. Eu sei que tem que botar aspas simples para o windows reconhecer com espaços, foi assim que eu fiz, botei aspas simples, botei duas barras, mas mesmo assim não deu certo. Inclusive no README do Harbour o exemplo lá é em C:\Firebird. Então não adianta teimar. kkkk
(3) Baixe os fontes do Harbour (eu baixei em C:\core-master)
(4) Use apenas as opções mínimas
Código: Selecionar todos
set HB_WITH_FIREBIRD=C:\Firebird\include
set HB_INSTALL_PREFIX=c:\Harbour
(6) Depois win-make install
Agora os problemas...
Temos dois problemas. Um para cada compilador.
(a) Mingw : a compilação termina normalmente, mas vc deve copiar a lib fbclient_ms.lib da pasta lib do firebird (C:\Firebird\lib) para a pasta lib da mingw (lib\win\mingw) e vai renomear a mesma para libfbclient.a . Pronto. Essa dica foi do Alexandre Simoes em outra postagem antiga.
(b) No Borland dá um problema durante a compilação do Harbour. Falta a Unicows.dll. Não perca tempo indo atrás dela, o problema se resolve copiando a unicows.lib que está em c:\core-master\lib\3rd\win\bcc\ . Esse problema rodou no Harbour users, no Fivetech mas eu encontrei em uma postagem antiga aqui também. O Daniel que resolveu. Depois que você copiar tem que gerar o Harbour de novo win-make mas só que dessa vez dá certo, depois win-make install
https://pctoledo.org/forum/viewto ... ws#p114619
***
Se deu certo, o seu harbour compilado vai ter a pasta contribs\hbfbird
Dentro dela tem os testes para vc executar. Para compilar os exemplos precisa da fbclient.dll.
***
Se alguém resolver o problema das mensagens de erro temos uma solução completa. mas do jeito que está lá não serve pra muita coisa. As funções estão ok, dá pra criar banco de dados, realizar consultas, transações, etc. Tem colega aqui (acho que é o Poka) que usa só para criar o banco, depois ele faz tudo com ODBC. Quando dá um erro no banco (tipo registro duplicado, foreign key, etc) nós não sabemos o que aconteceu porque as mensagens não funcionam. COmo já disse suspeito do firebird.msg. Mas não entendo de Firebird, estou testando ele agora.
Firebird
Pra testar antes de compilar o Harbour... Se der certo não precisa fazer o procedimento anterior.
Estou mandando a pasta hbfbird + fbclient.lib compilada com Borland 5.8
Descompacte dentro da contrib e testa pra ver se dá certo.
fbclient.lib (descompactar na pasta lib do harbour)
Estou mandando a pasta hbfbird + fbclient.lib compilada com Borland 5.8
Descompacte dentro da contrib e testa pra ver se dá certo.
fbclient.lib (descompactar na pasta lib do harbour)
Firebird
Valeu Vlademiro !!!
Qual a versão do firebird vc tá usando ?
Vou testar.
Qual a versão do firebird vc tá usando ?
Vou testar.
Ramon A. Körber Jr.
Harbour 3.2 MiniGUI Extended Edition
xDevStudio v0.70 - BCC 5.82 - Lazarus FreePascal
Firebird
AdoDB - ODBC
Windows - Linux
Linux User Number 404280
MSN - ramon15061959@hotmail.com
Skype - ramon15061959
ICQ - UIN 82580595
Harbour 3.2 MiniGUI Extended Edition
xDevStudio v0.70 - BCC 5.82 - Lazarus FreePascal
Firebird
AdoDB - ODBC
Windows - Linux
Linux User Number 404280
MSN - ramon15061959@hotmail.com
Skype - ramon15061959
ICQ - UIN 82580595
Firebird
Blz, vou instalar esta versão e fazer testes.
Dei uma estudada nos exemplos, e depois nos fontes da lib.
É muito antigo, os fontes são de 2010, provavelmente ainda na época da versão 1.5 do Firebird, ou seja, tem 4 versões posteriores a essa, e já está saindo a 5ª versão.
Nos fontes da lib, a última vez que foi mexido em alguma coisa, foi a 3 anos atrás.
E o readme.txt original é de 2003 !!!
Não há suporte total a campos blob, consequentemente, segundo o proprio readme.txt só funciona para texto neste tipo de campo, não possibilitando o uso de imagens, por exemplo.
Quem criou a lib, Rodrigo Moreno, é também o criador da lib do Postgresql.
Em minha opinião, exclusivamente, acho que não seria sensato confiar nossos sistemas a algo assim, tendo ODBC e ADODB a disposição, e como o José Quintas citou anteriormente neste tópico, ainda temos a opção do SQLMIX.
Se for o caso de multi-plataforma, usa-se o odbc puro ou odbc com SQLMIX.
Não critico com esteja usando esta lib, mas eu decidi não investir tempo e esforço em cima dela.
Obrigado a todos que participaram, é sómente a minha opinião, não é uma crítica.
Dei uma estudada nos exemplos, e depois nos fontes da lib.
É muito antigo, os fontes são de 2010, provavelmente ainda na época da versão 1.5 do Firebird, ou seja, tem 4 versões posteriores a essa, e já está saindo a 5ª versão.
Nos fontes da lib, a última vez que foi mexido em alguma coisa, foi a 3 anos atrás.
E o readme.txt original é de 2003 !!!
Não há suporte total a campos blob, consequentemente, segundo o proprio readme.txt só funciona para texto neste tipo de campo, não possibilitando o uso de imagens, por exemplo.
Quem criou a lib, Rodrigo Moreno, é também o criador da lib do Postgresql.
Em minha opinião, exclusivamente, acho que não seria sensato confiar nossos sistemas a algo assim, tendo ODBC e ADODB a disposição, e como o José Quintas citou anteriormente neste tópico, ainda temos a opção do SQLMIX.
Se for o caso de multi-plataforma, usa-se o odbc puro ou odbc com SQLMIX.
Não critico com esteja usando esta lib, mas eu decidi não investir tempo e esforço em cima dela.
Obrigado a todos que participaram, é sómente a minha opinião, não é uma crítica.
Ramon A. Körber Jr.
Harbour 3.2 MiniGUI Extended Edition
xDevStudio v0.70 - BCC 5.82 - Lazarus FreePascal
Firebird
AdoDB - ODBC
Windows - Linux
Linux User Number 404280
MSN - ramon15061959@hotmail.com
Skype - ramon15061959
ICQ - UIN 82580595
Harbour 3.2 MiniGUI Extended Edition
xDevStudio v0.70 - BCC 5.82 - Lazarus FreePascal
Firebird
AdoDB - ODBC
Windows - Linux
Linux User Number 404280
MSN - ramon15061959@hotmail.com
Skype - ramon15061959
ICQ - UIN 82580595
-
leandrolinauer
- Usuário Nível 3

- Mensagens: 413
- Registrado em: 16 Out 2006 10:59
- Localização: Paranaíba-MS
Firebird
Boa tarde a todos.
Pelo que eu entendi a HBFBird não esta sendo atualizada, então não esta funcional?
outra coisa, então pode ser por isto que não grava data vazia?
exemplo do código onde converto a data
Como podem ver acima, onde converte a data todos os exemplos que testei em xx_data, todos deram erro conforme descrito na frente.
Não entendi porque "0000-00-00" formato data vazia para sql, da erro "HY000 value exceeds the range for valid dates" a grosso modo a tradução é "valor excede o intervalo para datas válidas".
Alguem sabe me explicar e qual o modo correto de gravar datas vazias?
Grato
Pelo que eu entendi a HBFBird não esta sendo atualizada, então não esta funcional?
outra coisa, então pode ser por isto que não grava data vazia?
exemplo do código onde converto a data
Código: Selecionar todos
yx_Data:=&o_TableDBF.->&o_Field.
xx_Data:=strzero(year(yx_Data) ,4)+"-"+ strzero(month(yx_Data),2)+"-"+strzero(day(yx_Data),2)
If xx_Data=="0000-00-00" //vazia
// xx_Data:="" //erro HY000 conversion error from string
// xx_Data:=" - - " //erro HY000 conversion error from string
// xx_Data:="NULL" //error HY000 conversion error from string
// xx_Data:="NUL" //error HY000 conversion error from string
// xx_Data:=" " //error HY000 conversion error from string
xx_Data:="0000-00-00" //error HY000 value exceeds the range for valid dates
EndIf
AADD(x1, {o_Field,"'" + xx_Data + "'"})
...abaixo monta a string sql
Não entendi porque "0000-00-00" formato data vazia para sql, da erro "HY000 value exceeds the range for valid dates" a grosso modo a tradução é "valor excede o intervalo para datas válidas".
Alguem sabe me explicar e qual o modo correto de gravar datas vazias?
Grato
Harbour 3.2 + GtWVW + QT + SQLite3 + DBF + SQL (Firebird)
-
leandrolinauer
- Usuário Nível 3

- Mensagens: 413
- Registrado em: 16 Out 2006 10:59
- Localização: Paranaíba-MS
Firebird
Boa tarde a todos.
Como sou teimoso fui tentando até conseguir.
Resultado
Grato
Como sou teimoso fui tentando até conseguir.
Resultado
Código: Selecionar todos
yx_Data:=&o_TableDBF.->&o_Field.
xx_Data:=strzero(year(yx_Data) ,4)+"-"+ strzero(month(yx_Data),2)+"-"+strzero(day(yx_Data),2)
If xx_Data=="0000-00-00" //vazia
xx_Data:="NULL" //error HY000 conversion error from string
AADD(x1, {o_Field,xx_Data}) //nao pode passar com a aspas ' '
Else
AADD(x1, {o_Field,"'" + xx_Data + "'"})
EndIf
Harbour 3.2 + GtWVW + QT + SQLite3 + DBF + SQL (Firebird)
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Firebird
qualquer campo pode ser gravado com NULL, mas na data acaba sendo obrigatório quando vazia.
Esse seria o formato padrão do SQL.
Mas alguns aceitam #2020-07-17# por exemplo, não sei se exatamente nesse formato.
Código: Selecionar todos
FUNCTION DateSQL( dDate )
IF Empty( dDate )
RETURN "NULL"
ENDIF
RETURN ['] + Transform( Dtos( dDate ), "@R 9999-99-99" ) + [']
Mas alguns aceitam #2020-07-17# por exemplo, não sei se exatamente nesse formato.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Firebird
RamonXHB escreveu:Não há suporte total a campos blob, consequentemente, segundo o proprio readme.txt só funciona para texto neste tipo de campo, não possibilitando o uso de imagens, por exemplo
Isso me chamou a atenção numa coisa:RamonXHB escreveu:Em minha opinião, exclusivamente, acho que não seria sensato confiar nossos sistemas a algo assim, tendo ODBC e ADODB a disposição, e como o José Quintas citou anteriormente neste tópico, ainda temos a opção do SQLMIX.
A imagem pode ser transformada em base64, o que acaba sendo um texto, e acaba podendo ser salva.
Até aí, nenhuma novidade.
Mas... e se por acaso usarmos uma LIB, e ela fizer a própria conversão, que não sabemos qual é?
Poderíamos ficar presos à LIB por conta disso.
Lembrando que a base de dados, pelo menos no MySQL, também pode ter uma codepage própria, diferente da usada no aplicativo
Conclusão:
Seja qual for o método usado, convém conferir muito bem o que está sendo salvo.
Seja por conta do formato, seja por conta até de uma conversão simples, que fica vinculada à codepage em uso.
Talvez até interessante testar vários conectores diferentes, pra comparar o ler/salvar se dá diferença.
Esse troço de codepage, UTF-8, UTF-8 com codepage, etc.... é bom ficar de olho.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
Firebird
Da próxima vez que um comando sql der problema, procura escrever o comando que vc está mandando em um log e depois testa no seu gerenciador favorito, como o IBExpert. Essa dica vale para outros bancos também.
Firebird
Pessoal, comecei um pequeno projeto usando o Firebird através do ADO e já me deparei com um pequeno problema na gravação dos dados. Eu descobri a causa, está bem documentada, mas eu segui o passo-a-passo e não consegui resolver, porque tenho pouca experiência com o Firebird.
É o seguinte, quando vou gravar recebo o seguinte erro :
[ODBC Firebird Driver][Firebird]Dynamic SQL Error
SQL error code = -104
Malformed string
A causa do erro é a codificação o banco que não aceita UTF-8.
Queria saber como mudar a codificação do banco para que ele aceite UTF-8.
O erro só dá quando eu gravo acentos, sem os acentos funciona.
É o seguinte, quando vou gravar recebo o seguinte erro :
[ODBC Firebird Driver][Firebird]Dynamic SQL Error
SQL error code = -104
Malformed string
A causa do erro é a codificação o banco que não aceita UTF-8.
Queria saber como mudar a codificação do banco para que ele aceite UTF-8.
O erro só dá quando eu gravo acentos, sem os acentos funciona.
