如何将一个BMP图标存入数据库,要求使用TQUERY空间,即写SQL语句,谢谢。(100分)

  • 主题发起人 主题发起人 jinfenglin
  • 开始时间 开始时间
J

jinfenglin

Unregistered / Unconfirmed
GUEST, unregistred user!
如何将一个BMP图标存入数据库,要求使用TQUERY空间,即写SQL语句,谢谢。
 
参考一下下面代码。
function DBToDisk(Query_String, Column_Name, Target_Name: string): Boolean;
function DiskToDB(Query_String, Column_Name,Target_Name: string): Boolean;


function TForm1.DBToDisk(Query_String, Column_Name, Target_Name: string): Boolean;
var
l_FileStream: TFileStream;
begin
{从数据库中取出文稿}
with Query1 do
begin
Close;
SQL.Text := Query_String;
Open;
end;

{将数据库中Image字段保存到硬盘下,存为文件}
l_FileStream := TFileStream.Create(Target_Name, fmOpenWrite or fmCreate);
l_FileStream.Position := 0;
TBlobField(Query1.FieldByName(Column_Name)).SaveToStream(l_FileStream);
l_FileStream.Free;

Query1.Close;
Result := True; //所有任务彻底完成,Function返回True
end;

function TForm1.DiskToDB(Query_String, Column_Name,Target_Name: string): Boolean;
var
l_FileStream: TFileStream;
begin
with Query1 do
begin
Close;
SQL.Clear;
SQL.Text := Query_String;
Open;
end;
Query1.Edit; {直接进入Edit,取消Append}

l_FileStream := TFileStream.Create(Target_Name, fmShareDenyNone);
l_FileStream.Position := 0;

TBlobField(Query1.FieldByName(Column_Name)).loadfromStream(l_FileStream);
Query1.Post;
l_FileStream.Free;

Result := True; //一切任务完成,返回True
end;
 
BMP图标是文件还是TBitmap对象?
 
回Pipi,BMP图标是文件还是TBitmap对象在我这里都可以,请你帮忙。
 
BS : TStream;
J : TJPEGImage;

ADOQuery1.Edit;
BS := ADOQuery1.CreateBlobStream(ADOQuery1.FieldByName('照片'),bmWrite);
J := TJPEGImage.Create;
try
J.LoadFromFile(DLLPath + '/Pic.tmp');
J.SaveToStream(BS);
finally
J.Free;
BS.Free;
end;
ADOQuery1.Post;

//把 J 黄成 B tBITMAP 即可
 
非常谢谢Pipi,yzhshi,阳光游子,由于问题没有说清楚,我想再将问题说一下:如何将一个BMP图标与其它字段作为一条记录存入数据库的一个表中,要求使用TQUERY控件,即写SQL语句,谢谢。
 
你的图标是文件,那么我的那个DiskToDB就可以了。
在Query1.Edit; 后面加上其他字段赋值不就可以了吗?
 
假设 列1,列2,列3 是其他列, blob_field是保存图片的列:
下面是保存文件:
query1.SQL.Text:='insert into 表(列1,列2,列3,blob_field) values (:f1,:f2,:f3,:blob_field)';
query1.ParamByName('f1')............
query1.ParamByName('f2')............
query1.ParamByName('f3')............
query1.ParamByName('blob_field').LoadFromFile('文件名',ftBlob);
query1.execSQL();
-----------------------------
如果是保存 TBitmap,改一点东西:
var
ms:TMemoryStream;
ms:=TMemoryStream.Create;
...........
Bitmap.SaveToStream(ms);
ms.position:=0;
query1.ParamByName('blob_field').LoadFromStream(ms,ftBlob);
ms.Free;
 
这种问题以前都有许多答案了,你可以查一下呀?
 
谢谢大家的帮助。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部