当我把数据库操作模块分散在多个DLL中时,各模块如何得到一个数库连接而不是连接字串, 就象在单一程式中多个ADOQUERY共用一个连接。
这样做是因为我不想在各模块都开启一个连接,
简单的说就是在模块中传递ADO数据库连接
题外话:在COM中可以做到传递一个组件,但我不知道一个己激活的ADO数据库连接的本质是什么?

解决方案 »

  1.   

    标准DLL的数据库连接可以直接用TADOConnection变量传递
    ActiveDLL将TADOConnection转换后用Connection传递:ADOConnection1.ConnectionObject as ADODB_TLB.Connection
      

  2.   

    嗯!我想比较好的方法就是定义数组来进行操作。而非数据控件。当对对于数据对象进行操作时,只是对本地的entity进行操作,如果需要和数据库操作时,才进行io操作。
      

  3.   

    我想,你还是不用想了,即使有办法,也不是高效程序所推荐的做法,关于数据库的连接,你完全不应该这样做,为什么一个DLL不解决问题,分成几个DLL有什么好处吗
      

  4.   

    你可以用SharedConnection进行连接
    在TYPE中写
    procedure ShowForm(hOwner: hInst;SocketConnection:TSocketConnection);stdcall;procedure ShowForm(hOwner: hInst;SocketConnection:TSocketConnection);stdcall;
    begin
     try
      Application.Handle:= hOwner;
      Application.CreateForm(TDM, DM);
      DM.SharedConnection.ParentConnection:=SocketConnection;
      DM.table.Open;
      Application.CreateForm(TForm_Main, Form_Main);
      Form_Main.ShowModal;
     finally
     DM.table.Close;
     DM.free;
     Form_Main.Free;
     end;
    end;
      

  5.   

    这样吧,我举个例子,某个系统发布时带了很多COM类型的DLL,有一个是用来注册系统也就是连接数据库用的,其它的都是用来读写数据的功能模块,这样主程式就是一个用来加载的框架,这样每机器只要有一个数据库连接就可以了。服务器的负载就不会很重。
    COM+有一个连接池可以完成这样的工作, 但我在调试时发现就是最间单的例子,从客户首次调用COM+服务时要花费大量的时间,这时我又有了一个相同目的问题,如果把在客户调用COM+
    的时间缩短一点,则也解决了数据连接的问题
      

  6.   

    不知道你是怎么解决的.
    试试GIT保存数据库ADO 连接接口_Connection引用.
      

  7.   

    huojiehai(海天子)  halfdream(哈欠):
    我的方法很简单,COM+和连接池简简单单搞定,现在想想写出代码交工了事,当然学习就不是这样。
    “试试GIT保存数据库ADO 连接接口_Connection引用.”试详细点原生的ADO吗?我最初用VB的,当然很想,就象初恋一样想着原生ADO
      

  8.   

    在这贴子我贴了一点GIT的代码,很简单的。
    http://expert.csdn.net/Expert/topic/2516/2516319.xml?temp=.7895319GIT可以在进程内(跨线程)保存一个全局的接口引用,在一个进程内共享
    数据库连接也就只是用它来共享ADO的_connect接口.对于DELPHI的TADOCONNECTION,它封装得不错的,只要你把_Connect赋给它的Connect属
    性就可以用了.