Query.SQL.Clear; Query.Sql.Add('INSERT INTO 表名 (...,Blob字段名,...) VALUES (...,:Blob,...)'); Query.ParamByName(Blob)).LoadFromStream(Stream); //还可以用方法LoadFromFile()直接保存文件中的数据 Query.SQL.ExecSQL;
从字段读出代码如下:
Query.Close; Query.SQL.Clear; Query.SQL.Add('SELECT ...,Blob字段名,... FROM 表名 WHERE ...'); Query.Open; TBlobField(Query.SQL.FieldByName(Blob字段名)).SaveToStream(Stream); //或(Query.ParamByName(Blob字段名) as TBlobFiedl).SaveToStream(Stream); //或Stream=TBlobFieldStream.Create(TBlobField(Query.SQL.FieldByName(Blob字段名)),bmRead); //保存到文件用SaveToFile(文件名)
procedure TForm1.Button1Click(Sender: TObject); begin //窗题上放一个adoquery1, with adoquery1 do begin close; sql.Clear; sql.Add('insert into 表名(字段名) values(:exe)'); parameters.Items[0].LoadFromFile('e:\delphi程序\test.exe',ftBlob); execsql; close; end;end;
上面的是导入 procedure TForm1.Button2Click(Sender: TObject);//导出 begin with ADOquery1 do begin close; sql.Clear; sql.Add('select * from 表名); open; (fieldByName('字段名') AS TBlobField).SaveToFile('e:\delphi程序\auto_test.exe'); end;end;
TBlobField(adotable.fieldbyaname('afd')).savetofile('file path'); //open ok
ContentStream: TMemoryStream;ContentStream:= TMemoryStream.Create; ContentStream.LoadFromFile('YourFileName.exe');//Insert,(未加异常处理) strSQL:= 'insert into 表名(字段名) values(:Content)'; if ADOQuery.Active then ADOQuery.Close; ADOQuery.SQL.Clear; ADOQuery.SQL.Add(strSQL); ADOQuery.Parameters.ParamByName('Content').LoadFromStream(ContentStream, ftBlob); ADOQuery.ExecSQL; ContentStream.free;//Load (ADOQuery.Fields.FieldByName('Content') as TBlobField).SaveToStream(TempStream); TempStream.Position:= 0; TempStream.SaveToFile('YourFileName.exe');
以sqlserver为例,其中“字段1”为image类型(存放文件),“字段2”为char类型(存放文件名)。单元引用加上shellapi。 存入数据库: if not OpenDialog1.Execute then exit; table1.insert; (table1.FieldByName('字段1') as TBlobField).LoadFromFile(OpenDialog1.filename); table1.FieldByName('字段2').value:=OpenDialog1.filename; table1.post; 打开文件: (table1.FieldByName('字段1') as TBlobField).savetoFile(table1.FieldByName('字段2').value); shellexecute(handle,nil,pchar(table1.FieldByName('字段2').value),nil,nil,sw_shownormal);如果是tquery需要配合tupdatesql使用,方法相同。
对Blob字段进行读写?
Blob的读写一般通过流,也可以直接从文件读出数据和保存数据到文件。
写入Blob的代码如下:
Query.SQL.Clear;
Query.Sql.Add('INSERT INTO 表名 (...,Blob字段名,...) VALUES (...,:Blob,...)');
Query.ParamByName(Blob)).LoadFromStream(Stream);
//还可以用方法LoadFromFile()直接保存文件中的数据
Query.SQL.ExecSQL;
从字段读出代码如下:
Query.Close;
Query.SQL.Clear;
Query.SQL.Add('SELECT ...,Blob字段名,... FROM 表名 WHERE ...');
Query.Open;
TBlobField(Query.SQL.FieldByName(Blob字段名)).SaveToStream(Stream);
//或(Query.ParamByName(Blob字段名) as TBlobFiedl).SaveToStream(Stream);
//或Stream=TBlobFieldStream.Create(TBlobField(Query.SQL.FieldByName(Blob字段名)),bmRead);
//保存到文件用SaveToFile(文件名)
begin
//窗题上放一个adoquery1,
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('insert into 表名(字段名) values(:exe)');
parameters.Items[0].LoadFromFile('e:\delphi程序\test.exe',ftBlob);
execsql;
close;
end;end;
procedure TForm1.Button2Click(Sender: TObject);//导出
begin
with ADOquery1 do
begin
close;
sql.Clear;
sql.Add('select * from 表名);
open;
(fieldByName('字段名') AS TBlobField).SaveToFile('e:\delphi程序\auto_test.exe');
end;end;
//open
ok
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('insert into Pic values(.....,:Pic,...)');
.................
ADOQuery1.Parameters.ParamByName('Pic').Assign(Image1.Picture.Bitmap);
.................
ADOQuery1.ExecSQL;
導出
Image1.Picture.Bitmap.Assign(TBLOBField(ADOQuery1.Parameters.ParamByName('Pic'))) 類似操作
ContentStream.LoadFromFile('YourFileName.exe');//Insert,(未加异常处理)
strSQL:= 'insert into 表名(字段名) values(:Content)';
if ADOQuery.Active then ADOQuery.Close;
ADOQuery.SQL.Clear;
ADOQuery.SQL.Add(strSQL);
ADOQuery.Parameters.ParamByName('Content').LoadFromStream(ContentStream, ftBlob);
ADOQuery.ExecSQL;
ContentStream.free;//Load
(ADOQuery.Fields.FieldByName('Content') as TBlobField).SaveToStream(TempStream);
TempStream.Position:= 0;
TempStream.SaveToFile('YourFileName.exe');
存入数据库:
if not OpenDialog1.Execute then exit;
table1.insert;
(table1.FieldByName('字段1') as TBlobField).LoadFromFile(OpenDialog1.filename);
table1.FieldByName('字段2').value:=OpenDialog1.filename;
table1.post;
打开文件:
(table1.FieldByName('字段1') as TBlobField).savetoFile(table1.FieldByName('字段2').value);
shellexecute(handle,nil,pchar(table1.FieldByName('字段2').value),nil,nil,sw_shownormal);如果是tquery需要配合tupdatesql使用,方法相同。