Clipper On Line • Ver Tópico - Firebird

Firebird

Discussão sobre SQL

Moderador: Moderadores

 

Firebird

Mensagempor Vlademiro » 13 Jul 2020 12:37

Eu tb. Fazia tempo que eu não ia lá no Facebook. Tive que recuperar a senha
Avatar de usuário

Vlademiro
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 749
Data de registro: 11 Jul 2005 02:46
Curtiu: 22 vezes
Mens.Curtidas: 62 vezes

Firebird

Mensagempor Vlademiro » 14 Jul 2020 19:03

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.
Avatar de usuário

Vlademiro
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 749
Data de registro: 11 Jul 2005 02:46
Curtiu: 22 vezes
Mens.Curtidas: 62 vezes

Firebird

Mensagempor RamonXHB » 14 Jul 2020 19:35

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
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
Avatar de usuário

RamonXHB
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 151
Data de registro: 03 Mar 2007 14:55
Curtiu: 10 vezes
Mens.Curtidas: 3 vezes

Firebird

Mensagempor Vlademiro » 15 Jul 2020 01:37

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

set HB_WITH_FIREBIRD=C:\Firebird\include
set HB_INSTALL_PREFIX=c:\Harbour


(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

http://www.pctoledo.com.br/forum/viewtopic.php?f=4&t=18161&p=114619&hilit=unicows#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.
Avatar de usuário

Vlademiro
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 749
Data de registro: 11 Jul 2005 02:46
Curtiu: 22 vezes
Mens.Curtidas: 62 vezes

Firebird

Mensagempor Vlademiro » 15 Jul 2020 01:47

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.

hbfbird.zip
(351.55 KiB) Baixado 90 vezes


fbclient.lib (descompactar na pasta lib do harbour)
fbclient.zip
(8.1 KiB) Baixado 63 vezes
Avatar de usuário

Vlademiro
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 749
Data de registro: 11 Jul 2005 02:46
Curtiu: 22 vezes
Mens.Curtidas: 62 vezes

Firebird

Mensagempor RamonXHB » 15 Jul 2020 10:41

Valeu Vlademiro !!!
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
Avatar de usuário

RamonXHB
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 151
Data de registro: 03 Mar 2007 14:55
Curtiu: 10 vezes
Mens.Curtidas: 3 vezes

Firebird

Mensagempor Vlademiro » 15 Jul 2020 13:26

Usei a 2.5 32 bits, a última versão antes da 3. Baixei do site há poucos dias
Avatar de usuário

Vlademiro
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 749
Data de registro: 11 Jul 2005 02:46
Curtiu: 22 vezes
Mens.Curtidas: 62 vezes

Firebird

Mensagempor RamonXHB » 15 Jul 2020 13:45

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.
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
Avatar de usuário

RamonXHB
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 151
Data de registro: 03 Mar 2007 14:55
Curtiu: 10 vezes
Mens.Curtidas: 3 vezes

Firebird

Mensagempor Vlademiro » 15 Jul 2020 17:51

Também cheguei a essa mesma conclusão. É arriscado.
Avatar de usuário

Vlademiro
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 749
Data de registro: 11 Jul 2005 02:46
Curtiu: 22 vezes
Mens.Curtidas: 62 vezes

Firebird

Mensagempor leandrolinauer » 17 Jul 2020 14:34

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
       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


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
Harbour 3.2 + GtWVW + QT + SQLite3 + DBF + SQL (Firebird)
leandrolinauer
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 373
Data de registro: 16 Out 2006 10:59
Cidade/Estado: Paranaíba-MS
Curtiu: 0 vez
Mens.Curtidas: 12 vezes

Firebird

Mensagempor leandrolinauer » 17 Jul 2020 15:27

Boa tarde a todos.
Como sou teimoso fui tentando até conseguir.
Resultado
       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


Grato
Harbour 3.2 + GtWVW + QT + SQLite3 + DBF + SQL (Firebird)
leandrolinauer
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 373
Data de registro: 16 Out 2006 10:59
Cidade/Estado: Paranaíba-MS
Curtiu: 0 vez
Mens.Curtidas: 12 vezes

Firebird

Mensagempor JoséQuintas » 17 Jul 2020 18:19

qualquer campo pode ser gravado com NULL, mas na data acaba sendo obrigatório quando vazia.

FUNCTION DateSQL( dDate )

   IF Empty( dDate )
      RETURN "NULL"
   ENDIF
   RETURN [']  + Transform( Dtos( dDate ), "@R 9999-99-99" ) + [']


Esse seria o formato padrão do SQL.
Mas alguns aceitam #2020-07-17# por exemplo, não sei se exatamente nesse formato.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Firebird

Mensagempor JoséQuintas » 17 Jul 2020 18:31

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


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.


Isso me chamou a atenção numa coisa:
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, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Firebird

Mensagempor Vlademiro » 17 Jul 2020 19:38

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.
Avatar de usuário

Vlademiro
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 749
Data de registro: 11 Jul 2005 02:46
Curtiu: 22 vezes
Mens.Curtidas: 62 vezes

Firebird

Mensagempor Vlademiro » 18 Jul 2020 02:00

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.
Avatar de usuário

Vlademiro
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 749
Data de registro: 11 Jul 2005 02:46
Curtiu: 22 vezes
Mens.Curtidas: 62 vezes

Anterior Próximo



Retornar para SQL

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 7 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro