目的将图像存储到数据库中
手段采用流的形式MS := TStringStream.Create('');
if OpenDialog1.Execute then
begin
Image1.Picture.LoadFromFile(OpenDialog1.FileName);end;
//Ms.Position :=0;
image1.Picture.Bitmap.SaveToStream(MS);
ShowMessage(Inttostr(Ms.Size));我的目的是用类似下边的sql语句来解决将图像存储到数据库中
但是没有成立
sqlstr:='insert int table1 (a_Field,b_Field,ImageField) '+
'values ' + ia_Filed+','+ib_Field+','+Ms.dataString+')';这样做是不是不合理,请指教
手段采用流的形式MS := TStringStream.Create('');
if OpenDialog1.Execute then
begin
Image1.Picture.LoadFromFile(OpenDialog1.FileName);end;
//Ms.Position :=0;
image1.Picture.Bitmap.SaveToStream(MS);
ShowMessage(Inttostr(Ms.Size));我的目的是用类似下边的sql语句来解决将图像存储到数据库中
但是没有成立
sqlstr:='insert int table1 (a_Field,b_Field,ImageField) '+
'values ' + ia_Filed+','+ib_Field+','+Ms.dataString+')';这样做是不是不合理,请指教
Tadocommond
我希望采用的做法是这样的
先单独写
sqlStr:=sqlstr:='insert int table1 (a_Field,b_Field,ImageField) '+
'values ' + ia_Filed+','+ib_Field+','+Ms.dataString+')';
然后写
adocommond.cmdtxt:=SqlStr
有疑问回头讨论..
事实上,ADOQUERY是在ADOCOMMAND基础上的再封装。。
var
p : pointer;
begin
v := VarArrayCreate ([0, Stream.Size - 1], varByte);
p := VarArrayLock (v);
Stream.Position := 0;
Stream.Read (p^, Stream.Size);
VarArrayUnlock (v);
end;procedure TForm1.BitBtn1Click(Sender: TObject);
var
fo:TMemoryStream;
cmd:TADOCommand; vo:Variant;begin fo:=TMemoryStream.Create;
Image1.Picture.Graphic.SaveToStream(fo);
fo.Position:=0;
StreamToVariant(fo,vo);
fo.free; cmd:=TADOCommand.Create(nil);
cmd.Connection:=ADOConnection1;
cmd.CommandText:='insert into tablexxx (pic) values(:pic)';
cmd.Parameters.ParamByName('pic').AppendChunk(vo);
cmd.Execute; cmd.Free;
end;