DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: 2ccc_mis
今日帖子: 8
在线用户: 15
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 lifencheng (lifencheng) ★☆☆☆☆ -
盒子活跃会员
2004/1/2 20:18:56
标题:
如何在DLL(或COM)中传递一个数据库连接????? 浏览:1607
加入我的收藏
楼主: 当我把数据库操作模块分散在多个DLL中时,各模块如何得到一个数库连接而不是连接字串, 就象在单一程式中多个ADOQUERY共用一个连接。
这样做是因为我不想在各模块都开启一个连接,
简单的说就是在模块中传递ADO数据库连接
题外话:在COM中可以做到传递一个组件,但我不知道一个己激活的ADO数据库连接的本质是什么?

----------------------------------------------
^-^lifencheng^0^
作者:
男 sephil (NAILY Soft) ★☆☆☆☆ -
盒子中级会员
2004/1/2 20:41:58
1楼: 继承自TComponent
----------------------------------------------
Copyright 2008 ? NAILY Soft

Click here to redirect to my home
Click here to redirect to my blog
作者:
男 sephil (NAILY Soft) ★☆☆☆☆ -
盒子中级会员
2004/1/2 20:42:44
2楼: TObject->TPersistent->TCompoent->TDataSet->TCustomADODataSet->TADOQuery
----------------------------------------------
Copyright 2008 ? NAILY Soft

Click here to redirect to my home
Click here to redirect to my blog
作者:
男 kwbin (rainey) ★☆☆☆☆ -
盒子活跃会员
2004/1/3 7:18:49
3楼:
主窗体调用函数
function functionDetect(libName,funcName:string;var libPointer:pointer):boolean;
var
  libHandle:THandle;
begin
  result:=false;
  libPointer:=nil;
  if LoadLibrary(PChar(libName))=0 then exit;
  libhandle:=GetModuleHandle(PChar(libName));
  if libHandle<>0 then
  begin
    libPointer:=GetProcAddress(libHandle,PChar(funcName));
    if libPointer<>nil then result:=true;
  end
end;

procedure loadModule(moduleFile:string);
var
  pShowForm:function(hHandle:HWND;conn:TADOConnection):bool;stdcall;
  mFile:string;
begin
  mFile:=ExtractFilePath(ParamStr(0))+'Lib\'+moduleFile;
  if functionDetect(mFile,'showForm',@pShowForm) then
    pShowForm(Application.Handle,DM.connMain)
  else
    Application.MessageBox('没有找到此模块!请核对!','错误',MB_ICONERROR+MB_OK);
end;

DLL函数声明
function showForm(hHandle:HWND;conn:TADOConnection):boolean;stdcall;
//记得要导出哦 !
var f:TfrmTokenAttri;
begin
  result:=false;
  PUB_CONN:=conn;
  //PUB_CONN为全局数据库连接变量,用于控制整个模块联结,外部定义
  Application.Handle:=hHandle;
  try
    f:=TfrmTokenAttri.Create(nil);
    f.ShowModal;
    result:=true;
  finally
    f.Free;
  end;
end;

----------------------------------------------
我们的技术来自于大家的齐心合力!不要吝啬你的知识!
作者:
男 lifencheng (lifencheng) ★☆☆☆☆ -
盒子活跃会员
2004/1/4 21:34:50
4楼: 谢了kwbin
但我想要的是用返回值,各模块可能在不同的机器上
----------------------------------------------
^-^lifencheng^0^
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行66.40625毫秒 RSS