服务器端ADODataSet -> DataSetProvider -> RemObject ->客户端 ClientDataset -> 在cxGrid中显示“记录表”与“人名表、产品名表”连接
后两张名称表都是“ID, 名称”这样的字段,固定不更新;
记录表中是“ID, 日期, 人名ID, 产品名ID, 数量, 备注”这样的字段。
连接后得数据集字段“记录表.ID, 日期, 人名ID, 产品名ID, 数量, 备注, 人名表.名称, 产品名表.名称”。
只要求更新记录表,而名称表不动。之前提过问题http://topic.csdn.net/u/20090226/14/19d4b638-baf3-4a72-bfac-2e0fe8c376c3.html,也看了很多帖子,总结一下,说是要把数据集(ADODataSet)里不更新的字段“人名表.名称, 产品名表.名称”的属性ProviderFlags.pfInWhere,pfInUpdate都设置为False,而客户端对连接后的表的所有字段赋值,然后可以像更新单表一样更新。不知道我这样理解有没有错?如果“记录表”中要更新的字段在“连接表”中也存在,就可以直接在连接表中对其赋值,它会自动保存到“记录表”中?所以我的连接表中本来不要“人名ID, 产品名ID”,但为了能更新,所以也要取过来?别人似乎这样做都成功了,可是我怎么做都是错误,把DataSetProvider.UpdateMode设为upWhereKeyOnly也不行,ADODataSet.CommandText中也是取连接表的语句,只不过真正取到客户端时多了些 where 限制而已。
我到底哪里错了呢?急!救命啊!!
后两张名称表都是“ID, 名称”这样的字段,固定不更新;
记录表中是“ID, 日期, 人名ID, 产品名ID, 数量, 备注”这样的字段。
连接后得数据集字段“记录表.ID, 日期, 人名ID, 产品名ID, 数量, 备注, 人名表.名称, 产品名表.名称”。
只要求更新记录表,而名称表不动。之前提过问题http://topic.csdn.net/u/20090226/14/19d4b638-baf3-4a72-bfac-2e0fe8c376c3.html,也看了很多帖子,总结一下,说是要把数据集(ADODataSet)里不更新的字段“人名表.名称, 产品名表.名称”的属性ProviderFlags.pfInWhere,pfInUpdate都设置为False,而客户端对连接后的表的所有字段赋值,然后可以像更新单表一样更新。不知道我这样理解有没有错?如果“记录表”中要更新的字段在“连接表”中也存在,就可以直接在连接表中对其赋值,它会自动保存到“记录表”中?所以我的连接表中本来不要“人名ID, 产品名ID”,但为了能更新,所以也要取过来?别人似乎这样做都成功了,可是我怎么做都是错误,把DataSetProvider.UpdateMode设为upWhereKeyOnly也不行,ADODataSet.CommandText中也是取连接表的语句,只不过真正取到客户端时多了些 where 限制而已。
我到底哪里错了呢?急!救命啊!!
解决方案 »
- *.pas 与 *.dfm的区别
- 用以下代码实现在DBGRID中支持鼠标滑动轮,但多选记录后滑动,焦点丢失,该怎么解决
- 如何让pagecontrol中的tabsheet没有边框?
- 帮帮忙!!!
- 如何用语言来实现DBNavigator中的“+”、“-”和“ⅴ”的功能?
- UDP通信问题
- 关于ADO数据连接效率的问题,请帮忙.
- 物价飞涨,拜托各位程序员找工作时把工资开高点,别把行情搞坏了,对大家没好处
- 各位玩StarCraft的程序员兄弟,本周末我们相聚263战网,请看:http://www.csdn.net/expert/Topic/47182.shtm
- 简单问题:请问如何去除大段文本中的回车符?
- DBGRID显示数据
- 给窗体菜单 加上背景效果
tableName := '记录表';DataSetProvider 的 [poAllowCommandText] 设为true ,意思是:client可以向ap端傳遞sql語句
2.DataSetProvider.UpdateMode设为upWhereKeyOnly;(另几种也都分别试过了)
3.DataSetProvider 的 [poAllowCommandText] 设为true;//其它条件不同时,这里都true、False试过
3.
procedure TDSService.DSPGetTableName(Sender:TObject;DataSet:TDataSet;var TableName:String);
begin
//DataSet:=ADODataSet1;//放不放都试过了
TableName:='JlTable';//JlTable是记录表名
end;
4.“连接表”的ADODataSet.CommandText默认就是“left join XX on”这样的取表语句;
5.客户端 ClientDataset.ProviderName设为“连接表”所对应的DataSetProvider名;
6.在ClientDataset中对连接表里的所有字段赋值;
7.ApplyUpdates()通过RemObject上传。单张表时只要4、5、6、7这几步就行了,但连接表就是不行。
設定tablename後,
確認DataSetProvider.resovelToDataSet是否為True? 若為true,改為false
设置数据集主键的ProviderFlags中pfInkey的为True
resovelToDataSet默认就是False,没改动。
结果还是不行,完全没变化。是指设置“连接表”中字段“记录表.ID”的属性ProviderFlags:=[pfInUpdate,pfInWhere,pfInKey]吗?
那其它几个也需要更新的字段是否保持默认属性[pfInUpdate,pfInWhere]?(名称表所属字段已经改为[]了)
可是这样做也是一点变化也没有,完全不行。很有可能和这个有关,可是我不太理解,我的名称表分别与好几张不同的记录表相连接的,并且每张名称表都另外单独分配一个ADODataSet,作为一张独立的表读取,用来设置名称用。
是否说的是这个原因?如果是,那这个问题要怎么解决呢?不可能不添加新名称吧?
而且我试着把几个名称表的ADODataSet全断开,只读取一张连接表,却还是老样子,一直是Provider.ApplyUpdates时,说ErrorCount>0了,不能更新。
3楼我那样的步骤肯定有错误,一直到7楼为止各位大大说的再加上去也没有变化,应该是还少了什么。
请从取得连接表后,各数据控件设置属性开始,一直到ApplyUpdates(),这中间所有的属性设置、注意事项等,完整的写下来好吗?我用到的控件是:服务器端ADODataSet -> DataSetProvider -> RemObject ->客户端 ClientDataset -> 在cxGrid中显示
显示的是读取的是连接表,我现在只要更新记录表中的数据,但名称表在其它地方有单独读取,有需要时也会添加一下名称的。
数据集主键的ProviderFlags中pfInkey的为True