|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
上面我们说了DML的闪回方案。但对于DDL却无能为力,对于大多数的DDL,即使是rowbase格式,二进制日志binlog中仍只记录语句本身。对于删表操作,只记录一个语句droptablet。仅凭这句话,无法还原表的数据。语句|实行
docmd.runsql语句实行的操纵查询怎样回滚?
简述:docmd.runsql语句实行的操纵查询怎样回滚?
成绩:
docmd.runsql语句实行的操纵查询怎样回滚?
回覆:
但愿经由过程Docmd.RUNSQL完成事件的回滚(RollBack)操纵
很遗憾的说,Access没法法经由过程Docmd.RUNSQL来完成事件的回觥4蠹乙残碜⒁獾皆Docmd.runsql的语句操纵的匡助中,有一个选项是UseTransaction。这个选项的是用来确认是不是对该语句举行事件性的操纵。假如选择True(默许为True),那末一切的操纵都将被看成是一个独自的原子操纵来对数据库举行操纵;假如选择是False,那末操纵将不会被看成事件(在多用户的情形下大概会呈现DirtyRead)的情形。可是这些事件都是在外部完成的,我们没法显现的经由过程声名commit大概rollback来把持其操纵。
依据我的履历,ACCESS也没法经由过程Docmd.OPENQUERY来完成相似的事件显现操纵。假如人人但愿完成事件的操纵,独一的用法就是经由过程WorkSpaceObject.BeginTrans来完成。在AccessVBA的匡助文件中,人人能够找到以下的示例:
BeginBeginTransVB
Tointegratethiscode
replacethedatasourceandinitialcatalogvalues
intheconnectionstring
PublicSubMain()
OnErrorGoToErrorHandler
recordsetandconnectionvariables
DimCnxnAsADODB.Connection
DimstrCnxnAsString
DimrstTitlesAsADODB.Recordset
DimstrSQLTitlesAsString
recordvariables
DimstrTitleAsString
DimstrMessageAsString
Openconnection
strCnxn="Provider=sqloledb;DataSource=MySqlServer;"&_
"InitialCatalog=Pubs;IntegratedSecurity=SSPI;"
SetCnxn=NewADODB.Connection
Cnxn.OpenstrCnxn
Openrecordsetdynamictoallowforchanges
SetrstTitles=NewADODB.Recordset
strSQLTitles="Titles"
rstTitles.OpenstrSQLTitles,Cnxn,adOpenDynamic,adLockPessimistic,adCmdTable
Cnxn.BeginTrans
Loopthroughrecordsetandpromptuser
tochangethetypeforaspecifiedtitle
rstTitles.MoveFirst
DoUntilrstTitles.EOF
IfTrim(rstTitles!Type)="psychology"Then
strTitle=rstTitles!Title
strMessage="Title:"&strTitle&vbCr&_
"Changetypetoselfhelp?"
Ifyes,changetypeforthespecifiedtitle
IfMsgBox(strMessage,vbYesNo)=vbYesThen
rstTitles!Type="self_help"
rstTitles.Update
EndIf
EndIf
rstTitles.MoveNext
Loop
Promptusertocommitallchangesmade
IfMsgBox("Saveallchanges?",vbYesNo)=vbYesThen
Cnxn.CommitTrans
Else
Cnxn.RollbackTrans
EndIf
Printrecordset
rstTitles.Requery
rstTitles.MoveFirst
DoWhileNotrstTitles.EOF
Debug.PrintrstTitles!Title&"-"&rstTitles!Type
rstTitles.MoveNext
Loop
Restoreoriginaldataasthisisademo
rstTitles.MoveFirst
DoUntilrstTitles.EOF
IfTrim(rstTitles!Type)="self_help"Then
rstTitles!Type="psychology"
rstTitles.Update
EndIf
rstTitles.MoveNext
Loop
cleanup
rstTitles.Close
Cnxn.Close
SetrstTitles=Nothing
SetCnxn=Nothing
ExitSub
ErrorHandler:
cleanup
IfNotrstTitlesIsNothingThen
IfrstTitles.State=adStateOpenThenrstTitles.Close
EndIf
SetrstTitles=Nothing
IfNotCnxnIsNothingThen
IfCnxn.State=adStateOpenThenCnxn.Close
EndIf
SetCnxn=Nothing
IfErr0Then
MsgBoxErr.Source&"-->"&Err.Description,,"Error"
EndIf
EndSub
EndBeginTransVB
最初,激烈保举人人浏览以下文档,在文档有一个章节:Transactions在Access中的用法和界说
AdvancedMicrosoftJetSQLforAccess2000
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnacc2k/html/acadvsql.asp
别的,请参考本站的文章:
关于事件处置
http://access911.net/index.asp?u1=a&u2=73FABF1E14DC
甚么是事件处置?怎样举行事件处置?
http://access911.net/index.asp?u1=a&u2=71FABE1E13DC
支持多线程,充分利用CPU资源 |
|