2

SQLコマンドを使用して画像をデータベースに保存したい、TBlobField.LoadFromFileなどを使用する他の方法を知っていますが、独自のSQLコマンドを作成してデータベースを更新するため、これを行う必要があります。

これを行うにはどうすればよいですか?

4

4 に答える 4

5

私はこれを試したことはありません (そして現時点では机から離れています) が、パラメーターは機能しますか? 例えば:

Query.Sql.Clear;
Query.Sql.Add('update myTable set myField = :blobVal where myId = :idVal');
Query.ParamByName('idVal').AsInteger := SomeId;
Query.ParamByName('blobVal').LoadFromFile(....
//or
Query.ParamByName('blobVal').LoadFromStream(....
Query.ExecSql;

これにより、(.Edit などのメソッドではなく) SQL を使用して、引き続き BLOB データを挿入できます。

于 2010-01-11T22:34:05.900 に答える
0

これを試して:

Query.Sql.Clear;
Query.Sql.Add('update myTable set myField = :blobVal where myId = :idVal');
Query.ParamByName('idVal').AsInteger := SomeId;
Query.Params.CreateParam(ftBlob,'blobVal',ptInput).LoadFromFile('c:\path.png',ftGraphic);
Query.ExecSql;
于 2010-01-12T19:39:53.397 に答える
0

私の理解が正しければ、データセットを使用する代わりに何らかの SQL 生成システムがあり、Blob フィールドに対して正しく INSERT または UPDATE を実行するための SQL を生成する方法を知りたいと考えています。

必要なのは、画像を文字列にシリアライズする方法です。例えば:

function ImageToString(image: TImage): string;
var
  stream: TStringStream;
begin
  stream := TStringStream.Create;
  try
    image.SaveToStream(stream);
    result := image.DataString;
  finally
    stream.Free;
  end;
end;

準備ができたら、SQL に のようなトークンを配置しset IMAGE_FIELD = $IMAGE$、StringReplace を使用して$IMAGE$トークンをイメージの文字列表現に置き換えます。

または、使用しているシステムがサポートしている場合は、Graza が提案したようにパラメーターを使用することもできます。

于 2010-01-11T22:40:40.473 に答える
0
jpg := TJPEGImage.Create;
jpg.Assign(Image1.Picture.Graphic);
strm := TMemoryStream.Create;
strm.Position:= 0;
jpg.SaveToStream(strm);
IBSQL1.Close;
IBSQL1.SQL.Clear;
IBSQL1.SQL.Add('INSERT INTO ENTRY(FORMNUM, JPG) VALUES(');
IBSQL1.SQL.Add(    quotedstr(edtFormNum.Text));
IBSQL1.SQL.Add(',  :JPG');
IBSQL1.SQL.Add(')');
IBSQL1.Params.ByName('JPG').LoadFromStream(strm);
IBSQL1.ExecQuery;
strm.Free;
jpg.Free;
于 2010-01-13T06:15:45.830 に答える