我的服务器有两个组件,一个是数据模块,一个是业务规则模块,我想用SOCKETCONNECTION的方试调用业务规则模块上的功能,怎么用,(注,我不想把那些方法写在数据模块那个DLL内).......想请教高手
解决方案 »
- sendmessage怎么传送消息让另一个窗体执行自定义的某个函数呢?
- 如何把数据库的内容赋到TopGrid上?
- 读取INI文件问题
- Format('%X',[StrtoInt(s)])的转换问题
- 救命!!!电脑复制文本内容后粘贴不了。。
- 如何将一EXCEL中的内容读到ListView中啊,急,在线等!!!
- delphi刚学,有点不明白地方?
- 请教:DELPHI怎么调用C程序,又怎么关闭C程序?
- 怎样可以得到一个窗口里所有控件的句柄?
- 请提供数字小写转英文大写的算法或FORD6的控件,谢了!
- ADO访问DBF的时候为什么如果dbf中如果有个字段是日期时间(time)型的就会访问出错!
- ACTIVEX中使用idUDPClient收不到数据?
定义方法的数据操作
procedure Ttestapp.mm(UserName,PassWord);
begin
ADODataSet1.Close;
ADODataSet1.CommandText:='select Legal_power from UserManage where UserName='''+UserName+''' and PassWord='''+PassWord+'''';
ADODataSet1.Open;
end;客户端调用:procedure TForm1.BitBtn1Click(Sender: TObject);
begin
UserName:=edit1.text;
PassWord:=edit2.text;
DataModule2.APPS.mm(UserName,PassWord);
ClientDataSet1.close;
DataModule2.ClientDataSet1.Open;
//剩下的就是你对返回数据集的处理了
end;
这个(DataModule2.APPS.mm(UserName,PassWord),调用远程数据模块的函数,并不是在客户端的数据模块的
DCOM is a such example.
to aiirii(ari-爱的眼睛) 也就是说我有两个组件,一个是数据模块组件,一个是业务组件,以前用DCOM的方式调用业务组件上的功能的,这样没问题,但那个DCOM很难过防火墙,我改用SOCKETCONNECTION了,这样是可以过墙,但我辛辛苦苦写的组件不能调用了(除了数据模块组件SOCKETCONNECT能调用外)...........
procedure TForm1.Button2Click(Sender: TObject);
var
qCoor : ImtsDemoQueryCoor;
vDatas : OleVariant;
begin
qCoor := ComtsDemoQueryCoor.Create;
qCoor.GetBooks(vDatas);
ClientDataSet2.Data := vDatas;
end;
但这样写的程序在发存的时候要注册服务端的接口注册!!!最要命的是,不能过防火墙啊....我就不再多说了,你说说,我不想用这种方法,又不想注册什么服务端接口,有什么方法,(我看到用SOCKETCONNECT的东东连接服务器的DataSetProvider,很好使,而且客户端又不要注册什么,唉,但它不能用到我写的接口啊,如上面的ImtsDemoQueryCoor),,苦...........................
但DELPHI提供了好几种远程过程调用的方式:1:套接字连接(TSocketConnection)、2:DCOM连接(TDCOMConnetion)、3:HTTP连接(TWebConnection)、4:SOAP连接(TSOAPConnection)、5:CORBA连接(TCORBAConnection)。以上每种后的控件名是DELPHI提供的默认连接控件,要使用它们就得在服务器上建立不同的数据模块,然后在客户端用相应的连接控件连接就可调用服务器上数据模块的方法。如你所说:这些方法都是远程数据模块的方法。但所谓远程数据模块只不过是一些特殊的类你可以对比研究一下它与普通类的区别(1、继承:TRemoteDataModel;2、实现一个以"_TLB"结尾的单元中的一个接口;3、有UpdateRegistry类过程 ;4、在单元的initiallization部分的TCommponetFactiory.Create过程),然后把你的类改成这个样子应该就可以了。