要把数据传回来,要用到midas组件。
我用了一个笨办法:
client端加clientsocket元件,server端加serversocket元件。假设两边port
值均为1024.然后把SQL语句发送到SERVER端,SERVER端收到发送来的SQL语句后,
将其加入到remotedatamodal中的query元件的sql属性中去。然后在client端执行
即可。
具体方式如下:
1.client端:
client的form上置一个button,在其click事件中添加如下代码:
if clientsocket1.active then
clientsocket1.active:=false;
clientsocket1.port:=1024;
clientsocket1.address:='199.199.199.1';/*server端IP*/
clientsocket1.active:=true;
sql:='select * from table';/*假设SQL为这一句*/
clientsocket1.socket.sendtext(sql);
/*至此可将SQL语句发送出去*/
2.server端:
先在serverform.create()事件中添加如下代码:
serversocket1.open;
再在serversocket的clientsocketread()事件中添加如下代码:
receive:=socket.receivetext;
/*receive须事先定义,下同*/
/*这时的receive为SQL语句*/
/*在serverform上放一个edit,把receive赋给edit.text,再在remotedatamodal
的create()事件中调用edit.text,然后把edit.text赋给query的sql属性。这个
方法比较笨,但我试过,在remotedatamodal的create()事件中直接调用 serverform.edit.text行不通*/
/*remoteserver中放三个元件:query,datasetprovider,datebase,各项属性设置
比较简单,类似于单机上的设置,故不再重复。只是datebase的handleshared属性
一定要设为true*/
edit.text:=receive;
在remotedatamodal的create()属性中添加如下代码:
receive:=serverform.edit.text;
query1.close;
query1.sql.clear;
query1.sql.add(receive);
query1.sql.execute;
query1.active;
3.client端:
clientform上放clientdateset,Dcomconnection,dbgrid各一,在Dcomconnection的host中填上server端的机器名,把server端的
servername和serverGUID拷贝过来,再在clientdateset 的privoder 中选择
datasetprovider,remoteserve中选择Tdcomconnection,active选择为ture,
把dbgrid的dataset设为clientdateset,数据即可在client端显示出来。