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