关于三层多用户提交数据问题,高手进来救人呀~~(100分)

  • 主题发起人 主题发起人 firstlove
  • 开始时间 开始时间
F

firstlove

Unregistered / Unconfirmed
GUEST, unregistred user!
有两个客户每个客户创建了1000条记录,然后同时更新~
后更新的一个用户会提示该条记录会锁,我采用-1的形式更新的,所以最后一个用户的前几十条记录没有完成更新工作,而后900多条记录的顺利完成更新工作,
我服务器采用muliple instancet 和线程采用aparment 和free都不成功~~
为什么服务器不能同时为两个客户实现插入功能?如果是我的设计有问题,那如果实现?
 
简单的做法就是把你的那张表的主键设置为自增长字段,更新时数据库来更新这个字段你不用管
 
关注!
奇怪!
有两个客户每个客户创建了1000条记录,然后同时更新~
后更新的一个用户会提示该条记录会锁,我采用-1的形式更新的,所以最后一个用户的前几十条记录没有完成更新工作,而后900多条记录的顺利完成更新工作,
我服务器采用muliple instancet 和线程采用aparment 和free都不成功~~
为什么服务器不能同时为两个客户实现插入功能?如果是我的设计有问题,那如果实现?
 
我有一个字段ID是自动增长字段~~不过我在服务器端把这个字段隐藏了~客户提交时没有提交此字段~~
 
在服务器端你不要隐藏自增长字段
 
将Tdatasetprovide的updatemode设置为upWhereKeyOnly即可。
 
还是不行呀~
 
在中间层上将关键字的pfinkey=true,肯定可以。如果连这都不行
borland早就倒闭了。
 
to glpttlb:
怎么设这个pfinkey:=true;给个例子~
 
Tadodataset加固定字段,字段有属性:providerflags
有源码下:
http://www.playicq.com/dispdocnew.php?id=9104
可以给分了吗
 
我试试,成功完绝对给分~
 
不行,一改了之后在客户插入记录时就会显示 key violoation
 
因为clientdataset根本不能管理你的自增长字段,因为它取得数据后就跟数据库没什么关系了,所以更新时肯定会出现这个问题的,如果你添加数据它会从1往后累加
所以最好是直接用sql来更新
无非就是
clientdataset2.commandtext:='insert into t(aa,bb) values(:aa,:bb)'{此处用字段列表忽略incream字段}
clientdataset1.frist;
while not clientdataset1.eofdo
begin
clientdatset2.parambyname('aa').value:=clientdatset1['aa'];
clientdatset2.parambyname('bb').value:=clientdatset1['bb'];
clientdataset2.excesql;
clientdataset1.next;
end;

当然你也可以将数据集放到中间层去更新
 
问题的关键在于两个客户不能同时进行插入操作,有什么方法可以解决?
 
用我的方法是可以的
 
我可不能明白你的用法~两个clientdataset的连接的remoteserver 分别是什么?
 
一个是用于取数据
一个用于更新数据
remoteserver当然可以是一个
但DataSetProvider1可以有很多个
你的clientdataset是取得接口,这才是它的主要功能
 
for i:=1 to 1000do
begin
clientdataset1.Append;
clientdataset1.FieldByName('user').asstring:=edit1.Text+inttostr(i);
clientdataset1.FieldByName('ip').asstring:='ip'+inttostr(i);
clientdataset1.FieldByName('time').asstring:=datetimetostr(now);
clientdataset1.Post;
end;

我是这样插入的,然后 clientdataset1.ApplyUpdates(-1);
如果两个用户同时 clientdataset1.ApplyUpdates(-1);就会发生错误,为什么呀?
 
可行吗?在用CLIENTDATASET插入时,你的I值和后面的数据表根本没关系,肯定报错
 
可是我已经在服务器端把ID那个字段给隐藏了,所以一个用户提交是正常的,二个就会发生“记录已锁定“之类的错误~
 
后退
顶部