DATASNAP客户端共用一个服务端DataSetProvider问题(100)

  • 主题发起人 主题发起人 lsz100
  • 开始时间 开始时间
L

lsz100

Unregistered / Unconfirmed
GUEST, unregistred user!
服务端 DBX+DataSetProvider 客户端 SCK+CLIENTDATASET我的客户端上有多个CLIENTDATASET 共用服务端的一个DATASETPROVIDER 多个CLIENTDATASET在查询时没有问题当我设了其中的一个CLIENTDATASET的packetrecord=100 这时多个CLIENTDATASET查询就报错了,说是服务端数据集是OPEN的
 
请大家讲讲吧
 
试试设置TClientDataSet.FetchOnDemand := False;当需要新记录时,手动GetNextPacket。{This example shows how to use the BeforeGetRecords eventhandler (a TRemoteEventType value) to send the providerinformation it needs for incremental data fetching. Beforefetching the next data packet, the client dataset packagesup the key value of the last record so that the providerknows where to begin the next data packet. It also sendssome application-specific information, which is stored inMemo1. This method is used to pass the sql statement and thevalue of the first field for the last record to the server sothat the server can return the correct records. The completeproject using this code example is inDemos/DelphiWin32/VCLWin32/MIDAS/Pooler.}procedure TForm1.ClientDataSet1BeforeGetRecords(Sender: TObject; var OwnerData: OleVariant);var LastValue: OleVariant; CDSClone: TClientDataSet;begin if ClientDataSet1.Active then begin CDSClone := TClientDataSet.Create(Form1); try CDSClone.CloneCursor(ClientDataSet1, True); { turn off FetchOnDemand so that the clone only fetches the last LOCAL record } CDSClone.FetchOnDemand := False; CDSClone.Last; LastValue := CDSClone.Fields[0].AsString; CDSClone.Close; finally CDSClone.Free; end; end else LastValue := NULL; OwnerData := VarArrayOf([Memo1.Lines.Text, LastValue]);end;procedure TForm1.Button2Click(Sender: TObject);begin ClientDataSet1.PacketRecords := StrToInt(Edit1.Text); ClientDataSet1.GetNextPacket;end;
 
不行的ClientDataSet1.PacketRecords 有值就是说服务端就是有状态的 服务端的DSP就不能共用
 
是的.只有无状态才可以这么用.
 
要无状态那还不简单吗?每次客户端访问数据后,都可以把连接手动关掉,再次访问时还不需要手动打开连接(因为连接会自动再次建立)。设置了packetrecord=100也没有问题,但需要在OnBeforeGetRecords事件中先传入从哪儿开始取下100条记录的信息。这样,就可以在中间层通用一个Provider了。不过,话又说回来,多几个DATASETPROVIDER要死人啊?中间层占资源是数据模块对象及与数据库的连接,不是对象中的几个provider对象,provider主要是代码,没有什么数据的,它们不占资源,
 
是不是模式选错了,用支持多线程的DataModule?
 
后退
顶部