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?

Foi útil?

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