数据库是access 2000,数据库的名字:DB1;数据表的名称:T01;
字段名:
xh 文本 /*编号*/
xm 文本 /*姓名*/
zp OLE对象 /*照片*/unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Mask, ExtCtrls, DB, ADODB, ComCtrls, jpeg,DBTables,
DBCtrls;type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Edit2: TEdit;
Label3: TLabel;
Edit3: TEdit;
Label4: TLabel;
Edit4: TEdit;
Button1: TButton;
Label5: TLabel;
Edit5: TEdit;
Label6: TLabel;
Edit6: TEdit;
Button2: TButton;
Label7: TLabel;
Edit7: TEdit;
GroupBox1: TGroupBox;
Button3: TButton;
Button4: TButton;
Image1: TImage;
OpenDialog1: TOpenDialog;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
UpDown1: TUpDown;
Label8: TLabel;
Edit8: TEdit;
Image2: TImage;
RichEdit1: TRichEdit;
Button5: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations } end;var
Form1: TForm1;
FileDiskPath: string;
implementation
uses comfun;
{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
if edit1.Text <>'' then
begin
//showmessage(comfun.ChangeDateFormat(edit1.Text));
if (comfun.ChangeDateFormat(edit1.Text)<>'F') then
begin
edit2.Text :=comfun.ChangeDateFormat(edit1.Text);
end;
end; edit4.Text:=comfun.DateChangeStr(date());end;procedure TForm1.Button2Click(Sender: TObject);
begin
if (comfun.formatdata(edit5.text)<>'F') then
begin
edit6.text:=comfun.formatdata(edit5.text);
edit7.Text:=comfun.formatstring(edit6.text);
end;
end;procedure TForm1.Button3Click(Sender: TObject);
begin
if opendialog1.Execute then
begin
image1.Picture.LoadFromFile(opendialog1.FileName);
FileDiskPath:=opendialog1.FileName ;
end ;
end;//将.JPG图片存到数据库中
procedure TForm1.Button4Click(Sender: TObject);
var
buffer:TMemoryStream;
length: longint;
begin
//ADOConnection1.ConnectionString :=ADOConnection1.ConnectionString + ';sa=';
ADOConnection1.Connected :=true;
if ADOConnection1.Connected then
begin
buffer:=TMemoryStream.Create ;
image1.Picture.Graphic.SaveToStream (buffer);
ADOQuery1.SQL.Clear ;
ADOQuery1.SQL.Text :='insert into t01(xh,xm,zp) values (:xh,:xm,:image)';
ADOQuery1.Parameters.ParamByName('xh').Value :='C001';
ADOQuery1.Parameters.ParamByName('xm').Value :=edit8.text;
ADOQuery1.Parameters.ParamByName('image').LoadFromStream (buffer,ftblob);
ADOQuery1.ExecSQL;
ADOQuery1.Close;
buffer.Free ;
ADOQuery1.close;
showmessage('存盘成功!');
end
else
showmessage('数据库连接出错!,请重试');
ADOConnection1.Connected :=true;
end;//从数据库中读出图片数据,并显示在IMAGE中
procedure TForm1.Button5Click(Sender: TObject);
var
blobstream:TblobStream;
jpegmap:Tjpegimage;
begin
//读出数据
ADOConnection1.Connected :=true;
ADOQuery1.SQL.Clear ;
ADOQuery1.SQL.Text :='select zp from t01';
ADOQuery1.open;
if not ADOQuery1.FieldByName('zp').IsNull then
begin
JpegMap:=TJpegImage.Create;
blobstream:=TBlobStream.Create(TBlobField(ADOQuery1.FieldByName('zp')),bmRead);
try
JpegMap.LoadFromStream(blobstream);
Image2.Picture.BitMap.Assign(JpegMap);
finally
jpegmap.free;
blobstream.free;
end;
end
else image2.Picture:=nil;
end;end.出现的问题是:进行图片显示的时候,在运行时提示:"invalid class typecast",点击确定后停留在
blobstream:=TBlobStream.Create(TBlobField(ADOQuery1.FieldByName('zp')),bmRead);
这句。请问:是什么错误导致发生这个错误。怎么改正呢。
还有两个问题:
1。使用流把图片存进数据库,怎么样做才能成功?前提是使用ADOQUERY,而不是用表(TTABLE)。
2。使用流能否把一个IMAGE中的图片读到另一个IMAGE中?请给出源码。
请各位高手指点。
字段名:
xh 文本 /*编号*/
xm 文本 /*姓名*/
zp OLE对象 /*照片*/unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Mask, ExtCtrls, DB, ADODB, ComCtrls, jpeg,DBTables,
DBCtrls;type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Edit2: TEdit;
Label3: TLabel;
Edit3: TEdit;
Label4: TLabel;
Edit4: TEdit;
Button1: TButton;
Label5: TLabel;
Edit5: TEdit;
Label6: TLabel;
Edit6: TEdit;
Button2: TButton;
Label7: TLabel;
Edit7: TEdit;
GroupBox1: TGroupBox;
Button3: TButton;
Button4: TButton;
Image1: TImage;
OpenDialog1: TOpenDialog;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
UpDown1: TUpDown;
Label8: TLabel;
Edit8: TEdit;
Image2: TImage;
RichEdit1: TRichEdit;
Button5: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations } end;var
Form1: TForm1;
FileDiskPath: string;
implementation
uses comfun;
{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
if edit1.Text <>'' then
begin
//showmessage(comfun.ChangeDateFormat(edit1.Text));
if (comfun.ChangeDateFormat(edit1.Text)<>'F') then
begin
edit2.Text :=comfun.ChangeDateFormat(edit1.Text);
end;
end; edit4.Text:=comfun.DateChangeStr(date());end;procedure TForm1.Button2Click(Sender: TObject);
begin
if (comfun.formatdata(edit5.text)<>'F') then
begin
edit6.text:=comfun.formatdata(edit5.text);
edit7.Text:=comfun.formatstring(edit6.text);
end;
end;procedure TForm1.Button3Click(Sender: TObject);
begin
if opendialog1.Execute then
begin
image1.Picture.LoadFromFile(opendialog1.FileName);
FileDiskPath:=opendialog1.FileName ;
end ;
end;//将.JPG图片存到数据库中
procedure TForm1.Button4Click(Sender: TObject);
var
buffer:TMemoryStream;
length: longint;
begin
//ADOConnection1.ConnectionString :=ADOConnection1.ConnectionString + ';sa=';
ADOConnection1.Connected :=true;
if ADOConnection1.Connected then
begin
buffer:=TMemoryStream.Create ;
image1.Picture.Graphic.SaveToStream (buffer);
ADOQuery1.SQL.Clear ;
ADOQuery1.SQL.Text :='insert into t01(xh,xm,zp) values (:xh,:xm,:image)';
ADOQuery1.Parameters.ParamByName('xh').Value :='C001';
ADOQuery1.Parameters.ParamByName('xm').Value :=edit8.text;
ADOQuery1.Parameters.ParamByName('image').LoadFromStream (buffer,ftblob);
ADOQuery1.ExecSQL;
ADOQuery1.Close;
buffer.Free ;
ADOQuery1.close;
showmessage('存盘成功!');
end
else
showmessage('数据库连接出错!,请重试');
ADOConnection1.Connected :=true;
end;//从数据库中读出图片数据,并显示在IMAGE中
procedure TForm1.Button5Click(Sender: TObject);
var
blobstream:TblobStream;
jpegmap:Tjpegimage;
begin
//读出数据
ADOConnection1.Connected :=true;
ADOQuery1.SQL.Clear ;
ADOQuery1.SQL.Text :='select zp from t01';
ADOQuery1.open;
if not ADOQuery1.FieldByName('zp').IsNull then
begin
JpegMap:=TJpegImage.Create;
blobstream:=TBlobStream.Create(TBlobField(ADOQuery1.FieldByName('zp')),bmRead);
try
JpegMap.LoadFromStream(blobstream);
Image2.Picture.BitMap.Assign(JpegMap);
finally
jpegmap.free;
blobstream.free;
end;
end
else image2.Picture:=nil;
end;end.出现的问题是:进行图片显示的时候,在运行时提示:"invalid class typecast",点击确定后停留在
blobstream:=TBlobStream.Create(TBlobField(ADOQuery1.FieldByName('zp')),bmRead);
这句。请问:是什么错误导致发生这个错误。怎么改正呢。
还有两个问题:
1。使用流把图片存进数据库,怎么样做才能成功?前提是使用ADOQUERY,而不是用表(TTABLE)。
2。使用流能否把一个IMAGE中的图片读到另一个IMAGE中?请给出源码。
请各位高手指点。
我知道哪里错了!驱动程序的问题;一定要用ORACLE的驱动,不能用微软给ORACLE开发的驱动,用ODBC也不好!—————————————————————————————————
┏━★━━◆━━★━┓
♂欢|◢CSDN◣|使♂ ▲自由保存帖子,浏览,关注检测
┃迎|◥论坛助手◤|用┃ ▲完善的CSDN客户端工具
┗━☆━━◇━━━☆┛ ▲自动添加签名......让你更快,更爽,更方便地上CSDN...
http://www.csdn.net/expert/topic/573/573604.xml
http://www.chinaok.net/csdn/csdn.zip
看看哪里类型不匹配,或是表中的字段是否是"Blob"或"OLE 对象"类型
var
ImageField:TField;
Picture:TPicture;
begin
if OpenPicDlg.Execute then
Begin
with DataSource.DataSet do
try
Query.Edit;
ImageField := FindField('Pic');
if ImageField <> nil then
begin
Picture := TPicture.Create;
try
Query.Edit;
Picture.LoadFromFile(OpenPicDlg.FileName);
if Picture.Graphic is TBitmap then
ImageField.Assign(Picture)
else
SaveGraphicToBlobField(Picture.Graphic, ImageField);
finally
Picture.Free;
end;
end;
except
end;
End;
end;procedure SaveGraphicToBlobField(AGraphic: TGraphic; AField: TField);
var
BlobStream: TStream;
begin
if AField is TBlobField then
with AField as TBlobField do
begin
{$IFNDEF DELPHI3}
BlobStream := TBlobStream.Create(AField as TBlobField, bmWrite);
{$ELSE}
BlobStream := DataSet.CreateBlobStream(AField, bmWrite);
{$ENDIF}
try
AGraphic.SaveToStream(BlobStream);
finally
BlobStream.Free;
end;
end;
end;
imagestream:=tfilestream.create('d:\test.bmp',fmShareDenyNone);
Sqlclause:='insert into table values(:aa)';
tempquery.SQL.Clear;
tempquery.SQL.Add(SqlClause);
Tempquery.Parameters.ParamByName('aa').LoadFromStream(imagestream,ftblob);
tempquery.ExecSQL;取出
SqlClause:='select * from table';
tempquery:=tadoquery.Create(application);
try
tempquery.SQL.Clear;
tempquery.SQL.Add(SqlClause);
tempquery.open;
while not tempquery.Eof do
begin filename:='d:\test1.bmp'
(tempquery.fieldbyname('image') as TBlobField).savetofile(filename);
imagestream:=TFileStream.Create(filename,fmShareDenyNone);
tempquery.Next;
end;
finally
tempquery.Free;
end;
end;
图片字段是ole型
我用的delphi5,ado2.5,win98,没问题