帮忙提供一个简单的保存思路
本人初次做程序,有关保存机制麻烦赐教。为了将问题说清楚,话可能会多,但是问题一定很简单。问题如下:
我想做一个记录每天消费情况的软件,数据库XF表有几千条数据,每天的消费情况是一条数据,包括日期和当天消费两个字段。打开程序自动读取XF表所有数据,左边是目录树,显示的是年份,月份。在左面目录单击某一个月份,右面列表显示当前月每天的消费数据。现在有这样一个问题,就是比如我在左面目录选择了1月,右面1月2号做了修改,又在左面选择了2月,又在右面2月5号做了修改,选择保存时则修改数据库中1月2号和2月5号两条记录,选择不保存时就全不保存。这个应该怎么实现啊?我的思路是每次打开软件就把XF表中的数据复制到一个临时表比如叫XFLSB的表中,每次在程序中修改时就修改XFLSB中的数据,如果最后选择保存就把XF表中数据清空,再将XFLSB中的数据全部复制到XF表中,但是我觉得这种保存方法不好,因为好几千条数据我只改了两条,却要先删除再复制好几千条,是不是太罗嗦呢?而且好几条数据复制也需要一会时间呢。所以我想就不以循环方式逐条复制数据,直接把XFLSB表复制一下以XF名保存替换掉原来的XF表是不是快好多呢?不知道我这种保存方法好不好,不知道各位高手对于这种类似情况用什么保存方式?如果我的保存方法可取,请告诉我复制,删除,保存ACCESS数据库表的代码怎么写,我网上没找到。比如肯定要先删除XF表,再复制XFLSB表,再以XF名字保存表,这三句代码怎么写?数据库是ACCESS数据库,用ADOConnection1连接的数据库,ADOQuery1,ADOQuery2,ADOQuery3连接表。如果不可取,却能够提供一种好用,快捷的保存方法!!!谢了哦
只能给100分?
[解决办法]
看着眼花。。。能不能简单点
[解决办法]
用事务处理,不需要临时表。
事务处理的好处是,保存时能全部保存修改,取消时能取消所有的修改,而与修改了多少条记录无关
[解决办法]
写了这么多,用事务来控制可以解决
[解决办法]
没那么麻烦,你直接在一个按钮中写多个保存就可以了。
也可以使用Batchupdate是比比较好的选择。
[解决办法]
把ADOQuery的LockType设置成ltBatchOptimistic
[解决办法]
同意楼上
[解决办法]
如果用UpdateBatch处理的话,可以这样:
(假设你修改的是ADOQuery1的数据)
- Delphi(Pascal) code
//打开数据集ADOQuery1后执行如下代码: ADOQuery1.CursorType:=ctKeySet; ADOQuery1.LockType:=ltBatchOptimistic; //保存数据时执行如下代码: ADOQuery1.UpdateBatch(arAll); //不需要保存数据时执行如下代码 ADOQuery1.CancelBatch(arAll);
[解决办法]
如果使用事务处理的话,可以像这样:
- Delphi(Pascal) code
//打开数据集ADOQuery1后执行如下代码: ADOQuery1.Connection.BeginTrans; //保存数据时执行如下代码: ADOQuery1.Connection.CommitTrans; //不需要保存数据时执行如下代码 ADOQuery1.Connection.RollbackTrans;
[解决办法]
有点晕,
直接按日期
update xxx set xxx=xxx where 日期=xxx
改几条保存几条
不行吗?
[解决办法]
按你这样是罗嗦了点效率还很低,把我的想法和你说说,首先你建立一结构
type
PXF = ^TXF;
TXF = packed record
rq:TDateTime;
xfje:integer;
end;
pxf1:PXF;
然后定义一链表
xfList:TList;
如果你修改数据就用下面语句(变量名自己定)
pxf1.rq:=rq;
pxf1.xfje:=xfje;
保存进链表
xfList.item.add(pxf1);
如果保存就遍历链表
for i:=0 to xfList.count-1 do
//保存进数据库
//更新语句 'update XF set RQ=''' + datetimetostr(pxf1.rq)+ ''',xfje=' + inttostr(pxf1.xfje) + ' where RQ=''' + + datetimetostr(pxf1.rq)+ ''''
你试试吧
[解决办法]
记录修改后的数据的ID ,然后批量修改.
[解决办法]
友情帮顶