DLL如何共享TSQLConnection连接 ( 积分: 100 )

  • 主题发起人 主题发起人 sun2005
  • 开始时间 开始时间
S

sun2005

Unregistered / Unconfirmed
GUEST, unregistred user!
我在exe主程序拖一个dbExpress的TSQLConnection控件,请问在各个外部的DLL中如何共享主程序的TSQLConnection连接控件呢。又如何控制设计期间和运行期间的TSQLDataSet或TSimpleDataSet各个控件对于TSQLConnection连接呢。
 
在dll里面也放一connA,设计期的时候使用它。
运行期的时候,把你要共享的connB传递给dll,赋值给dll里面那个connA。
 
从EXE传递到DLL除了整控件传递外,还有其它方法吗?
 
如果主窗体里的TSQLCONNECTION叫connA,传递一个pointer(connA)到DLL里
DLL里直接就初始化成
Sds_Mx.connection=connA;
也就是说只要传递过去指向这个CONNECTION就行了。

FUNCTION ProvaChild(ParentApplication: TApplication
ParentForm: TForm;
OraSession: pointer
aCaption: STRING): Tform
EXPORT
STDCALL;
在里面我就是用这个初始化的,我用的ODAC
WITH childfrm DO
TRY
FOR i := 0 TO ComponentCount - 1 DO
IF (Components IS toraquery) THEN
toraquery(Components).Session := OraSession
ELSE
IF (Components IS TOraSQL) THEN
TOraSQL(Components).Session := OraSession
ELSE
IF (Components IS TOraStoredProc) THEN
TOraStoredProc(Components).Session := OraSession;
 
每一个TQuery或TSoredProc都要得到Session多麻烦啊,Sds_Mx.connection=connA;Sds_Mx是什么啊
 
Sds_Mx是一个TSimpleDataSet实例
当然有好处,不用再建立另外一个联接,如果你在联接后看一下一个程序有几个session就可以知道了,如果每个DLL一个,开上几个DLL就会有几个session。我不知道其它数据库怎么样,但是oracle是可以看出来的,如果超出设置的session最大值,就没法连接oracle了
 
接受答案了.
 
如果传递pointer(connA)到DLL里,dll设计期间如何连接conn啊.
 
设计期只能在DLL里再开一个connection,最终发布去掉就行了,还有一个办法就是代码建立这个connect ,然后放到{ifdef debug}{endif}里,最后编译时不要这个debug参数就成了,如果是控件不好这样用,只能是代码
 
后退
顶部