关于APPSERVER的方法调用和传递(200分赠高手)(200分)

  • 主题发起人 主题发起人 kinn_liu
  • 开始时间 开始时间
K

kinn_liu

Unregistered / Unconfirmed
GUEST, unregistred user!
环境:Window2000,delphi5.0,sqlserver2000
目的:通过在Client端传送Sql,控制服务器端返回的结果集
问题:
1, 定义了一个服务器端方法setquery(BSTR SQL);编码如下
procedure TDCSInternetServer.setquery(const sql: WideString);
begin
Query1.Active := false;
Query1.SQL.clear;
Query1.SQL.Add(sql);
Query1.Active := true;
//showmessage(sql);
end;
2,Client端调用该方法,编码如下
procedure TForm1.Button1Click(Sender: TObject);
var
a : widestring;
begin
a:= 'select * from Bank_tbl';
DCOMConnection1.AppServer.setquery(a);
DCOMConnection1.Connected := true;
ClientDataSet1.Active := true;
DataSource1.Enabled := false;
DataSource1.Enabled := true;
end;
大家可以从此看出我的Client就只有简单的几个控件:DComConnection,ClientDataSet
DataSource,Dbgrid。服务器调用没问题,因为服务器端可以Showmessage.
但我Client端执行这段代码后,Dbgrid中的内容没变,为什么呀!!!
 
加入一条clientdataset1.Refresh
 
远程调用最好用OLEVARIANT作为参数。
 
可以直接用ClientDataSet.CommandText := 'select * from table';
这样用起来比较方便, 从上边的代码看 代码的顺序有些问题! 如果在有问题我也没有什么办法了!
1。 DCOMConnection1.AppServer.setquery(a);
1。 DCOMConnection1.Connected := true;
2。 DCOMConnection1.Connected := true;
2。 DCOMConnection1.AppServer.setquery(a);
3。 ClientDataSet1.Active := true;
改为 3。 DataSource1.DataSet := ClientDataSet;
4。 DataSource1.Enabled := false;
4。 ClientDataSet.Active := True;
5。 DataSource1.Enabled := true;
 
最好采用函数机制方式,参数如上兄弟采用OLEVARIANT好些
 
建议先把dcomconnection 联上,在设计期先active看看能否取得数据如果能的话证明方法和
服务器端的服务都没有问题.
剩下的就是clientdataset联接的问题了.clientdataset联接要先使用其active方法这样,dcomconnection自动联接,
不需要再写代码.
 
参数的传送要在应用服务器程序中的type library窗口中建立一个method。把你的参数类型设置好。
应用服务器才能接收得到。
 
呵呵,实在对不起大家,我调试时发现,现在问题不是出在调用上,而是出在DBgrid上。
DBgrid的列名没有刷新,而数据却刷新了,不知道怎么回事?
 
诸位大虾,问题我自己搞定了,小儿科的事儿,没想到自己这么面,呵呵
谢谢各位倾力相助,平均分。
 
后退
顶部