mysql的图片储存?(200分)

  • 主题发起人 主题发起人 SugarXP2
  • 开始时间 开始时间
S

SugarXP2

Unregistered / Unconfirmed
GUEST, unregistred user!
[?]如何在mysql上储存图片呢,最好不要用控件。
 
使用LongBlob类型来存储图片
with query1 do begin
close; sql.clear;
sql.add('insert into table1(id,pic) values(:,:)');
params[0].asinteger:=1;
params[1].loadfromfile('c:/1.jpg',ftblob);
try execsql except end;
end;
或者使用Table也是可以的。
with table1 do begin
append;
fields[0].asinteger:=1;
tblobfield(fields[1]).loadfromfile('c:/1.jpg');
try post except cancel end;
end;
注意,要正确存取图片,该表必须有primary key,否则,图片无法完整取出
 
如果要存图片最好对MY-SQL进行相应的设置,否则默认设置下村进去的图片回大不开!
 
历害,但又如何能完整的读出呢?
 
只要有primary key 就可以完整读出
这样读,
tblobfield(table1.fields[1]).savetofile('c:/2.jpg'); //或者savetostream。。。
这样就取出来了
 
to:twos
我想再问清楚点,在我还要同时insert好多字段。请问Params是否是指在sql中的位置?
怎么老话我不匹配。
 

insert into table1(field1,field2,field3) values(:,:,:)
| | |
params[0] | |
params[1] |
params[2]
 
最好用流的方式
或者存路径
 
用Query这样读不行呀?
query1.fieldbyname('photo').savetostream
 
用TStream吧,要么用存路径比较好。
to SugarXP2:
TBlobField(query1.fieldbyname('photo')).SaveToStream();
 
O!如果我要把读出的TStream变为JPG或BMP,放于image上,怎么做?
另:如何判断TStream为空呢?
 
给你个例子
 
SugarXP2:信箱呢?
 
mmxsugar@21cn.com
 
发送成功,请您查收。
 
Thank to zqs:
但你的例子不太好看,还是在这里讲讲吧:
1.图片是否成功存取,因为看数据库看不到有无。
2.把图片用Tstream读出,最好是jpg格式,由image显示。
3.请问大家有无好的Gif控件?
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=753401
我在上面已经回答了。存大字段数据时最好把文件扩展名存进去
得到文件扩展名的函数
ExtractFileExt(FileName :string):string;
 
你可以做一个简单的例程,先用流的方式存到数据库中,然后再读出来,再用Image控件显示,
不就可以知道是不是成功了吗?
 
下面这段程序将图像存到数据库中,表ImageTab有两个字段,MainId存放图像的id,字符型
Image字段存放图像,LongBlob,这段代码是c++builder 5,MainId从Edit1获得
String sMainId = Trim(Edit1->Text);
TMemoryStream *Files;
Files = new TMemoryStream;
Files->LoadFromFile("d://test.jpg");
Query1->Close();
Query1->SQL->Clear();
Query1->SQL->Add("insert into ImageTab(MainId,Image) values(:mainid,:image)");
Query1->Prepare();
Query1->Params->Items[0]->AsString = sMainId;
Query1->Params->Items[1]->LoadFromStream(Files,ftBlob);
Query1->ExecSQL();
Query1->Close();
Query1->Unprepare();
 
主要是第二个问题
 
后退
顶部