读书人

取最大序号时取错找不出是啥有关问题

发布时间: 2012-02-24 16:30:38 作者: rapoo

取最大序号时取错,找不出是啥问题,大家帮看看
sqlserver库,BCB6,代码如下,看日志里这个操作员一分钟存储了4次,但是存进去的序号是同一个

Form0->ADOConnection1->BeginTrans() ;
try
{

Query3->Close() ;
Query3->SQL->Clear() ;
Query3->SQL->Add(" select max(id) as xh from bills");
Query3->Open() ;
mid=IntToStr(Query3->FieldByName("xh")->AsInteger+1);

Query3->Close() ;
Query3->SQL->Clear() ;
Query3->SQL->Add("insert into bills values ('"+user+"','存储',getdate(),'"+mid+"' )");
Query3->ExecSQL() ;
Form0->ADOConnection1->CommitTrans() ;
}
catch(Exception &e)
{
Form0->ADOConnection1->RollbackTrans() ;
Application->MessageBoxA("存储失败,请重试","警示窗口",48);
}

=======================================================================
管理员 存储 2010-05-27 18:11:20 96028
管理员 存储 2010-05-27 18:11:33 96028
管理员 存储 2010-05-27 18:11:58 96028
管理员 存储 2010-05-27 18:18:08 96028




[解决办法]
从你提供的代码看,出现这种情况是可能的,如果是多用户说不定还有相同的时间出现
[解决办法]
如果是多用户同时操作的话
建议用自增的字段 不要自己去添加
[解决办法]
劝你不要用max()取编号了
多人同时操作
问题多
[解决办法]
读之前锁一下子吧。

读书人网 >C++ Builder

热点推荐