Mensagem de erro "valores Incorretos dentro de SQLDA estrutura" com o Firebird e Delphi 2009
-
13-09-2019 - |
Pergunta
Eu estou strugling com mensagem de erro "valores Incorretos dentro de SQLDA estrutura" quando eu estou tentando atualizar o campo blob dentro Firebird 2.1 banco de dados do Delphi 2009 DBX aplicação.
No entanto, eu recebo a mensagem de erro quando tento executar TSQLQuery com o seguinte SQL:"update MINHA_TABELA set CAMPO1= :dados where id = :id"
O relevante delphi código é:
MyQuery.ParamByName('id').AsInteger := id;
MyQuery.ParamByName('data').LoadFromFile(filename, ftBlob);
MyQuery.ExecSQL();
Onde devo procurar?Este tem vindo a trabalhar em anteriores versões do Delphi.
Solução
Verifique seu motorista - é Para Firebird ou você apenas usa o Interbase motorista para isso?. Sabe -se que a equipe do Firebird alterou a estrutura SQLDA para blobs em 2.1 e, portanto, o driver da Interbase não pode mais ser usado.
Você tem algumas opções aqui:
- (Recomendado, IMHO) Atualização para Delphi 2010 - Além de um driver DBX Firebird, você terá muito mais coisas para brincar (veja aqui para mais)
- Compre um motorista de terceiros para o Firebird, que funciona em Delphi 2009
- 'Downgrade' seu Firebird (use -o como último recurso, é claro)
- Altere sua biblioteca de conectividade. Sim, isso pode implicar que o código seja reescrito.
Outras dicas
Talvez você precise usar o driver DBX gratuito para Firebird
Esse é o tipo de erro de cripta que o driver interbase de Delphi é usado para mostrar.
Eu vi esse problema quando você tem diferentes números de parâmetros na sua instrução SQL e os definidos no seu componente de consulta.
A primeira coisa que vem à mente é garantir que a DLL do cliente (GDS32.DLL ou FB32.DLL ou FBCLIENT.DLL, o nome depende de qual versão do Firebird você está usando) corresponde exatamente à versão do servidor que você está usando.
--Jeroen
FWIW, eu tenho esse erro em um programa perl através da execução de uma instrução, sem vincular variáveis, quando se precisava deles.