我才八百耶,老兄,想散分都要好好考虑 强烈推荐你看刘艺的《Delphi面向对象编程》有你要的答案 以下是一个DLL封装对象的例子,关于数据库的:首先声明一个共单元,这个单元DLL工程要用到,你的主程序也要用到: unit SClass;interfaceuses Classes,DB,ADODB; type //该记录保存重要的全局信息-------------- TImvalue=record lendNum:integer; //可借书数量(以本计) lendTime:integer;//借书的时间长度(以月计) CartTime:integer; //借书证有效期(以月计) end;//一个数据库操作的抽象类 TISearch=class(TObject) public constructor create;virtual;abstract; procedure GetImportValue(var ImValue:TImvalue);virtual;abstract; function GetBookInfo(SType,SRange,SCon,ReNum:string):OleVariant;virtual;abstract; function GetReaderLend(RNum,ReNum:string):OleVariant;virtual;abstract; end; //上面的类的引用 TISearchClass=class of TISearch; implementationend. 、、、、、、、、、、、、、、 以下是DLL工程文件,继承上面的单元的抽象类并实现其中的方法: library SearchDll; uses SysUtils, Classes, SClass in 'SClass.pas', DBmdUnit in 'DBmdUnit.pas' {DataModule1: TDataModule}, SSubClass in 'SSubClass.pas';{$R *.res} Function SearchClass:TISearchClass; begin result:=TSearch; end;exports SearchClass;begin end.
以下是Dll中的单元: unit SSubClass;interfaceuses DBmdUnit,SClass,SysUtils,Classes, DB, ADODB,Variants;type //继承一个子类,以实现里面的操作 TSearch=class(TISearch) private DataModule1: TDataModule1; public constructor create;override; destructor Destroy;override; procedure GetImportValue(var ImValue:TImvalue);override; function GetBookInfo(SType,SRange,SCon,ReNum:string):OleVariant;override; function GetReaderLend(RNum,ReNum:string):OleVariant;override; end;implementationconstructor TSearch.create; begin DataModule1:=TDataModule1.Create(nil); end;destructor TSearch.Destroy; begin DataModule1.Free; inherited Destroy; end; //------------------------------------------ //取得info表的数据 procedure TSearch.GetImportValue(var ImValue:TImvalue); begin with DataModule1 do begin ReaderQuery.Close; ReaderQuery.SQL.Clear; ReaderQuery.SQL.Add('select * from Info'); ReaderQuery.Open; ReaderQuery.First; ImValue.lendNum:=ReaderQuery.fieldByName('可借数').AsInteger; ImValue.CartTime:=ReaderQuery.fieldByName('图书证有效期').AsInteger; ImValue.lendTime:=ReaderQuery.fieldByName('借书有效期').AsInteger; ReaderQuery.Close; ReaderQuery.SQL.Clear; ReaderQuery.SQL.Add('select * from Reader'); ReaderQuery.Open; end; end; //取得图书信息表的数据 function TSearch.GetBookInfo(SType,SRange,SCon,ReNum:string):OleVariant; begin with DataModule1 do try if not ADOConnection1.Connected then ADOConnection1.Connected:=true; bInfoQuery.Close; bInfoQuery.SQL.Clear; bInfoQuery.SQL.Add('Select top '+Renum+' * from bookInfo '); bInfoQuery.SQL.Add('where '+SType+' like ''%'+SCon+'%'' '); bInfoQuery.SQL.Add('and 所在室='''+SRange+''''); bInfoQuery.Open; Result:=DSPbookInfo.Data; finally ADOCOnnection1.Connected:=false; end; end; //取得读者表的数据 function TSearch. GetReaderLend(RNum,ReNum:string):OleVariant; begin with DataModule1 do try if not ADOConnection1.Connected then ADOConnection1.Connected:=true; bInfoQuery.Close; ReaderQuery.SQL.Clear; ReaderQuery.SQL.Add('Select top '+ReNum+' * from Reader'); ReaderQuery.SQL.add('where 读者号 like '''+RNum+''''); ReaderQuery.Open; Result:=DSPReader.Data; finally ADOCOnnection1.Connected:=false; end; end;end.
下面是主程序对DLL的调用(主程序单元也用Uses SClassunit SearchUnit;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls, ExtCtrls, Grids, DBGrids, DB, DBClient,SClass,SSubClass; type TForm1 = class(TForm) PageControl1: TPageControl; TabSheet1: TTabSheet; TabSheet2: TTabSheet; Panel1: TPanel; Panel2: TPanel; CBStlye: TComboBox; GroupBox1: TGroupBox; GroupBox2: TGroupBox; Label1: TLabel; Label2: TLabel; CBRange: TComboBox; Label3: TLabel; Bevel1: TBevel; Bevel2: TBevel; EditSearch: TEdit; Label4: TLabel; Bevel3: TBevel; EditNum: TEdit; UpDown1: TUpDown; Button1: TButton; ClientDataSet1: TClientDataSet; Label5: TLabel; EditReader: TEdit; EditRe: TEdit; Label6: TLabel; UpDown2: TUpDown; Button2: TButton; EditName: TEdit; Label7: TLabel; EditTime: TEdit; Label8: TLabel; EditEnd: TEdit; Label9: TLabel; EditKill: TEdit; Label10: TLabel; EditBNum: TEdit; Label11: TLabel; Bevel4: TBevel; StaticText1: TStaticText; ListView1: TListView; ClientDataSet2: TClientDataSet; ListView2: TListView; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Button2Click(Sender: TObject); procedure EditReaderKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure EditSearchKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); private { Private declarations } SBookInfo:TISearch; ImValue:TImvalue; public { Public declarations } procedure GetReader; procedure GetBookInfo; end; function SearchClass:TISearchClass;external 'SearchDll.dll'; var Form1: TForm1;implementation{$R *.dfm} //-------------------------------------- //程序创建时,创建DLL中的查询类,并取得重要的数据 procedure TForm1.FormCreate(Sender: TObject); begin SBookInfo:=SearchClass.create; SBookInfo.GetImportValue(ImValue); end; //------------------------------------------ procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin SBookInfo.Free; end; //--------------------------------------------- //模糊查询图书信息 procedure TForm1.Button1Click(Sender: TObject); begin GetBookInfo; end;procedure TForm1.EditSearchKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key=VK_ReTurn then GetBookInfo; end; //------------------------------------------- //精确查询读者信息 procedure TForm1.Button2Click(Sender: TObject); begin GetReader; end;procedure TForm1.EditReaderKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key=VK_ReTurn then GetReader; end; //------------------------------------- //函数功能模块 //取得读者借阅信息 procedure TForm1.GetReader; begin if editreader.Text='' then begin showmessage('请输入要查询的内容'); exit; end else begin ClientDataSet2.Active:=False; ClientDataSet2.Data:=SBookInfo.GetReaderLend(EditReader.Text,Editre.Text); ClientDataSet2.Active:=True; end; ListView1.Items.Clear; with ClientdataSet2 do begin First; Editname.Text:=FieldByName('姓名').AsString; EditTime.Text:=FieldByName('办证时间').AsString; EditKill.Text:=FieldByName('冻结').AsString; EditBNum.Text:=FieldByName('借书数').AsString; //显示读者证的截止时间 EditEnd.Text:=DateTimeToStr(incMonth(FieldByName('办证时间').AsDateTime,Imvalue.CartTime)); While not Eof do begin with ListView1.Items.Add do begin caption:=fieldByName('书号').AsString; SubItems.Add(fieldByName('书名').AsString); SubItems.Add(fieldByName('借书时间').AsString); SubItems.Add(DateTimeToStr(incMonth(FieldByName('借书时间').AsDateTime,Imvalue.lendTime))); end; next; end; end; end; //取得图书信息 procedure TForm1.GetBookInfo; begin if editSearch.Text='' then begin showmessage('请输入要查询的内容'); exit; end else begin ClientDataSet1.Active:=False; ClientDataSet1.Data:=SBookInfo.GetBookInfo(CBStlye.Text, CBRange.Text,EditSearch.Text,EditNum.Text); ClientDataSet1.Active:=True; end; ListView2.Items.Clear; with ClientdataSet1 do begin While not Eof do begin with ListView2.Items.Add do begin caption:=fieldByName('书号').AsString; SubItems.Add(fieldByName('书名').AsString); SubItems.Add(fieldByName('作者').AsString); SubItems.Add(fieldByName('出版社').AsString); SubItems.Add(fieldByName('类型').AsString); SubItems.Add(fieldByName('借还').AsString); SubItems.Add(fieldByName('所在室').AsString); SubItems.Add(fieldByName('所在区').AsString); SubItems.Add(fieldByName('位置').AsString); end; next; end; end; end; //-----------------------------------------end.
强烈推荐你看刘艺的《Delphi面向对象编程》有你要的答案
以下是一个DLL封装对象的例子,关于数据库的:首先声明一个共单元,这个单元DLL工程要用到,你的主程序也要用到:
unit SClass;interfaceuses
Classes,DB,ADODB;
type
//该记录保存重要的全局信息--------------
TImvalue=record
lendNum:integer; //可借书数量(以本计)
lendTime:integer;//借书的时间长度(以月计)
CartTime:integer; //借书证有效期(以月计)
end;//一个数据库操作的抽象类
TISearch=class(TObject)
public
constructor create;virtual;abstract;
procedure GetImportValue(var ImValue:TImvalue);virtual;abstract;
function GetBookInfo(SType,SRange,SCon,ReNum:string):OleVariant;virtual;abstract;
function GetReaderLend(RNum,ReNum:string):OleVariant;virtual;abstract;
end;
//上面的类的引用
TISearchClass=class of TISearch;
implementationend.
、、、、、、、、、、、、、、
以下是DLL工程文件,继承上面的单元的抽象类并实现其中的方法:
library SearchDll;
uses
SysUtils,
Classes,
SClass in 'SClass.pas',
DBmdUnit in 'DBmdUnit.pas' {DataModule1: TDataModule},
SSubClass in 'SSubClass.pas';{$R *.res}
Function SearchClass:TISearchClass;
begin
result:=TSearch;
end;exports
SearchClass;begin
end.
unit SSubClass;interfaceuses
DBmdUnit,SClass,SysUtils,Classes, DB, ADODB,Variants;type
//继承一个子类,以实现里面的操作
TSearch=class(TISearch)
private
DataModule1: TDataModule1;
public
constructor create;override;
destructor Destroy;override;
procedure GetImportValue(var ImValue:TImvalue);override;
function GetBookInfo(SType,SRange,SCon,ReNum:string):OleVariant;override;
function GetReaderLend(RNum,ReNum:string):OleVariant;override;
end;implementationconstructor TSearch.create;
begin
DataModule1:=TDataModule1.Create(nil);
end;destructor TSearch.Destroy;
begin
DataModule1.Free;
inherited Destroy;
end;
//------------------------------------------
//取得info表的数据
procedure TSearch.GetImportValue(var ImValue:TImvalue);
begin
with DataModule1 do
begin
ReaderQuery.Close;
ReaderQuery.SQL.Clear;
ReaderQuery.SQL.Add('select * from Info');
ReaderQuery.Open;
ReaderQuery.First;
ImValue.lendNum:=ReaderQuery.fieldByName('可借数').AsInteger;
ImValue.CartTime:=ReaderQuery.fieldByName('图书证有效期').AsInteger;
ImValue.lendTime:=ReaderQuery.fieldByName('借书有效期').AsInteger;
ReaderQuery.Close;
ReaderQuery.SQL.Clear;
ReaderQuery.SQL.Add('select * from Reader');
ReaderQuery.Open;
end;
end;
//取得图书信息表的数据
function TSearch.GetBookInfo(SType,SRange,SCon,ReNum:string):OleVariant;
begin
with DataModule1 do
try
if not ADOConnection1.Connected then
ADOConnection1.Connected:=true;
bInfoQuery.Close;
bInfoQuery.SQL.Clear;
bInfoQuery.SQL.Add('Select top '+Renum+' * from bookInfo ');
bInfoQuery.SQL.Add('where '+SType+' like ''%'+SCon+'%'' ');
bInfoQuery.SQL.Add('and 所在室='''+SRange+'''');
bInfoQuery.Open;
Result:=DSPbookInfo.Data;
finally
ADOCOnnection1.Connected:=false;
end;
end;
//取得读者表的数据
function TSearch. GetReaderLend(RNum,ReNum:string):OleVariant;
begin
with DataModule1 do
try
if not ADOConnection1.Connected then
ADOConnection1.Connected:=true;
bInfoQuery.Close;
ReaderQuery.SQL.Clear;
ReaderQuery.SQL.Add('Select top '+ReNum+' * from Reader');
ReaderQuery.SQL.add('where 读者号 like '''+RNum+'''');
ReaderQuery.Open;
Result:=DSPReader.Data;
finally
ADOCOnnection1.Connected:=false;
end;
end;end.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, ExtCtrls, Grids, DBGrids, DB,
DBClient,SClass,SSubClass;
type
TForm1 = class(TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
Panel1: TPanel;
Panel2: TPanel;
CBStlye: TComboBox;
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
Label1: TLabel;
Label2: TLabel;
CBRange: TComboBox;
Label3: TLabel;
Bevel1: TBevel;
Bevel2: TBevel;
EditSearch: TEdit;
Label4: TLabel;
Bevel3: TBevel;
EditNum: TEdit;
UpDown1: TUpDown;
Button1: TButton;
ClientDataSet1: TClientDataSet;
Label5: TLabel;
EditReader: TEdit;
EditRe: TEdit;
Label6: TLabel;
UpDown2: TUpDown;
Button2: TButton;
EditName: TEdit;
Label7: TLabel;
EditTime: TEdit;
Label8: TLabel;
EditEnd: TEdit;
Label9: TLabel;
EditKill: TEdit;
Label10: TLabel;
EditBNum: TEdit;
Label11: TLabel;
Bevel4: TBevel;
StaticText1: TStaticText;
ListView1: TListView;
ClientDataSet2: TClientDataSet;
ListView2: TListView;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button2Click(Sender: TObject);
procedure EditReaderKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure EditSearchKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
SBookInfo:TISearch;
ImValue:TImvalue;
public
{ Public declarations }
procedure GetReader;
procedure GetBookInfo;
end;
function SearchClass:TISearchClass;external 'SearchDll.dll';
var
Form1: TForm1;implementation{$R *.dfm}
//--------------------------------------
//程序创建时,创建DLL中的查询类,并取得重要的数据
procedure TForm1.FormCreate(Sender: TObject);
begin
SBookInfo:=SearchClass.create;
SBookInfo.GetImportValue(ImValue);
end;
//------------------------------------------
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
SBookInfo.Free;
end;
//---------------------------------------------
//模糊查询图书信息
procedure TForm1.Button1Click(Sender: TObject);
begin
GetBookInfo;
end;procedure TForm1.EditSearchKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key=VK_ReTurn then
GetBookInfo;
end;
//-------------------------------------------
//精确查询读者信息
procedure TForm1.Button2Click(Sender: TObject);
begin
GetReader;
end;procedure TForm1.EditReaderKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key=VK_ReTurn then
GetReader;
end;
//-------------------------------------
//函数功能模块
//取得读者借阅信息
procedure TForm1.GetReader;
begin
if editreader.Text='' then
begin
showmessage('请输入要查询的内容');
exit;
end
else begin
ClientDataSet2.Active:=False;
ClientDataSet2.Data:=SBookInfo.GetReaderLend(EditReader.Text,Editre.Text);
ClientDataSet2.Active:=True;
end;
ListView1.Items.Clear;
with ClientdataSet2 do
begin
First;
Editname.Text:=FieldByName('姓名').AsString;
EditTime.Text:=FieldByName('办证时间').AsString;
EditKill.Text:=FieldByName('冻结').AsString;
EditBNum.Text:=FieldByName('借书数').AsString;
//显示读者证的截止时间
EditEnd.Text:=DateTimeToStr(incMonth(FieldByName('办证时间').AsDateTime,Imvalue.CartTime));
While not Eof do
begin
with ListView1.Items.Add do
begin
caption:=fieldByName('书号').AsString;
SubItems.Add(fieldByName('书名').AsString);
SubItems.Add(fieldByName('借书时间').AsString);
SubItems.Add(DateTimeToStr(incMonth(FieldByName('借书时间').AsDateTime,Imvalue.lendTime)));
end;
next;
end;
end;
end;
//取得图书信息
procedure TForm1.GetBookInfo;
begin
if editSearch.Text='' then
begin
showmessage('请输入要查询的内容');
exit;
end
else begin
ClientDataSet1.Active:=False;
ClientDataSet1.Data:=SBookInfo.GetBookInfo(CBStlye.Text,
CBRange.Text,EditSearch.Text,EditNum.Text);
ClientDataSet1.Active:=True;
end;
ListView2.Items.Clear;
with ClientdataSet1 do
begin
While not Eof do
begin
with ListView2.Items.Add do
begin
caption:=fieldByName('书号').AsString;
SubItems.Add(fieldByName('书名').AsString);
SubItems.Add(fieldByName('作者').AsString);
SubItems.Add(fieldByName('出版社').AsString);
SubItems.Add(fieldByName('类型').AsString);
SubItems.Add(fieldByName('借还').AsString);
SubItems.Add(fieldByName('所在室').AsString);
SubItems.Add(fieldByName('所在区').AsString);
SubItems.Add(fieldByName('位置').AsString);
end;
next;
end;
end;
end;
//-----------------------------------------end.