积极的问!如何使用纯sql语句将图片导入数据库中?(100分)

  • 主题发起人 netexplorer
  • 开始时间
N

netexplorer

Unregistered / Unconfirmed
GUEST, unregistred user!
这个问题好像很土了,不过问了好些人都不知道如何解决。
数据库中有个表,其中包含一个图片字段image,
如果要插入记录,一般的方式都是打开一个table
然后
table1.append;
...
tbolbfield(table1.fieldbyname('afield')).loadfromstream(astream);
table1.post;
如果表中数据太多就有问题了,open一下实在太慢。
请问各位大大,有没有直接用sql语句就可以插入图片的方法,
比如使用一个query而不用table
以前有高人指点说设置query的参数就可以了
可惜贪玩没记住。
 
嘻嘻, 我连参数都不用。 直接动态生成sql执行插入。
 
我也想听听Pearl的高见:)
 
pearl大虾,别卖关子了,赶紧公布answer吧,全额分数赠送。
 
直接用SQL语句?哎!
 
直接用sql?怎么用?有例子吗?
另外,为了增加速度,通常设计时把图片单独放在一个表中
 

数据库SQL Server,存放文件的字段类型Image
Create Table MyTable
(
FileName VarChar(20),
FileSource Image
)
存放文件到数据库

var FileName :String;
FileName := ExtractFileName(OpenDialog1.FileName);
with Query dobegin
Close;
Sql.Clear
; Sql.Add('INSERT INTO MyTable VALUES :)FileName,:FileSource)');
ParamByName('FileName').AsString := FileName;
ParamByName('FileSource').LoadFromFile(OpenDialog1.FileName,ftBolob);
ExecSQL;
end;



从数据库中取出文件

var FileName :String;begin
with Query do begin
Close;
Sql.Clear;
Sql.Add('SELECT * FROM MyTable WHERE FileName = '?'');
Open; FileName := 'c:/'+FieldByName('FileName').AsString;
(FieldByName('FileSource') AS TBlobField).SaveToFile(FileName);
end;
end;
 
我的方法其实很简单, 就是将图片转成字符串然后用sql插入表中。不过我只试过sql server7.0,图片大小不超过300K
function ImgToStr(Img: TGraphic): string;
var
stm: TStringStream;
i: Integer;
begin
stm := TStringStream.Create('');
Img.SaveToStream(Stm);
result := '0x';
for i := 1 to stm.Size do
result := result + inttohex(byte(stm.datastring), 2);
end;

然后就简单了:
with adocommand1 do
begin
commandtext := 'insert into tablename (id, imgfld) values (1, '+imgtostr(Image1.picture.Graphic)+')';
execute;
end;
 
那如果超过300k呢,不要告诉我把图片进行切割吧
 
真的要试试先
 
顶部