在dataModule 中放置了TDCOMConnection控件和TSocketConnection控件,设置好ComputerName,ServerName,ServerGUID和Address,Port,ServerName,连接数据库服务器,TClientDataSet的remoteserver连接好了TSocketConnection;现在在应用程序中实现交易,交易表为sale;我每次是先从表中查询出最大id值,然后新插入的记录为该ID值加1;问题是多机操作的时候出现了两个ID值一样的记录,请问怎么解决这问题?

解决方案 »

  1.   

    Lock Sale表
    查出最大ID,并写入
    Unlock Sale表
      

  2.   

    个人建议,要么对ID使用自动编号,要么采用一个固定的ID表,这样子就省去了插入数据时对Sale不必要的Lock,以提高性能。
      

  3.   

    1.SQLServer? oracle的话用before inset trigger就可以
    数据量不是超级海量的且字段不多的情况下,可以考虑instead of trigger2.最理想还是自动ID3.锁表的话,系统并发量会很低
      

  4.   

    sql server 数据库和delphi开发应用程序怎么用事物啊?
      

  5.   

    开始事务 BeginTrans;
    提交事务 CommitTrans;
    回滚事务 RollbackTrans;
      

  6.   

    我在服务器端用了一个TDatabase控件,设置params来连接sql数据库,然后用这个控件的StartTransaction,Commit;Rollback;来实现的;这样是不是说每个客户端都是通过TDatabase里设置的数据库用户来登录啊?不知道这样会不会有问题?