Delphi求将image中的图片保存到数据库中代码
1、求代码:怎么把image控件中显示的图片,以年月日分秒(yyyymmddhhnnss)的文件名存入到ado链接的图片数据库文件(pic.dmf)中,主要链接图片数据库...
1、求代码:怎么把image控件中显示的图片,以年月日分秒(yyyymmddhhnnss)的文件名存入到ado链接的图片数据库文件(pic.dmf)中,主要链接图片数据库用到的是AdoConnection、ADOQuery、DataSource控件。
2、不要乱回答。只要代码,其他的不罗嗦,谢谢!
uses jpeg;
保存Image1中的图象至数据库 :
var
Ms:TmemoryStream;
jpg:Tjpegimage;
begin
ms:=TmemoryStream.Create;
Jpg.Assign(Image1.Picture.Graphic);
Jpg.SaveToStream(Ms) ;
Ms.Position :=0;
ADOquery1.append;
TBlobField(ADOquery1.FieldByName('filename')).LoadFromStream(Ms);
ADOquery1.Post;
Ms.Free ;
jpg.free;
end;
类似于上面的代码 ,不需要搞的很复杂,image控件在Form2里,数据库ado在Form1里。 还有将image中的图像压缩小。最好在几十kb左右进入数据库 展开
2、不要乱回答。只要代码,其他的不罗嗦,谢谢!
uses jpeg;
保存Image1中的图象至数据库 :
var
Ms:TmemoryStream;
jpg:Tjpegimage;
begin
ms:=TmemoryStream.Create;
Jpg.Assign(Image1.Picture.Graphic);
Jpg.SaveToStream(Ms) ;
Ms.Position :=0;
ADOquery1.append;
TBlobField(ADOquery1.FieldByName('filename')).LoadFromStream(Ms);
ADOquery1.Post;
Ms.Free ;
jpg.free;
end;
类似于上面的代码 ,不需要搞的很复杂,image控件在Form2里,数据库ado在Form1里。 还有将image中的图像压缩小。最好在几十kb左右进入数据库 展开
2个回答
展开全部
procedure TSqlHelp.WritePic(AResenderMark,AItem:string;AItemValue:TStream);
begin
if (AResenderMark='') or (AItem='') then exit;
try
if not m_Connection.Connected then m_Connection.Connected:=True;
m_Connection.BeginTrans;
//showmessage(m_Connection.ConnectionString);
with m_QryWork do
begin
Close;
Sql.Clear;
Sql.Add('select * from zxx_sqlhelperData where ResenderMark=:ResenderMark and Item=:Item');
Parameters.ParamByName('ResenderMark').Value:=AResenderMark;
Parameters.ParamByName('Item').Value:=AItem;
Open;
if RecordCount=0 then
begin
append;
FieldByname('ResenderMark').AsString:=AResenderMark;
FieldByName('Item').AsString:=AItem;
TBlobField(FieldByName('ValuePic')).LoadFromStream(AItemValue);
Post;
end
else
begin
Edit;
TBlobField(FieldByName('ValuePic')).Clear;
Post;
Edit;
TBlobField(FieldByName('ValuePic')).LoadFromStream(AItemValue);
Post;
end
end;
m_Connection.CommitTrans;
except
on e:Exception do
begin
m_Connection.RollbackTrans;
//如果发现是线程问题比如到了最大连接数则可递归保存
//if pos('',e.Message)>0 then
//begin
// sleep(300);
// WriteData(AResenderMark,AItem,AItemValue);
// exit;
//end;
messagebox(Application.MainForm.Handle,pchar(e.Message),PAnsiChar(AResenderMark+'提示信息'),MB_OK or MB_ICONWARNING);
end;
end;
end;
begin
if (AResenderMark='') or (AItem='') then exit;
try
if not m_Connection.Connected then m_Connection.Connected:=True;
m_Connection.BeginTrans;
//showmessage(m_Connection.ConnectionString);
with m_QryWork do
begin
Close;
Sql.Clear;
Sql.Add('select * from zxx_sqlhelperData where ResenderMark=:ResenderMark and Item=:Item');
Parameters.ParamByName('ResenderMark').Value:=AResenderMark;
Parameters.ParamByName('Item').Value:=AItem;
Open;
if RecordCount=0 then
begin
append;
FieldByname('ResenderMark').AsString:=AResenderMark;
FieldByName('Item').AsString:=AItem;
TBlobField(FieldByName('ValuePic')).LoadFromStream(AItemValue);
Post;
end
else
begin
Edit;
TBlobField(FieldByName('ValuePic')).Clear;
Post;
Edit;
TBlobField(FieldByName('ValuePic')).LoadFromStream(AItemValue);
Post;
end
end;
m_Connection.CommitTrans;
except
on e:Exception do
begin
m_Connection.RollbackTrans;
//如果发现是线程问题比如到了最大连接数则可递归保存
//if pos('',e.Message)>0 then
//begin
// sleep(300);
// WriteData(AResenderMark,AItem,AItemValue);
// exit;
//end;
messagebox(Application.MainForm.Handle,pchar(e.Message),PAnsiChar(AResenderMark+'提示信息'),MB_OK or MB_ICONWARNING);
end;
end;
end;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询