求解 关于DataSet数据操作的问题 急!!

gouxiaoyu 2010-01-27 10:02:42
有数据集一个cdsView ,包含字段: PartCode_ CusSup_
要求 PartCode_ + CusSup_ 可以重复出现在cdsView数据集里面,但是当出现重复数据的时候要提示信息
“PartCode_ + CusSup_ 已存在,请注意!”,只提示信息而已 但数据集操作继续

现存在数据: PartCode_ CusSup_ (未保存到数据库,只在数据集cdsView中)
A001 C001
A002 C001

再对数据集新增一行数据,CuSup_默认等于 C001
对新增的数据行 PartCode_字段进行开窗选择,假设我开窗选择后得到返回值也是 A001

这时我需要检查 是否有重复数据
1.先检查数据库是否存在 A001 + C001 的数据,
通过SQL语句 Select * from 表名 where PartCode_='A001' and CusSup_='C001'

2.再检查当前数据集是否存在 A001 + C001 ,
采用cdsView.Locate('PartCode_;CusSup_', VarArrayOf(['A001', cdsView.FieldByName('CusSup_').AsString]),[])
这时通过定位找到数据集里已存在这条数据,即提示信息:A001 + C001 已存在,请注意!”
然后操作继续,我应该把返回值赋给我刚才操作的行
cdsView.Edit;
cdsView.FieldByName('PartCode_').AsString := 'A001';
这时我却发现cdsView.Edit;所编辑的行不是我刚才操作的那一行了,而是被cdsView.Locate定位到了第一行

不要说把cdsView移动到最后一行,不行! 如果我是在cdsView的中间一行进行开窗的 那么这个做法也是错误的


有没有其他检查数据集数据的办法 能不让数据集当前的指向改变?

求解
...全文
57 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
gouxiaoyu 2010-01-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 starluck 的回复:]
引用 1 楼 gouxiaoyu 的回复:
或者还是采用Locate方法来检查,但是要让数据集指向上一次停留的那一行


cds.getBookMark 查完之后. 再 goto 过去也行.
[/Quote]
我采用了这个办法,可以实现我要的效果!
感谢starluck
starluck 2010-01-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 gouxiaoyu 的回复:]
或者还是采用Locate方法来检查,但是要让数据集指向上一次停留的那一行
[/Quote]

cds.getBookMark 查完之后. 再 goto 过去也行.
starluck 2010-01-27
  • 打赏
  • 举报
回复
[Quote=引用楼主 gouxiaoyu 的回复:]
有数据集一个cdsView ,包含字段: PartCode_ CusSup_ 
要求 PartCode_ + CusSup_ 可以重复出现在cdsView数据集里面,但是当出现重复数据的时候要提示信息
“PartCode_ + CusSup_ 已存在,请注意!”,只提示信息而已 但数据集操作继续

现存在数据:    PartCode_  CusSup_    (未保存到数据库,只在数据集cdsView中)
                  A001        C001
                  A002        C001

再对数据集新增一行数据,CuSup_默认等于 C001
对新增的数据行 PartCode_字段进行开窗选择,假设我开窗选择后得到返回值也是 A001

这时我需要检查 是否有重复数据
1.先检查数据库是否存在 A001 + C001 的数据,
通过SQL语句 Select * from 表名 where PartCode_='A001' and CusSup_='C001'

2.再检查当前数据集是否存在 A001 + C001 ,
采用cdsView.Locate('PartCode_;CusSup_', VarArrayOf(['A001', cdsView.FieldByName('CusSup_').AsString]),[])
这时通过定位找到数据集里已存在这条数据,即提示信息:A001 + C001 已存在,请注意!”
然后操作继续,我应该把返回值赋给我刚才操作的行
cdsView.Edit;
cdsView.FieldByName('PartCode_').AsString := 'A001';
这时我却发现cdsView.Edit;所编辑的行不是我刚才操作的那一行了,而是被cdsView.Locate定位到了第一行

不要说把cdsView移动到最后一行,不行! 如果我是在cdsView的中间一行进行开窗的 那么这个做法也是错误的


有没有其他检查数据集数据的办法 能不让数据集当前的指向改变?

求解
[/Quote]

CDS.Clone 出来处理.
gouxiaoyu 2010-01-27
  • 打赏
  • 举报
回复
或者还是采用Locate方法来检查,但是要让数据集指向上一次停留的那一行

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧