Delphi 6 三层结构的问题请高手进来看看.(有分送)(100分)

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

KVLee

Unregistered / Unconfirmed
GUEST, unregistred user!
在中间层定义了主从两个表(ADODataSet)(ADO + SQL 2000).
在Client,
用SocketConnect连接!
在从表中的DatasetField指向主表的表名
显示能够正常显示,但修改后,ApplyUpdate(-1)时出现
Cannot perform this operation on a closed dataset!
(此Dataset指的是中间层的从表)
究竟是怎么回事呢?
 
看李维的书
 
怎么没人来回答呀?
 
可能是在服务器端的接口设置上:DataSetProvider1的resovletodataset值设为true时,
相关数据集必须保证实在active=true状态。
 
看看你的数据连接是否都正常!
看看运行时候你的远端数据集是否是打开状态!
看看远端数据模块里的DataSetProvider的Option属性是否设置正确!Provider控件的Options属性值是一个集合,用于设置有关打包和传递的选项,像显示哪些字段、允许哪种更新方式等等。
poFetchBlobsOnDemand:表示数据包中不包括BLOB字段。不过,如果客户端的TclientDataSet控件的FetchOnDemand属性设为True,那么客户端将自动地请求这些数据值。否则,客户端应用程序必须使用客户数据集的FetchBlobs方法来检索BOLB数据。
poFetchDetailsOnDemand:且Provider表示主/明细表中的主表,那么嵌套表中的字段将不会放入包中。除非客户端的TclientDataSet控件的FetchOnDemand属性为True或者显式调用FetchDetails方法。
poIncFieldProps:表示数据包中将包含下列字段属性:Alignment、MinValue、DisplayLabel、DisplayWidth、Visible、DidplayFormat、MaxValue、EditFormat、Currency、EditMask、DisplayValues等。
poCascadeDeletes:且Provider表示主/明细表中的主表,那么当主表中的记录被删除时,明细表中相应的记录将自动地被删除。要使用这个选项,数据库服务器需要建立参照完整性。
poCascadeUpdates:且Provider表示主/明细表中的主表,那么当主表中关键字段的值改变时,明细表中相应的记录将自动地被更新。要使用这个选项,数据库服务器需要建立参照完整性。
poReadOnly:表示不允许客户端数据集向Provider申请更新数据。
poAllowMultiRecordUpdates:表示一个单一的更新将同时更新下层的许多表的记录。这有可能是通过触发、参照完整性或自定义的SQL语句来实现的。
poDisableEdits:表示不允许客户端更新已经存在的数据值,否则,将触发异常。
poDisableInserts:表示不允许客户端插入一个新的记录,否则,将触发异常。
poNoReset:表示在提供数据前,不允许客户端将光标指定在第一条记录。
poAutoRefresh:表示Provider将用当前的记录刷新客户端的数据集,而不管它是否已经申请更新。
poPropogateChanges:表示服务器对记录的更新将返回给客户端并反映到客户端数据集中。
poAllowCommandText:表示客户端可以重载相关数据集的SQL语句、表的名字或存储过程。
看了这个应该对你有点帮助!
 
年轻人!难道你不会调试一下你的这个中间层程序吗吗?
 
这应该是delphi6的一个Bug(我用BCB5时没遇到这个问题,当用BCB6时也遇到这个问题了)。
解决办法,只需在datasetprovider的beforeapplyupdates事件里把细表数据集Open就好了,
例如:(注:我用的是BCB6)
void __fastcall TrdmThirdServer::dspSLOrderMBeforeApplyUpdates(
TObject *Sender, OleVariant &OwnerData)
{
if (!dstSLOrderD->Active) dstSLOrderD->Open();
}
 
1、请升级你的ADO
2、请确认你的数据库100%的正确,这点尤其重要
 
当数据集处于Post状态时,也会报这个错。
首先确认你的数据集链接正确,如果你在客户端是用clientdataset链接的话,可如下:
clientdataset1。Edit;
clientdataset1.applyupdata...
 
我也遇到此问题,高手请回答呀!
 
接受答案了.
 
后退
顶部