还是 Ms Sql Server数据更新问题 代码贴于此(50分)

好人

Unregistered / Unconfirmed
GUEST, unregistred user!
线路不好,我上不来,今天来了。

Ms Sql Server数据更新问题

我向Sql server重复写数据(同一记录)时,系统报错
"Couldn't perform the edit because another uer chednged the record."
我不知怎样通知系统我已将数据读回并再次进行合法更新!!!

代码:
DataModule1->CatvDataBase->StartTransaction();
try{
//处理ToDay数据库
DataModule1->TODAYTable->Edit();
DataModule1->TODAYTableTIME_NOW1->AsString=Date();
DataModule1->TODAYTableARNO_COUNT->AsInteger=y_ARNOCou
ntTemp+1;
DataModule1->TODAYTable->Post();
DataModule1->CatvDataBase->Commit();
}
catch(...)
{
DataModule1->CatvDataBase->Rollback();
}

 
如果Post后马上再去Edit同一条记录,可能会发生这样情况,稍稍sleep一会看看.
也许会解决问题.
 
你的 table 要有PRI KEY,然后table.updatemode:=upWhereKeyOnly.

用MS SQL 的SQL TRACE 观察一下你的程序发出的SQL 语句,或者会
发现此问题的结症所在,特别留意 ‘WHERE’后的东东。
 
不知你为何要重复写同一记录?不能一次Edit,Post成功吗?
 
我遇到过这个问题,是edit与post两语句作的怪。wgzhang说的有理,你也可以在
post语句后加上其它无关紧要的数据库操作语句如close,open等试试(只要不影响
你的应用,这是肯定可以的。如果一定需要post后仍指向该记录,可先记下光标,open后跳向它。当然性能是下降了,但可解决问题)。
 
请继续讨论或结束问题
如连不上:
http://202.120.85.61/DELPHIBBS/
 
并没有好的答案,不过是否结束你总发个话呀?
好人6/18/99以后就没来过,等到本月18吧
 
还是用存储过程吧。
 
DataModule1->CatvDataBase->StartTransaction();
try{
//处理ToDay数据库
DataModule1->TODAYTable->Edit();
DataModule1->TODAYTableTIME_NOW1->AsString=Date();
DataModule1->TODAYTableARNO_COUNT->AsInteger=y_ARNOCountTemp+1;
DataModule1->TODAYTable->Post();
DataModule1->CatvDataBase->Commit();
}
catch(...)
{
DataModule1->CatvDataBase->Rollback();
}
DataModule1->TODAYTable->Refresh(); //将数据读回




不过强烈推荐你用Query+UpdateSQL,因为Table的效率实在是低,还经常锁表.
 
我也曾遇到这个问题,

如果用 TQuery 的话,我想将一个已经存在的表中某一个字段按顺序编号,如第一个记录为 1, 第二个记录为 2, 第三个记录为 3, ... 等等, 该如何写?大侠们?
 
多人接受答案了。
 
顶部