begin transaction 命令
啟動一個事務處理。僅對資料庫中的表支持事務處理。有關如何在資料庫中創建和增加表的詳細信息,請參閱 CREATE DATABASE 和 ADD TABLE 。
語法
BEGIN TRANSACTION
說明
為了保存所做的修改並終止事務處理,應發出 END TRANSACTION 命令。如果事務處理失敗(如伺服器有故障或工作站有故障,以及沒有提交事務處理就退出 Visual FoxPro),或者用戶發出 ROLLBACK 命令,事務處理中的檔案就恢復成原狀態。
事務處理最深可嵌套五層,如果要進行第六層嵌套,則產生錯誤。
當修改一個資料庫的記錄,而該資料庫又是事務處理的一部分時,網路上的其他用戶在您終止事務處理之前無法訪問(讀或寫)這些記錄。
如果網路上的其他用戶要訪問您已經修改的記錄,就必須等待您終止事務處理。在記錄可用之前,用戶將一直收到“記錄不可用...請等待”的訊息。因此,減小事務處理長度或在其他用戶不需要訪問期間進行事務處理就變得非常重要。
在事務處理期間不支持下列命令和函式:
命令和函式
ADD TABLE DELETE CONNECTION
APPEND PROCEDURES DELETE DATABASE
CLEAR ALL DELETE TRIGGER
CLOSE ALL1 DELETE VIEW
CLOSE DATABASES1 MODIFY CONNECTION
COPY INDEXES MODIFY DATABASE
COPY PROCEDURES MODIFY PROCEDURE
CREATE CONNECTION MODIFY VIEW
CREATE DATABASE REMOVE TABLE
CREATE TRIGGER RENAME TABLE
CREATE VIEW REQUERY( )
CREATE SQL VIEW
1 在事務處理期間執行 CLOSE ALL 命令,則關閉所有打開資料庫中的表,但資料庫仍保持打開狀態;在事務處理期間執行 CLOSE DATABASES 命令,則關閉當前資料庫中的所有表,但資料庫仍保持打開狀態。
下列命令和函式不能傳送給參與事務處理的指定的表: 命令和函式
ALTER TABLE MODIFY STRUCTURE
CREATE TABLE PACK
CURSORSETPROP( ) REINDEX
DELETE TAG TABLEREVERT( )
INDEX ZAP
INSERT
begin transaction 命令示例
在下面示例中,打開資料庫 testdata 的 customer 表,發出 begin transaction 命令來啟動一個事務處理,接著顯示 cust_id 和 company 欄位內容。然後替換 company 欄位內容,再顯示新的平共處company 欄位內容。傳送 rollback 命令來恢復 company 欄位的原來內容,然後再次顯示 cust_id 和 company 欄位的內容,這時的 company 欄位保持原值。
open database (home( ) + 'samples\data\testdata.dbc')
begin transaction
use customer && 僅在 dbc 中支持事務處理
clear
list fields cust_id, company next 20
wait window 'press a key to change the company field'
replace all company with '***' && 更改 company 欄位內容
clear
go top
list fields cust_id, company next 20
wait window 'press a key to restore the company field'
rollback && 恢復欄位的原來內容
clear
go top
list fields cust_id, company next 20
wait window 'press a key to exit'
clear
close all