导航:
论坛 -> 数据库专区
斑竹:liumazi,waterstone
作者:
2015/5/27 11:13:10
标题:
delphi 如何用DLL模式开发数据库系统,exe+dll+datamoudl操作数据库?
浏览:1726
加入我的收藏
楼主:
Delphi传统模式开发模式修改程序时需要重新编译整个项目。用DLL模式只需要修改相关的DLL。网上的大部份都是传统模式开发的资料,好像很少DLL模式开发的参考资料。 用DLL模式按下列设计方案,做一个简单的显示数据库内容 1、Data Module放ADOConnection、ADOQuery 2、主窗体MainForm放DBGrid、DataSource显示数据 3、DLL中写个函数实现数据库连接以及获取数据。 要怎么实现呢? 另外,实际开发过程中,DLL开发模式是如何设计的呢?
----------------------------------------------
-
作者:
2015/5/27 12:27:53
1楼:
了解下mybean开源项目
----------------------------------------------
-
作者:
2015/5/27 12:39:41
2楼:
盒子果然不错,这么快就有答复,感谢! 除了mybean 好像还有用tangram框架的,不知道tangram怎么样?
----------------------------------------------
-
作者:
2015/5/27 13:09:56
3楼:
http://bbs.2ccc.com/default.asp?roomid=&keyword=mybean&keyrange=1
----------------------------------------------
大象说他Delphi比我好,我想了三天没明白是怎么回事!
作者:
2015/5/27 14:25:58
4楼:
tangram 在用 . mybean比较灵活
----------------------------------------------
-
作者:
2015/5/27 17:38:21
5楼:
这技术,古老的很! 建议使用三层模式,用数据链接池、线程池来处理数据交互,建立公用类提供客户端继承开发。你这样搞个Data Module放ADOConnection、ADOQuery,实在是孩童级玩具!
----------------------------------------------
Everyone will to do best!
作者:
2015/5/27 19:06:50
6楼:
[quote]这技术,古老的很! 建议使用三层模式,用数据链接池、线程池来处理数据交互,建立公用类提供客户端继承开发。你这样搞个Data Module放ADOConnection、ADOQuery,实在是孩童级玩具![quote] ---------- 我也就是初级水平的,三层、连接池...这些对我来说感觉还是比较深奥,看了tangram帮助文档,还是云里雾里的感觉,mybean就更不清楚了,好像资料都比较少,我还得多学习。 就目前我的这个孩童级的DLL开发模式做了好几天我都做不出来,谁能指导一下,或者给个案例让我学学。这方面的开发资料好像真的很少。
----------------------------------------------
-
作者:
go_on (go_on)
★☆☆☆☆
-
盒子活跃会员
2015/5/27 21:44:30
7楼:
考虑一下插件也可以,可以不停的增加业务
----------------------------------------------
www.eudn.cn工程师联合开发网
作者:
2015/5/28 17:51:53
8楼:
别犹豫就exe+Dll,这已经很强了。
----------------------------------------------
菩提本无树,明镜亦非台,本来无一物,何处惹尘埃
作者:
2015/5/29 10:15:21
9楼:
我这水平太菜,参考了几天“全局变量共享“的办法也不来呢,能不能给个实例学学呀,我要写出来了就粘上来给初学者参考。
----------------------------------------------
-
作者:
2015/5/29 17:19:16
10楼:
把接口放在dll中,是个好办法。
----------------------------------------------
-
作者:
2015/5/29 20:52:27
11楼:
参考了网络上一个共享全局变量的例子,该例子能够实现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; //全局变量 [color=#FF0000][/color]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.
----------------------------------------------
-