请教 怎样通过 client/server socket 传送一个数据集.(50分)

  • 主题发起人 主题发起人 vigorw
  • 开始时间 开始时间
V

vigorw

Unregistered / Unconfirmed
GUEST, unregistred user!
大家好,我是一名delphi 初学者,现想请教大家一下,我做的c/s 应用程序,
使用client/server socket 连接的,
在查询网络数据库的时候,我的方法是
把sql语句通过sendtext发送到server
但是server上的查询结果数据集该怎么传送回来呢?
(因为本人对delphi还不熟,请大家说详细点.谢谢.)
 
好象不是这样的呀,你要用BDE或者ODBC和SQL SERVER连接的呀,你用CLIENT
SOCKET是达不到要求的,用远端的数据传输控件吧,具体可以看看数据库的内容

ETC,我也不是很熟练,希望各位大虾指教呀,vigorw共同进步呀
 
要传回来还是有办法的.
server上接受到Client端传来的SQL语句后,用一个Query执行之.
然后用一个BatchMove控件,将mode属性改为batCopy,将其
Source设为Query,Destination属性设为另外一个Table.该table
用本地库(通过别名体现.比如建一个paradox的别名),TableName随便设一个名字,
然后Batchmove.Execute.将query查出的结果拷贝到相应的目录下.
然后你将这个文件通过socket传到client端,不就成功了.
当然,我们并不提倡这种方法.通常是用media页上的控件.或者简单一点直接
在客户端连服务器上的数据库.
 
如果是局域网的话,不妨直接用sql的tcpip方式链接数据库,这样
就和在本地一样,只是要注意不要用select * from,要什么数据
就选什么数据,最好只把id传回来,或者数据库支持的话使用键集
方式sql数据。做个比方比如ms sql 数据库服务器名用ip就可以了
 
不知道你的database是什么?如果是Sybase,我建议你用CT_Library或嵌入C来完成你的功能,不然就比较麻烦了!
 
要把数据传回来,要用到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端显示出来。
 
请把实现这种功能的几种方法总结一下,@!#
 
多人接受答案了。
 
后退
顶部