exe和dll都选中build with runtime packages就OK了。

解决方案 »

  1.   

    告诉你一个绝招,你把Session做为参数传到DLL中替换DLL中的Session就行了.
    我就是这样做的!
      

  2.   

    Session与多线程有关,不用多线程就没必要管
      

  3.   

    to hellion:
       我用你的方法试过,基本能解决我的问题,但编译后只有16K之多,文件发布时,是否要带其他的文件。有哪些?to weizhi:
       用session作为参数,如何传到Dll中,能否说情况一点。
      

  4.   

    你使用了TDatabase,自然要安装BDE了,用IS for delphi做安装盘吧。
    传递session跟传databasename一样,作为字符串传递,要保证databasename属于该session
      

  5.   

    在DLL中输出一个函数,大概如下:
    procedure SetSession(ASession:TSession);
    begin
      Session := ASession;
    end;在Client中调用DLL中的访问数据库中的过程之前,先调用此过程,调用方法如下:
      SetSession(Session);
    这里传入的是默认的Session,替换的也是DLL中的默认Session,前提是你没有显示的使用其它的Session控件.如果你没显是使用Session控件或动态建立Session,则应用程序中的所有的数据库都在此默认的Session的管理下的。
      

  6.   

    补充一点,上述前提是DLL和CLient都是Delphi写的。
    另外,DLL中替换默认Session之前,也可以保存DLL中的默认Session,在做个过程,在退出Client前调用,恢复默认Session.
    在我的项目中,我用的很好,而且我同时联到Oracel和Sybase,只要传入Session进去,Dll中使用Table或Query时,只要设置DabaseName与Client中的Database控件的DatabaseName一样即可。