请教各位:
    比如输入发票、领料单等单据,我们编程基本不用DBGrid,而用StringGrid,因为:
1、Dbgrid显示数据后,不断开连接的话,总是占着数据库服务器资源,用户不多还可以,用户一多,连接数据库的数目也就相应增加,势必严重消耗服务器资源;StringGrid就没有这问题,从数据库提取数据,循环方式写入单元格中。
2、在Dbgrid上,输数据不能马上检测错误,比如,某一列为关键字,不能重复,输的时候重复了,等提交了,数据库给你返回一串用户不能看懂错误信息,因为Dbgrid在编辑状态下,不能读其单元格数据先进行检测,而要等到提交数据库才能检测(不直接在单元格输,另外弹出界面在Edit或其他编辑控件中输除外);
如果在StringGrid上,就可以先读取进行检测然后在提交数据库。
当然,各有各的缺点,各有各的优点。现在我有这样的问题:
假如我填好了一帐领料单(有多条数据),在提交数据库时可以有两种方法:
1、循环提交给数据库,但是,如果提交了部分,产生了意外错误,那肯定不能全部Rollback;
2、循环提交给数据库,先写入临时表,然后一次性写入正式表,这期间产生错误,肯定能全部Rollback。但是我发现这种方法效率不是很高。
请问,能否把表单StringGrid中的变动过的数据逐行先写入数组,然后再提交数据库,然后在过程中循环写入表中,这样产生错误既能全部Rollback,效率也会提高点。但是,数组怎么传给数据库(SQL Server2000),且Sql中好象没有定义数组的?
谢谢各位指教!

解决方案 »

  1.   

    我们做这个也是用StringGrid
    但我做的多层,在中间层中去RollBack
      

  2.   

    回Cipherliu(孤鹰) :什么“在中间层中去RollBack”,不懂你的意思,麻烦能不能说得详细点,另外,针对我的关键问题,发表一下你的高见。谢谢!
      

  3.   

    这个很麻烦,我的做法是生成数据处理的SQL语句,然后提交这批SQL语句.这个在VB中曾经写过
      

  4.   

    --在VB中的思路是这样的(当然,也可以直接在程序中开启事务,然后逐条执行SQL语句)--处理的存储过程.
    create proc p_process
    @sql ntext
    as
    begin tran
    exec(@sql)
    commit tran
    go--然后在程序中,生成这样的SQL处理语句,比如插入:
    insert 表(字段列表)
    select 值列表1
    union all select 值列表2
    ...将这个字符串赋值给存储过程的参数,并执行存储过程