dbx에서 blob param으로 sql 명령을 어떻게 실행할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/325874

  •  11-07-2019
  •  | 
  •  

문제

Blob 필드가있는 TSQLDATASET이 있습니다. 공급자의 이전 UPDATERECORD 이벤트 에서이 Blob 필드의 데이터를 가져와 업데이트 명령을 실행해야합니다.

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;

실행할 때 '매개 변수 Pimage에 대한 값이 없습니다.

내가 무엇을 놓치고 있습니까?

도움이 되었습니까?

해결책

내 자신의 질문에 대답하면 올바른 방법은 다음과 같습니다.

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;

다른 팁

다른 드라이버 (예 : ODBC)로 테스트를 시도해 보셨습니까? 오류가 코드에 있지 않을 수 있습니다. 이 접근법 (데이터 제공 업체/운전자 변경)은 내 것이 아닌 혼란스러운 문제를 도와주었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top