MSSQL网页编程之docmd.runsql 语句实行的操纵查询怎样回...
上面我们说了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资源 这一点很好的加强了profiler的功能。但是提到profiler提醒大家注意一点。windows2003要安装sp1补丁才能启动profiler。否则点击没有反应。 入门没那么困难,精通没那么容易 学习SQL语言的话如果要学会去做网站就不是很难!但是要做数据库管理的话就有难度了! sqlserver的痛苦之处在于有用文档的匮乏,很多只是表明的东西 发几份SQL课件,以飨阅者 having子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having条件显示特定的组,也可以使用多个分组标准进行分组。 在select语句中可以使用groupby子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集。 对于数据库来说,查询是数据库的灵魂,那么SQL查询效率究竟效率如何呢?下文将带对SQL查询的相关问题进行讨论,供您参考。
页:
[1]