用access的ole字段存储图像具体要怎样操作啊,用loadfromFile都不行!:((20分)

  • 主题发起人 主题发起人 del520
  • 开始时间 开始时间
D

del520

Unregistered / Unconfirmed
GUEST, unregistred user!
用一个dbimage字段绑定到access的ole字段上去!然后用openPictureDialog调出一副
图版到dbimage中,然后保存,但是图片没有存储到对应的字段中去啊!

具体该怎样操作?
 
没人解? 用ACCESS使用OLE字段要怎样绑定才能存储图片呀。
 
兄弟,别慌
OLE Object Microsoft Access 表中链接或嵌入的对象
(例如 Microsoft Excel 电子表格、Microsoft Word 文档、图形、
声音或其他二进制数据)。
高为 1 G 字节(被可用磁盘空间限制)。

我再用程序试试
 
var
MS:TMemoryStream;
begin
MS:=TMemoryStream.Create;
Image1.Picture.Bitmap.SaveToStream(MS);
ADOTable1.Append;
TBlobField(ADOTable1.FieldByName('图片')).LoadFromStream(MS);
ADOTable1.Post;
end;
 
to lb_icesea79
先谢谢你。

但是我试了,没得反映
我是做一个显示员工档案的面板,上面有个DbImage,我想实现移动记录时就会在
DbImage中显示相应员工的相片,如果双击Dbimage就可以改变其图片!
我这样使用不行(这是我双击openPictureDialog事件想调入一副新图片的过程):
procedure TUserCard.DBImage1DblClick(Sender: TObject);
var
picName:string;
begin
OpenPictureDialog1.Execute;
Picname:=OpenPictureDialog1.FileName;
dbImage1.Picture.LoadFromFile(picName);
end;
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Db, ADODB, StdCtrls;

type
TForm1 = class(TForm)
ADOQuery1: TADOQuery;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
msMyWaveFile: TMemoryStream;
begin
msMyWaveFile := TMemoryStream.Create;
msMyWaveFile.LoadFromFile('c:/a.wav');
with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('insert into mytable (myole) values (:myparameter)');

// TBlobField(Parameters.ParamByName('myparameter')).LoadFromStream(msMyWaveFile);
Parameters.ParamByName('myparameter').Value := 1;
//ShowMessage(SQL.Text);
ExecSQL;
Close;
end;
msMyWaveFile.Free;
end;

// Parameters.ParamByName('mypara').Value := '11';
// ShowMessage(SQL.Text);

end.
我还没搞定。。。。。。。

先乱贴一点请指教
 
Help me


我Execute sql就出错。。。
 
.用内存流来实现
var
MS:TMemoryStream;
begin
MS:=TMemoryStream.Create;
Image1.Picture.Bitmap.SaveToStream(MS);
ADOTable1.Append;
TBlobField(ADOTable1.FieldByName('图片')).LoadFromStream(MS);
ADOTable1.Post;
end;
用上面的程序可以将图片存到字段里,我没有用它存到asscess,不过应该可以
 
Access有点不同好像???
我用oracle try try
 
TO yangxiao_jiang,
运行了,没反映!
好像没存进去啊!

怎样用dbimage读出来呢?
 
var
msMyFile: TMemoryStream;
MaxNo: string;
begin
msMyFile := TMemoryStream.Create;
msMyFile.LoadFromFile('c:/line.bmp');
MaxNo := IntToStr(LoginInf.GetTableNextNo('mytable'));
with LoginInf.MySQLPlus do
begin
Close;
SQL.Clear;
SQL.Add('insert into mytable (no) values ('
+ MaxNo + ')');
ExecSQL;
LoginInf.CommitData;
Close;
end;

with LoginInf.MySQLPlus do
begin
Close;
SQL.Clear;
SQL.Add('select mytable.rowid, mytable.myfields from mytable '
+ 'where no = ' + MaxNo);
ShowMessage(SQL.Text);
Open;
Edit;
TBlobField(Fields[0]).LoadFromStream(msMyFile);
LoginInf.CommitData;
Post;
LoginInf.RollBackData;
end;
msMyFile.Free;
end;
这是oracle的代码,完全可以的。。。
 
其中MySQLPlus是一个DataSet
Get..是取得最大值加一的函数。
 
使用内存流例子不行啊!
我用OpenPictureDialog和dbimage来实现图像存储!

procedure TUserCard.DBImage1DblClick(Sender: TObject);
var
ms:TmemoryStream;
picName:string;
begin
MS:=TMemoryStream.Create;
OpenPictureDialog1.Execute;
Picname:=OpenPictureDialog1.FileName;
dbImage1.Picture.LoadFromFile(picName);
dbimage1.Picture.Bitmap.SaveToStream(MS);
adoTable1.edit;
TBlobField(ADOTable1.FieldByName('相片')).LoadFromStream(MS);
end;
 
呵呵,我再给试试,我没大用过Access里头的ole的东西。
 
呵呵,好的,多谢了,我硬是没试出来,以前用MS SQL相当好有,本来就有个图像字段,
这个ACCESS真麻烦。
 
实在不行就把图形数据变成16进制字符串(Memo型也好)保存,
再写一个控件显示读取数据并图形.
 
其实还不行,完完了。。。。。
 
就是的了,这个问题可不得了!
 
如果是bmp图象,就下边三行就可以显示了。在access2000里实验成功。
DBImage1.Picture.LoadFromFile('d:/haha.bmp');
DBImage1.CopyToClipboard;
DBImage1.PasteFromClipboard;
在开始的时候,access数据中不能存任何图片(不能用录入的方式),如果有肯定会报bmpimage
图象无效的提示。
我建议图片还是不要放入数据库的好,慢倒不要说了,图象质量也难保证,建议数据中只存
图象路径和文件名。
其它类型的图象。我试试再说。
 
我现在试试....
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
781
import
I
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部