因为手头没有sqlserver的环境(也不想有msde),所以先用access+ado单机做好,再迁移到sql server。
其中对主数据表main操作时,用到了临时表temp,各种对main中数据的操作(有些是无法通过一条sql语句能完成的,只能先导到临时表中)都是先导到temp中再做的。
其他还有统计时也是先写到一个统计结果表temp_tj中的。
这两个临时表都是事先建立好的,用的时候根据需要清空或者导入数据,实际运行效果都很好。
但在要迁移到sql server时,我发觉有两个问题:
1、如果多个用户同时操作时,不论是做批量导入还是批量删除,都需要对临时表temp进行清空和注入数据,这样势必会造成temp表中数据混乱;
2、相应的,对主表main的操作也存在多个用户同时操作时的混乱问题;
我不知道后台数据库系统sql server能不能自动处理这些问题,也想请大家帮忙看看,提出高见!

解决方案 »

  1.   

    如果临时表都放在一个temp数据库中,其它数据放在main数据库中,那在用adoquery将main数据库中的某个表数据提取一部分到temp数据库中的某个临时表时,adoquery的sql语句中就会涉及到两个不同数据库的表,执行时就会报错,说找不到temp数据库中的表,因为datamodule中缺省的数据库是main,这样的问题怎么解决?
      

  2.   

    我们也遇见过这样的问题,解决方法是: 根据登陆的用户名称动态在程序中建立自己的临时表:
    比如:
      sqls[6] := 'if exists (select * from dbo.sysobjects where id = object_id(N''[dbo].['''+user+''']'')'+
               ' and OBJECTPROPERTY(id, N''IsUserTable'') = 1) drop table [dbo].['''+user+''']'+
               'CREATE TABLE [dbo].['''+user+'''] ('+
               '  [id] [int] IDENTITY  NOT NULL ,'+
               '  [iPartID] [int] NULL ,'+
               '  [sPartName] [varchar] (30) NULL ,'+
               '  [sPartCode] [varchar] (18) NULL ,'+
               ' [fSaleQty] [float] null, '+
               ' [fNCasing] [float]  null, '+
               ' [fNToast] [float] null, '+
               ' [fSStockQty] [float] null, '+
               ' [fStockQty] [float] null, '+
               ' [fTaskQty] [float] null'+
               ')ON [PRIMARY]';