大家好,我是新手..
我想學習數據庫的應用.
我在ACCESS的OLE對象中加入了圖片,想通過Image控件顯示圖片..
而且圖片要跟隨記錄指針更換. 請教如何實現.? 最好能寫詳細代碼說明.
在此先謝過了..
我想學習數據庫的應用.
我在ACCESS的OLE對象中加入了圖片,想通過Image控件顯示圖片..
而且圖片要跟隨記錄指針更換. 請教如何實現.? 最好能寫詳細代碼說明.
在此先謝過了..
解决方案 »
- 邮件发送
- 寻找Delphi表格组件,请高手推荐!!!!
- C/S Soekct编程问题。S端提示C已经断开,为什么C端还是连接状态?
- DELPHI向ORACLE数据库大量插入照片出现的问题?在线等待!!!
- 请问:当一个窗体被打开后,如何知道打开它的那个窗体的NAME(不通过变量的方式)?
- 第4题):关于网址测试问题?
- 在DELPHI中连接interbase用ADO,什么OLEDB比较好?
- 水晶报表、的问题,向高手请教,想学习水晶报表的也一起进来吧!在线等待
- 用DBExpress连接SQL SERVER时,SQLConnection连接成功,但commandtext却没有table和field列表?
- 有关parameters赋值的问题,很紧急,请帮忙,谢谢!
- 那位大侠帮忙解决下坐标与像素的换算啊
- 关于线程出错的问题.....
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls, Grids, DBGrids, DB, ADODB, ExtDlgs,
jpeg,DAODatabase, GridsEh, DBGridEh,math;type
TForm1 = class(TForm)
Image1: TImage;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
DataSource1: TDataSource;
BitBtn4: TBitBtn;
BitBtn5: TBitBtn;
OpenPictureDialog1: TOpenPictureDialog;
Button1: TButton;
DBGridEh1: TDBGridEh;
BitBtn1: TBitBtn;
procedure FormCreate(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
procedure BitBtn5Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure ADOQuery1AfterScroll(DataSet: TDataSet);
procedure Button1Click(Sender: TObject);
procedure DBGridEh1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumnEh; State: TGridDrawState);
procedure BitBtn1Click(Sender: TObject); private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementationuses Dao97,Dao2000,comobj;
{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
form1.caption:=extractfilepath(paramstr(0))+'mydata.mdb';
if __DBEngine36 = nil then CreateEngine (Dao36, '');
adoconnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Password="";Data Source='+ExtractFilePath(Paramstr(0))+'Mydata.mdb;Persist Security Info=True';
adoconnection1.Connected:=true;
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Text:='select * from test';
adoquery1.Open;end;procedure TForm1.BitBtn4Click(Sender: TObject);
begin
adoquery1.Append;
adoquery1.FieldByName('图片名称').AsString:=' ';
adoquery1.Post;end;procedure TForm1.BitBtn5Click(Sender: TObject);
begin
adoquery1.Delete;
end;procedure TForm1.BitBtn2Click(Sender: TObject);
var ext:string;
begin
OpenPictureDialog1.FilterIndex:=1;
openpicturedialog1.FileName :='.jpg';
If OpenPictureDialog1.Execute Then
begin
image1.Picture.LoadFromFile(openpicturedialog1.FileName );
if image1.picture.Graphic <> nil then //避免image1中无图像保存出错
begin
adoquery1.Edit;
adoquery1.FieldByName('图片').Assign(image1.Picture.Graphic);
//以下记录保存到数据库的图像格式
ext:=extractfileext(openpicturedialog1.FileName );
if uppercase(ext) = '.BMP' THEN
adoquery1.FieldByName('格式').VALUE :='bmp'
ELSE
IF (UPPERCASE(EXT) = '.JPEG') OR (UPPERCASE(EXT) = '.JPG') THEN
adoquery1.FieldByName('格式').VALUE := 'jpg';
adoquery1.Post;
end;end;
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
if application.MessageBox('真的要删除图片吗?','删除确认',1+64)=1 then
begin
adoquery1.Edit;
adoquery1.FieldByName('图片').clear;
adoquery1.FieldByName('图片').Assign(nil);
adoquery1.FieldByName('格式').Value:='';
adoquery1.Post;
image1.Picture.Graphic :=nil;
end;
end;procedure TForm1.ADOQuery1AfterScroll(DataSet: TDataSet);
var
jpegimage:tjpegimage;
begin
image1.Picture.Graphic :=nil; //BMP、JPEG两种图像数据必需分别处理
if adoquery1.fieldbyname('格式').Asstring = 'bmp' then
image1.Picture.bitmap.Assign(adoquery1.fieldbyname('图片'))
//上边语句中的bitmap不能为graphic,否则会出错
else if adoquery1.fieldbyname('格式').asstring = 'jpg' then
begin //begin2
jpegimage := tjpegimage.Create ; //通过jpegimage将图像显示在image1,否则会出错
try
jpegimage.Assign(adoquery1.fieldbyname('图片'));
image1.Picture.Graphic :=jpegimage;
finally
jpegimage.Free ;
end; //end try
end; //end begin2
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
adoconnection1.Connected:=false;
if FileExists(ExtractFilePath(Paramstr(0))+'tmp.mdb') then
DeleteFile(ExtractFilePath(Paramstr(0))+'tmp.mdb'); //删除临时文件
//将数据库文件压缩并复制为tmp临时文件
__DBEngine36.CompactDatabase (ExtractFilePath(Paramstr(0))+'mydata.mdb',ExtractFilePath(Paramstr(0))+'tmp.mdb', '', 0, '');
//删除原数据库文件
DeleteFile(ExtractFilePath(Paramstr(0))+'mydata.mdb');
//将临时文件更改为数据库文件:
if not RenameFile(ExtractFilePath(Paramstr(0))+'tmp.mdb',ExtractFilePath(Paramstr(0))+'mydata.mdb') then raise Exception.Create('文化改名操作失败!');adoconnection1.Connected:=true;
adoquery1.Active:=true;
end;function DBGridRecordSize(mColumn: TColumnEh): Boolean;
{ 返回记录数据网格列显示最大宽度是否成功 }
begin
Result := False;
if not Assigned(mColumn.Field) then Exit;
mColumn.Field.Tag := Max(mColumn.Field.Tag,
TDBGridEh(mColumn.Grid).Canvas.TextWidth(mColumn.Field.DisplayText));
Result := True;
end; { DBGridRecordSize }
function DBGridAutoSize(mDBGrid: TDBGridEh; mOffset: Integer = 5): Boolean;
{ 返回数据网格自动适应宽度是否成功 }
var
I: Integer;
begin
Result := False;
if not Assigned(mDBGrid) then Exit;
if not Assigned(mDBGrid.DataSource) then Exit;
if not Assigned(mDBGrid.DataSource.DataSet) then Exit;
if not mDBGrid.DataSource.DataSet.Active then Exit;
for I := 0 to mDBGrid.Columns.Count - 1 do begin
if not mDBGrid.Columns[i].Visible then Continue;
if Assigned(mDBGrid.Columns[i].Field) then
mDBGrid.Columns[i].Width := Max(mDBGrid.Columns[i].Field.Tag,
mDBGrid.Canvas.TextWidth(mDBGrid.Columns[i].Title.Caption)) + mOffset
else mDBGrid.Columns[i].Width :=
mDBGrid.Canvas.TextWidth(mDBGrid.Columns[i].Title.Caption) + mOffset;
mDBGrid.Refresh;
end;
Result := True;
end; { DBGridAutoSize }
procedure TForm1.DBGridEh1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumnEh;
State: TGridDrawState);
begin //在数据库第1个字段自动显示序号
DBGridRecordSize(Column);
if Column.Index = 0 then
if DBGridEh1.SumList.RecNo <> -1 then
DBGridEh1.Canvas.TextRect(Rect, Rect.Left + 3, Rect.Top + 2,
IntToStr(DBGridEh1.SumList.RecNo));
end;procedure TForm1.BitBtn1Click(Sender: TObject);
begin
DBGridAutoSize(self.dbgrideh1);
end;end.