在数据库中,所谓事务是指一组逻辑操作单元,使数据从一种状态变换到另一种状态。为确保数据库中数据的一致性,数据的操纵应当是离散的成组的逻辑单元:当它全部完成时,数据的一致性可以保持,而当这个单元中的一部分操作失败,整个事务应全部视为错误,所有从起始点以后的操作应全部回退到开始状态。
----对事务的操作是这样进行的:先定义开始一个事务,然后对数据作修改操作,这时如果提交(COMMIT),这些修改就永久地保存下来,如果回退(ROLLBACK),数据库管理系统将放弃您所作的所有修改而回到开始事务时的状态。此外有些数据库支持事务的"存储点(savepoint)这一概念:即在一个事务进程中任意一点您都可以进行当前状态的存储,回退时只是回到你所设定的存储点,而不必退回全部的事务。如果您的事务可以分成几组对数据库的修改,那就可以设置多个存储点,根据需要您可以回退到任意一个存储点,而不使所有事务的修改数据全部丢失。
----正确地管理事务可以保证数据的完整性,当您所做的工作全部完成和得到确认之前,没有任何数据物理地写进数据库。让我们来看这样一个实例,我们有这样一个银行应用系统,前台使用者作出将储户甲的一百元存款划归储户乙帐下的操作;在后台的数据库中,这两个客户的记录分储在两张表中,当使用者在屏幕上作出如上操作时,在后台需要对两张表进行修改。如果在数据库中对甲用户存款余款作减去一百元修改后,对乙用户加一百元的操作修改却失败时,前一张表也必须回到修改前的状态,否则数据库的内容不统一,甲储户白白损失一百元,信息必然是不正确的。因此进行事务管理是必须的。
----传统地,我们认为一个事务包括了对一个或多个表的修改,而随着分布式数据库和数据仓库的发展,事务可能包括了对一个或多个数据库的修改。在上例中甲乙两用户就可能是异地用户,信息分储在不同地域的不同数据库中,上述的一个事务就涉及到了对不同数据库的操作。
在窗体上放置4个按钮,分别为“第一个” 、“上一个” 、“下一个” 、“最后一个”,当单击相应的按钮时,就会把光标定位在相应的数据记录上面。这里用了数据窗口控件的3个函数,分别是Scrolltorow()、Scrollpriorrow()、和Scrollnextrow()。
Scrolltorow()函数的功能是把指定的行作为当前记录。Scrolltorow()函数的语法格式为:dwname. Scrolltorow(row)。其中,dwname是数据窗口的控件名,row是指定的行号。当row为0或1时,移动光标到第一条记录;当row是2时,移动光标到第二条记录;当row大于或等于记录总数时,移动光标到最后一条记录。
Scrollpriorrow()函数的功能是把当前行的上一条记录(如果存在)作为当前记录。Scrollpriorrow()函数的语法格式为:dwname. Scrollpriorrow()
其中,dwname是数据窗口控件名。如果当前行是第三条记录,则执行完刚函数后第二条记录成为当前记录。
Scrollnextrow()函数的功能是把当前行的下一条记录(如果存在)作为当前记录。Scrollnextrow()函数的语法格式为:dwname. Scrollnextrow()。其中,dwname是数据窗口的控件名。如果当前行是第三条记录,则执行完该函数后第四条记录成为当前记录。
4.5.3 库存报表设计
1.实现目标
程序启动后,调用主菜单“库房管理”下的“库存报表”窗口。“库存报表”窗口主要实现如下功能:
可按照不同条件查询库存信息。
完成预览及打印库存报表。
2.实现过程
1)在日用品管理系统应用程序中,添加一个窗体,命名为kcbb_win。
2) 在窗体上添加1个StaticText控件、1个GroupBox控件、1个DropDownListBox控件、1个DataWindow控件和4个CommandButton控件。
3)单击数据窗口控件 dw_1,单击属性栏中DataObject右侧的按钮,在弹出的对话框中选择数据窗口对象 kc_data,使其绑定在数据窗口控件 dw_1上。
4.6 销售管理
2. 实现过程
1)在日用品管理系统应用程序中,添加一个窗体,命名为kcpd_win。
2)在窗体中添加1个GroupBox控件、1个DataWindow控件和2个CommandButton控件。
3)单击数据窗口控件 dw_1,单击属性栏中DataObject右侧的按钮,在弹出的对话框中选择数据窗口对象 kc_data,使其绑定在数据窗口控件 dw_1上。
程序代码见附录程序6