Remote DataModule 之间传递 TADOConnect (100分)

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

szloner

Unregistered / Unconfirmed
GUEST, unregistred user!
假设有N个单位,不同的单位有不同的数据库连接。设计时不知道connection是什么。运行时才知道你是什么单位的,connection才能确定。我想一个单位只用一TADOConnect,如何主datamodule给不同的子datamodule中的TADOQuery等传递TADOConnct呢?
我想利用接口的属性传递TADOConnect,不知道OleVariant类型可不可以传递。
 
在中间层上每个单位放一个连接,
一个公共连接,判断单位,可以将中间层的连接参数放到数据表里,查询该单位的参数
在客户端判断单位,写好参数就可以了
 
你没有明白我的意思。
为了从效率上考虑,中间服务器启动时就已经初始化好了所有单位的连接。
当一客户从主datamodul登录后取得一TADOconnect的指针,并保存在主datamodule中
,从主datamodule取得一需要的子datamodule接口,
但是这个子datamodule中的query控件的connect属性在设计时是不知的。
我利用的是shareconnect连接子datamodule。在主datamodule中如何给子datamodule的
query控件指定connect。
 
rdm之间传递好像比较麻烦,如果把所有的连接放在一个本地dm中,然后由其他rdm访问本地dm取得连接可能好作一点。
另外一个单位只用一个连接,如果这个单位有很多客户端的话只用一个连接是不是会有问题?
也许我没理解你的意思
 
1.可以直接用_Connection相互传递,当然必须在Type library引入ADO库,然后
取ADOConnection1.ConnectionObject传给子RDM
2.一个ADOConnection只是一个指针,一个指针只是一个integer,
所以只要传一个integer就行了,譬如
var
Con:integer;
begin
Con:=integer(ADOConnection1);
ADODataSet1.Connection:=TADOConnection(Con);
 
to shiningplus;
请说明白一点行吗,我编译通过,但运行报“灾难性错误”。
我是这样写的:
主datamodule:
function TM_Login_RDM.Get_IPublicQuery: IPublicQuery;
begin
Result:= FPublicQuery.CreateComObject(nil) as IPublicQuery;
Result.ParentConn:= DataBaseConn^.ConnectionObject;
end;

子datamodule:
procedure TPublicQuery.Set_ParentConn(Conn: OleVariant);
begin
Query.Connection :=TADOConnection(Integer(Conn));
end;

这样写对吗?
 
定义Idispatch参数
用as转换
 
to 沉香屑,
能不能,写清楚一点,我还是不明白。
 
我的看法是,在Main RDM和Child RDM都放一个AdoConnection,
在Main RDM和Child RDM间传递ConnectionString,我想这个比较简单。
 
8好意思,我没说清楚,我的意思是两种8同的方法,
第一种传递_Connection,因为他
本身就是Com对象,但是你的Type library 起初是没有这种类型的,必须在Uses页中
导入ADO库
function TM_Login_RDM.Get_IPublicQuery: IPublicQuery;
begin
Result:= FPublicQuery.CreateComObject(nil) as IPublicQuery;
Result.ParentConn:= DataBaseConn.ConnectionObject;
end;

子datamodule:
procedure TPublicQuery.Set_ParentConn(Conn: _Connection);
begin
Query.Connection.ConnectionObject :=Conn;
end;

第二种就是传递integer
function TM_Login_RDM.Get_IPublicQuery: IPublicQuery;
begin
Result:= FPublicQuery.CreateComObject(nil) as IPublicQuery;
Result.ParentConn:= integer(DataBaseConn);
end;

子datamodule:
procedure TPublicQuery.Set_ParentConn(Conn: integer);
begin
Query.Connection :=TADOConnection(Conn);
end;
 
to shiningplus
非常感谢你的帮助,也感谢其他人的帮助。问题已按照你的方法解决了,还有一个小问题
我在定义属性的时候,SYSINT在编译时没有通过。我手工改成了Integer。
分我全部给你了,有空多交流。
 
to shiningplus
请问你的msn是多少阿```
 
gangliu21@msn.com
 

Similar threads

回复
0
查看
804
不得闲
D
回复
0
查看
930
DelphiTeacher的专栏
D
D
回复
0
查看
871
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部