在TBlobField使用SQL存储值

问题描述 投票:1回答:4

我想用SQL命令将图像存储到数据库中,我知道用TBlobField.LoadFromFile等其他方式,但我们自己做的SQL命令来更新,这就是为什么我要做这个数据库。

我应该如何去这样做呢?

delphi blob blobstorage
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;

这使您可以使用SQL(而不是.Edit等方法),并且仍然插入BLOB数据


0
投票

如果我理解正确的话,你有某种SQL生成系统,而不是使用数据集,和你想知道如何生成SQL正确执行插入或更新到BLOB字段。

你需要什么是你的图像序列化到一个字符串的方式。例如:

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建议,如果你正在使用的系统支持他们。


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;

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;
© www.soinside.com 2019 - 2024. All rights reserved.