Como posso executar um comando sql com um param blob em DBX?
Pergunta
Eu tenho uma objetos TSQLDataSet que tem um campo blob, eu preciso para obter os dados deste campo blob no caso BeforeUpdateRecord do prestador e executar um comando de atualização, eu tentei isso:
Cmd := TSQLQuery.Create(nil);
try
Cmd.SQLConnection := SQLConnection;
Cmd.CommandText := 'UPDATE MYTABLE SET IMAGE = :PIMAGE WHERE ID = :PID';
Cmd.Params.CreateParam(ftBlob, 'PIMAGE ', ptInput).Value := DeltaDS.FieldByName('IMAGE').NewValue; //blob field
Cmd.Params.CreateParam(ftString, 'PID', ptInput).Value := DeltaDS.FieldByName('ID').NewValue;
Cmd.ExecSQL;
finally
Cmd.Free;
end;
Quando eu executo que eu recebo um EDatabaseError com mensagem:. 'Nenhum valor para o parâmetro PImage
O que eu estou ausente?
Solução
Respondendo a minha própria pergunta, a maneira correta de fazê-lo é o seguinte:
const
SQL = 'UPDATE MYTABLE SET IMAGE = :PIMAGE WHERE ID = :PID;';
var
Params: TParams;
begin
Params := TParams.Create(nil);
try
Params.CreateParam(ftBlob, 'PIMAGE', ptInput).AsBlob := DeltaDS.FieldByName('IMAGE').NewValue;
Params.CreateParam(ftString, 'PID', ptInput).Value := DeltaDS.FieldByName('ID').NewValue;
SQLConnection.Execute(SQL, Params);
finally
Params.Free;
end;
end;
Outras dicas
Você já tentou testar com outro driver (por exemplo, ODBC)? É possível que o erro não está em seu código. Esta abordagem (mudar de fornecedor de dados / drivers) me ajudou com alguns problemas confundindo que acabou por não ser meu.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow