三层中的数据删除、增加、修改问题

zxtyhy 2003-11-28 03:05:57
用ADO,SQLServer2000,DComConection等
数据库中的表有自增字段TheID,是主键
当在客户端,新增一记录并ApplyUpdate时,客户端的该字段与数据库中的不同,
然后再修改、删除该记录,提交时出错!
如何解决?
...全文
25 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiume 2003-12-01
  • 打赏
  • 举报
回复
还有一种方法,自己写方法提交
zxtyhy 2003-11-28
  • 打赏
  • 举报
回复
如何使用锁定?
steventone 2003-11-28
  • 打赏
  • 举报
回复
采用记录锁定
zxtyhy 2003-11-28
  • 打赏
  • 举报
回复
我在Delphi的例子中看到如下代码

if MasterDS.ApplyUpdates(0) = 0 then
MasterDS.Refresh;

行是行,但是不知是否影响效率?
ilang 2003-11-28
  • 打赏
  • 举报
回复
或者你在设计时就添加你需要的字段,
然后设置该字段的ProviderFlags属性看看
这个问题曾经弄的我很头大,时间太久了,只记得思路是这样解决的
另外做为主键的那个字段,你不一定要让它自增,也可自己多写几行代码
给它一个值
zxtyhy 2003-11-28
  • 打赏
  • 举报
回复
就是自增字段的事,但是自增字段不能去掉啊,否则没有合适的主键了
ilang 2003-11-28
  • 打赏
  • 举报
回复
你试一下去掉自增字段,看是否是它的原因,如果不是,我也不清楚了
zxtyhy 2003-11-28
  • 打赏
  • 举报
回复
谢谢,
但是还是不行啊!
ilang 2003-11-28
  • 打赏
  • 举报
回复
可在连接ADO组件的TDataSetProvider (是用它连接的吗?)的BeforeApplyUpdates
事件中进行处理

var
I: Integer;
begin
with (Sender as TDataSetProvider).DataSet do
begin
for I := 0 to FieldCount-1 do
begin
with Fields[I] do
begin
if (pfInWhere in Providerflags) then
ProviderFlags := ProviderFlags + [pfInKey];
end;
end;
end;
end;
ilang 2003-11-28
  • 打赏
  • 举报
回复
是的 正如你所说的 这是另一种选择:
可试试在字段的ProviderFlags属性中加入pfInKey
稍等 我写一段代码
ilang 2003-11-28
  • 打赏
  • 举报
回复
去年的时候和别人讨论过这样的一个问题,不知道你的情况是否一样,
刚才找了一下,我去年的那个帖子已经打不开了!!这个破CSDN!!!
大致说明一下,你可以试试看
会导致这种错误的原因很可能就是数据库中的自增字段引起的,因为
自增字段的存在,你提交的记录和到数据库中的记录会不一样,所以无法定位到,就会
出现错误,比较彻底的方法是去掉自增字段
zxtyhy 2003-11-28
  • 打赏
  • 举报
回复
怎样刷新?应只刷新增加的字段吧
用providerflag设置行吗?
zxtyhy 2003-11-28
  • 打赏
  • 举报
回复
错误信息:记录被其他用户修改
soundbug 2003-11-28
  • 打赏
  • 举报
回复
错误代码帖出来看看
simonzone 2003-11-28
  • 打赏
  • 举报
回复
刷新记录.
使客户端的数据与服务器同步.
ilang 2003-11-28
  • 打赏
  • 举报
回复
出错信息?

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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