delphi 如何用DLL模式开发数据库应用程序,给个exe+dll+datamoudl操作数据库简单实例

boomyear 2015-05-28 09:17:20
Delphi传统模式开发模式修改程序时需要重新编译整个项目。用DLL模式只需要修改相关的DLL。网上的大部份都是传统模式开发的资料,好像很少DLL模式开发的参考资料。

用DLL模式按下列设计方案,做一个简单的显示数据库内容
1、Data Module放ADOConnection、ADOQuery
2、主窗体MainForm放DBGrid、DataSource显示数据
3、DLL中写个函数实现数据库连接以及获取数据。

要怎么实现?这方面的资料好像真的很少,就按我上面的方案谁能给个实例学习一下?

有人建议用mybean、tangram框架来实现,还有建议用三层、连接池、线程来实现,tangram看了帮助文档还是不太清楚怎么做,mybean感觉给新手学的资料还有待完善。至于三层架构,做单机版的应用三层是不是还得搭个服务器?这些技术我当然也想学,只是我的水平还太低,这些技术对我来说有些深奥。网上很多资料太老,能否介绍一些实用的资料或书籍学习一下?
...全文
645 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zoucp 2015-05-29
  • 打赏
  • 举报
回复
可以参考<delphi面向对象编程思想>一书中的封装篇.里面有完整的实例.
boomyear 2015-05-29
  • 打赏
  • 举报
回复
引用 1 楼 suiyunonghen 的回复:
貌似你自己说的两个插件框架,都有完整的例子和文档吧,如果你要别人现场给你写的,可能还不如他们的完备吧,如果要别人完全手把手的给你写好教程,这个估计不太可能。所谓引路人,别人只会给你指一个方向,不会带着你走路啊
两个框架文档都看了怎么弄还不知道呢,里面的demo找来找去好像也没找到我想要的例子,再加上例子里都不是单一功能的模块。代码看得也头疼。我要的这个实例会写的人应该两分钟就写完了。不过我自已也在写,用共享全局变量的方法,找到一点头绪,就是写不出来,还是因为我水平太菜。我要是写得出来我一定把代码粘上来,想必也有很多初学者想要,就是都找不到完整的实例。
不得闲 2015-05-29
  • 打赏
  • 举报
回复
貌似你自己说的两个插件框架,都有完整的例子和文档吧,如果你要别人现场给你写的,可能还不如他们的完备吧,如果要别人完全手把手的给你写好教程,这个估计不太可能。所谓引路人,别人只会给你指一个方向,不会带着你走路啊
boomyear 2015-05-29
  • 打赏
  • 举报
回复
参考了网络上一个共享全局变量的例子,该例子能够实现EXE+DLL获取Datamodule中的adoconnection的连接字符串,该例子由DMDll.dll(datamodule)、CommonDll.dll(实现获取数据过程GetData()) 、主窗体Main构成,其中global.pas存放全局变量,供其它单元调用。 该例在Delphi 7+win32位系统下可运行, 64位系统运行后主窗口不能显示。 该例只是获取Datamodule中的adoconnection的连接字符串,我也尝试把GetData()改成由ADOQuery获取数据集,结果是编译不能通过。也不知道这个getdata()要怎么写才能把获取的数据集在Form1的DBGrid上显示出来。 是不是因为没有创建内存映射的原因呢? 以下是该例完整代码: DMDll.dll library DMDll; { Important note ......} uses SysUtils, Classes, DM in 'DM.pas' {DataModule1: TDataModule}, global in 'global.pas'; {$R *.res} function GetGlobalData:PGlobalData;stdcall; begin Result:=g_pGlobalData; end; exports GetGlobalData; begin NEW(g_pGlobalData); g_pGlobalData^.ADOConn:=dm.DataModule1.ADOConn; g_pGlobalData^.Query1 :=dm.DataModule1.Query1; g_pGlobalData^.DS1:=dm.DataModule1.DS1; end. unit DM; interface uses SysUtils, Classes, DB, ADODB; type TDataModule1 = class(TDataModule) ADOConn: TADOConnection; Query1: TADOQuery; DS1: TDataSource; private { Private declarations } public { Public declarations } end; var DataModule1: TDataModule1; implementation {$R *.dfm} uses Activex; initialization CoInitialize(nil); DataModule1:= TDataModule1.Create(nil); finalization CoUninitialize; end. unit global; interface uses ADODB,DB; type PGlobalData = ^TGlobalData; TGlobalData = record ADOConn:TAdoConnection; Query1:TADOQuery; DS1: TDataSource; end; var g_pGlobalData:PGlobalData; //全局变量implementation end. ----------------------------------------------------------- CommonDll.dll library CommonDll; { Important note ......} uses SysUtils, Classes, global in 'global.pas', Dialogs; {$R *.res} procedure Init(P:Pointer); //指针指向DMDll.dll的全局共享数据 begin g_pGlobalData:=P; end; procedure GetData(); //获取数据 begin if Assigned(g_pGlobalData) then ShowMessage(g_pGlobalData^.ADOConn.ConnectionString); end; exports Init,GetData; begin end. ---------------------------------------------------------------------- 主窗体Form1 unit Main; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation uses global; {$R *.dfm} function GetGlobalData:PGlobalData;stdcall;external 'DMDll.dll'; procedure GetData;external 'CommonDll.dll'; procedure InitOtherDll1(P:Pointer);external 'CommonDll.dll' name 'Init'; procedure TForm1.Button1Click(Sender: TObject); begin GetData; end; procedure TForm1.FormCreate(Sender: TObject); begin g_pGlobalData:=GetGlobalData; InitOtherDll1(g_pGlobalData); end; end.
fansfantasy 2015-05-29
  • 打赏
  • 举报
回复
引用
用DLL模式按下列设计方案,做一个简单的显示数据库内容 1、Data Module放ADOConnection、ADOQuery 2、主窗体MainForm放DBGrid、DataSource显示数据 3、DLL中写个函数实现数据库连接以及获取数据。
你说的这个怎么那么像delphi调用windows.api的函数. 你是不是只是想把函数封装在dll里? 你看看delphi自己的api.pas里怎么搞的不就好了.
lyhoo163 2015-05-29
  • 打赏
  • 举报
回复
Delphi开发模式:采取主程序调用模块文件,是这是普遍使用的。 但是模块的方式,大体通过以下三种方式 1、EXE方式 2、Dll方式 3、bpl方式 大多数采取bpl包的子模块方式,只有这种模式,主程序与子模块之间可以共享数据。比如,全局变量和数据模块。 而EXE模块,就是一个的模块。有自己的数据模块。 DLL模式,比较难一点,它可以通过共享内存的方式,让主程序与Dll之间共享全局。

2,495

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧