本人初次做程序,有关保存机制麻烦赐教。为了将问题说清楚,话可能会多,但是问题一定很简单。问题如下:
我想做一个记录每天消费情况的软件,数据库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分?
我想做一个记录每天消费情况的软件,数据库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分?
解决方案 »
- sendmssage LVM_DELETEITEM为什么一次删除两条记录
- 急!关于通过网关发短信
- 请教各位~
- 谁用过armadillo3.01?
- 用一个SQL语句把一个表里的两个字段值(FLOAT)型互换,
- 如何获得窗体的Rect位置??????????????????
- 怎么用PrintDBGridEh控件实现横向打印?
- MIDLETPascal 有谁知道怎么使用,或者到哪里有这方面的资料
- 请大家推荐几个DELPHI网络编程的中文网站,先谢谢大家了!!
- 请问array of string 和array of const之间如何转换?
- delphi 视频加解密播放问题
- 如何给DBGrid某行某列赋值
也可以使用Batchupdate是比比较好的选择。
//打开数据集ADOQuery1后执行如下代码:
ADOQuery1.CursorType:=ctKeySet;
ADOQuery1.LockType:=ltBatchOptimistic; //保存数据时执行如下代码:
ADOQuery1.UpdateBatch(arAll); //不需要保存数据时执行如下代码
ADOQuery1.CancelBatch(arAll);
//打开数据集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)+ ''''
你试试吧
我的ADOquery1.update语句是写在表格控件的edited事件上的,如果我编辑过好多条数据,那么这个edited事件肯定要调用好多次的。而按你所说,ADOQuery1.Connection.CommitTrans和ADOQuery1.Connection.RollbackTrans;
语句要写在是否保存窗口的“是”和“否”按钮的单击事件中,这样行吗?