我查询了一些关于这个问题的贴子,但是还是没有弄明白,我的问题是这样的:
我使用SQLSERVER2000数据库,做的程序中包括职员信息管理,其中想将人物照片加上,所以就用了DBIMAGE控件,字段设为IMAGE类型,我在DBIMAGE控件下面加了两个按钮,一个是添加照片一个是删除照片,添加照片的代码如下:
procedure TForm8.BitBtn1Click(Sender: TObject);
var
f: file of Byte;
size: Longint;
begin
if OPDiag1.Execute then
begin
AssignFile(f, OpDiag1.FileName);
Reset(f);
size := FileSize(f);
if size<40960 then
begin
CloseFile(f);
DBImage1.Picture.LoadFromFile(OpDiag1.FileName);
end else showmessage('选择的这个图像太大了,请先进行处理(<40K)。');
end;
end;
我在USER中引用了JPEG单元,
使用上面这段程序我将一个JPEG图像加入到了DBIMAGE控件中,我是加入之前是先点击修改,也就是让QUERY控件进入EDIT状态,加入照片后再点击保存,就是POST过程,但是一点保存,DBIMAGE中的图像就不见, 浏览记录也不再出现,也不知道是否保存进去了.
请各位给详细地说说如何做才能实现我要的这项功能,最好给出源代码,多谢,呵呵,我是不是很懒!!!
我使用SQLSERVER2000数据库,做的程序中包括职员信息管理,其中想将人物照片加上,所以就用了DBIMAGE控件,字段设为IMAGE类型,我在DBIMAGE控件下面加了两个按钮,一个是添加照片一个是删除照片,添加照片的代码如下:
procedure TForm8.BitBtn1Click(Sender: TObject);
var
f: file of Byte;
size: Longint;
begin
if OPDiag1.Execute then
begin
AssignFile(f, OpDiag1.FileName);
Reset(f);
size := FileSize(f);
if size<40960 then
begin
CloseFile(f);
DBImage1.Picture.LoadFromFile(OpDiag1.FileName);
end else showmessage('选择的这个图像太大了,请先进行处理(<40K)。');
end;
end;
我在USER中引用了JPEG单元,
使用上面这段程序我将一个JPEG图像加入到了DBIMAGE控件中,我是加入之前是先点击修改,也就是让QUERY控件进入EDIT状态,加入照片后再点击保存,就是POST过程,但是一点保存,DBIMAGE中的图像就不见, 浏览记录也不再出现,也不知道是否保存进去了.
请各位给详细地说说如何做才能实现我要的这项功能,最好给出源代码,多谢,呵呵,我是不是很懒!!!
解决方案 »
- 如何实现两个进程(两个EXE文件)的通讯(用消息,不用内存共享)?
- DBGrid某一个Column不指定FieldName,想变成自定义字段怎么做?
- pos微打,出现“&”字符,如何去掉
- [求助]小弟愚昧,不知道这个错误是怎么回事?
- 对于高手,这是一个简单的问题。可是对我,却能让我失去学习的信心!
- 怎样使Treeview中的item能够调用窗口?
- dbgrid内如何使用带滚动轮的鼠标的滚轮来使dbgrid窗口上下滚动?
- 如何在改变窗体大小的时候保持控件比例不变?
- 请教有关打开报表文件(*.QRP)的问题
- 如何在字段编辑完后不自动存盘?只有点击了保存按钮才存盘?
- Borland是否还会推出Delphi的下一个版本呐?
- idftpserver控件如何得知客戶端上傳一個檔案已經上傳完成
保存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('img')).LoadFromStream(Ms);
ADOquery1.Post;
Ms.Free ;
jpg.free;
end;
从数据库中读取图象到image2中:
Var
Ms:TStringStream;
jpg:Tjpegimage;
begin
Ms:=TstringStream.Create('');
TBlobField(ADOquery1.FieldByName('img')).SaveToStream(Ms);
Ms.Position :=0;
Jpg.LoadFromStream(Ms);
Image2.Picture.Assign(Jpg);
Ms.Free;
jpg.free;
end;///也许楼主需要,看吧!..
改变一下尝试一下
var
f: file of Byte;
size: Longint;
begin
if OPDiag1.Execute then
begin
AssignFile(f, OpDiag1.FileName);
Reset(f);
size := FileSize(f);
if size<40960 then
begin
CloseFile(f);
DBImage1.DataSource.DataSet.Edit; //----1
DBImage1.Picture.LoadFromFile(OpDiag1.FileName);
DBImage1.DataSource.DataSet.Post; //-----2
end else showmessage('选择的这个图像太大了,请先进行处理(<40K)。');
end;
end;
table1.edit;
DBImage1.Picture.Loadfromfile('d:\temp\01.bmp');
table1.post;
在DBImage1.Picture.LoadFromFile(OpDiag1.FileName);之后
再使用
dbimage1.CopyToClipborad;
dbimage1.PasteFromClipboard
试试!!!
///////////////////////////////////////////////////////////////////////
to 楼主:
在DBImage1.Picture.LoadFromFile(OpDiag1.FileName);之后
再使用
dbimage1.CopyToClipborad;
dbimage1.PasteFromClipboard
试试!!!
///////////////////////////////////////////////////////////////////////
原因不知道是为什么,如果能再讲讲为什么这样做就好使,就更好了.感谢各位!