option ***pare database
'本示例演示 access 中的 transaction 語句如何使用
'請將下列** copy 到乙個新建的「模組」中
'按 f5 檢視執行效果
'本示例假定「表1」和「表2」在資料關係上有聯絡,
'在「表1」資料被刪除後,必須在「表2」新增一行記錄,
'如果新增記錄不成功,則「表1」的資料不能被刪除
sub transactiontest1()
'有錯誤**時用rollback transaction回滾保證資料完整性
'以下**新增一些演示資料到 表1 中
addvalues
dim strsql as string
strsql = "delete from 表1"
on error resume next
currentproject.connection.execute "begin transaction"
currentproject.connection.execute strsql
'注意,由於「編號」欄位是「自動編號」型別,不允許人為新增資料,
'因此以下這句sql語句會產生乙個錯誤
strsql = "insert into 表2 (編號) values('2')"
currentproject.connection.execute strsql
if err <> 0 then
debug.print err.number & "->" & err.description
currentproject.connection.execute "rollback transaction"
else
currentproject.connection.execute "***mit transaction"
end if
debug.print "「表1」的記錄數量為:"; dcount("*", "表1") & _
"。注意:「表1」的記錄" & _
iif(dcount("*", "表1") = 0, "已經被刪除", "未被刪除")
end sub
sub transactiontest2()
'沒有錯誤**時用***mit transaction結束任務
'以下**新增一些演示資料到 表1 中
addvalues
dim strsql as string
strsql = "delete from 表1"
on error resume next
currentproject.connection.execute "begin transaction"
currentproject.connection.execute strsql
'與 transactiontest1 比較,本行sql **是正確的。
strsql = "insert into 表2 ([log]) values('已經在" & now() & "成功刪除表1資料')"
currentproject.connection.execute strsql
if err <> 0 then
debug.print err.number & "->" & err.description
currentproject.connection.execute "rollback transaction"
else
currentproject.connection.execute "***mit transaction"
end if
debug.print "「表1」的記錄數量為:"; dcount("*", "表1") & _
"。注意:「表1」的記錄" & _
iif(dcount("*", "表1") = 0, "已經被刪除", "未被刪除")
end sub
sub transactiontest3()
'沒有事務處理機制的保證,資料完整性會被破壞
'以下**新增一些演示資料到 表1 中
addvalues
dim strsql as string
strsql = "delete from 表1"
on error resume next
currentproject.connection.execute strsql
'注意,由於「編號」欄位是「自動編號」型別,不允許人為新增資料,
'因此以下這句sql語句會產生乙個錯誤
strsql = "insert into 表2 (編號) values('2')"
currentproject.connection.execute strsql
if err <> 0 then
debug.print err.number & "->" & err.description
end if
debug.print "「表1」的記錄數量為:"; dcount("*", "表1") & _
"。注意:「表1」的記錄" & _
iif(dcount("*", "表1") = 0, "已經被刪除", "未被刪除")
end sub
'以下兩個過程用於為演示做準備工作,如果你是在乙個新的資料庫中執行本示例,
'請先執行以下兩個過程。
sub createtable()
'以下**在你的資料庫中新建兩個表,準備用於演示
dim strsql as string
strsql = "create table 表1(編號 autoincrement(1,1),start_date text(50)) "
currentproject.connection.execute strsql
strsql = "create table 表2(編號 autoincrement(1,1),[log] text(50)) "
currentproject.connection.execute strsql
end sub
sub addvalues()
'以下**新增一些演示資料到「表1」中
dim strsql as string
strsql = "insert into 表1(start_date) values('aaa')"
currentproject.connection.execute strsql
strsql = "insert into 表1(start_date) values('bbb')"
currentproject.connection.execute strsql
strsql = "insert into 表1(start_date) values('ccc')"
currentproject.connection.execute strsql
strsql = "insert into 表1(start_date) values('ddd')"
currentproject.connection.execute strsql
strsql = "insert into 表1(start_date) values('eee')"
currentproject.connection.execute strsql
strsql = "insert into 表1(start_date) values('fff')"
currentproject.connection.execute strsql
end sub
SQL事務回滾
ben begin transaction 開始乙個事務 commit transaction 提交事務 rollback transaction 回滾事務。其中commit transaction 與rollback transaction 都必須有對應的begin transaction 才能正...
SQL 事物回滾
第一種 declare ierrorcount int set ierrorcount 0 begin tran tran1 insert into t1 id,c1 values 1,1 set ierrorcount ierrorcount error insert into t1 id,c1 ...
SQL 事務回滾
事務 transaction 是併發控制的單位,是使用者定義的乙個操作序列。這些操作要麼都做,要麼都不做,是乙個不可分割的工作單位。通過事務,sql server能將邏輯相關的一組操作繫結在一起,以便伺服器保持資料的完整性 1.建立表 create table tuser usercode varc...