L
lssgj
Unregistered / Unconfirmed
GUEST, unregistred user!
我的思路:1客户端传送SQL语句到服务端,在服务端通过DBCLIENTDATASET取得数据,把DBCLIENTDATASET用SaveToStream使用RealThinClient的DelphiDataSetToRtc函数也可)后,作为参数传递给客户端;2.客户端再用LoadFromStream取得数据.具体过程是1.服务端使用TRtcFunction控件(名为Getdata)通过其OnExecute过程取得数据procedure TAppSrv_Module.GetdataFuncExecute(Sender: TRtcConnection; Param: TRtcFunctionInfo; Result: TRtcValue); procedure CanEditField(const readonly: Boolean;cs : TDataSet); var i : Integer; beginvar myStream:TMemoryStream;begin //CDS是一个DBCLIENTDATASET,通过DATASETPROVIDER和SQLQUERY,SQLCONNECTION取得数据 cds.CommandText:=Param.asWideString['QueryCmd']; //doshowsql('开始执行SQL'+chr(13)+chr(10)+cds.CommandText); cds.Close; cds.Open; myStream:=TMemoryStream.Create; CanEditField(false,cds); try cds.SaveToStream(myStream,dfbinary); myStream.Position:=0; Result.asByteStream:=myStream; finally myStream.Free; cds.Close; end;end;2.客户端数据模块中放上TRtcResult控件(名为RtcResultForGetData),这个控件有个过程是onReturn,按RealThinClient的原理,就是从这个过程取得服务端返回的结果.procedure TEM.RtcResultForSaveDataReturn(Sender: TRtcConnection; Data, Result: TRtcValue);begin Result.asByteStream.Position:=0; ClientGetdata.LoadFromStream(Result.asByteStream);end;我原以为以下函数中的Call(RtcResultForGetData或POST后就会马上角发上面这个过程,所以试图通过以下函数,从ClientGetdata(是一个TClientDataSet)取得数据,结果根据跟踪情况看,他总是执行完下面这个过程后才调用procedure TEM.RtcResultForSaveDataReturn(Sender: TRtcConnection; Data, Result: TRtcValue);也就是执行这一句: result:=ClientGetdata.Data 前ClientGetdata.根本没有从服务器取得数据. 如果程序其他地方调用getdata()后还有代码,他仍然是执行完getdata()后再把其后的所有代码执行完才会调用RtcResultForSaveDataReturn过程.不知道 RtcResultForSaveDataReturn究竟是被什么事件触发的,如果能在result:=ClientGetdata.Data;之前触发问题就解决了. 这是什么原因,是不是因为RealThinClient使用了线程的原因?请高手指教,也欢迎有兴趣的朋友共同讨论,我的QQ是532597053,realthinclient的网址是http://www.realthinclient.com,如果需要的,我测试代码也可以发出来.function TEM.getdata(psql: WideString): OleVariant;begin if ConnRemoteServer then begin with RtcClientModule do begin StartCalls; try with Data.NewFunction('getdata') do begin asWideString['QueryCmd']:=psql; end; Call(RtcResultForGetData); finally Post; result:=ClientGetdata.Data; end; end; end;