亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

從DAO轉換到ADO

2019-11-18 17:46:30
字體:
來源:轉載
供稿:網友
SwitchfromDAOtoADO

BySamHuggill

Introduction

Afewdaysago,IstartedanewPRojectthathandlesalargedatabasecontainingHTMLcodeforacompletewebsite.Theprojecthastoallowthewebmastersofthewebsiteviewallupdatesmadetothesite,whentheyweremadeandbywhom.Theycanalsoeditthepagesonthesite,andautomaticallyuploadthem.

ThisprojectrequirestheuSEOfafairlylargedatabasethatneedstobeaccessedbymanypeoplefromdifferentPCs.IdecidedtouseSQLServerasthebackendtotheproject,butthismeantthatIcouldn注釋:tuseDAOtoconnecttoit!Whatapain!

So,IdecideditwasabouttimeIstartedtolearnADO.ItookaquickglancearoundonthenetatmyusualVBsites,butfoundlittleornohelpformeonADO.

Well,asweprideourselveshereatVBSquareonaddingoriginalcontent,IdecidedIwouldwriteanarticleonusingADO.

ThisarticleisonlyreallytogetyoustartedonADO,andonlydiscussestheconnectionandrecordsetobjects.TherearemanymorefeaturesofADOthatyouwillneedtolookintobeforeyoutakeonaprojectusingADO.
Connectingtolocalandexternaldatabases

WithADO,youcanbuildallyourcodearoundalocaldatabaseandthen,veryeasilychangeonelineofcodethatwillallowyoutoaccessadatabaseonaSQLServer.

Thethingthattookmeawhiletofigureout,washowtoconnecttoadatabase.WithDAO,youusetheOpenDatabasecommandpassingthepathofthedatabaseasoneofthearguements.ButwithADO,youneedtobuildaconnectionstring.Toconnecttoalocaldatabase,usethefollowingconnectionstring:

ConnectionString="Provider=Microsoft.JET.OLEDB.3.51;DataSource=c:/mydb.mdb"

Thatmayseemabitcumbersome,butthisflexibilityprovidesyouwiththemeanstoconnecttoalmostanydatabaseinanyformatanywhere.ThefollowingconnectionstringisusedtoconnecttoaSQLSeverdatabasenamed注釋:people注釋::

ConnectionString="driver=[SQLServer];uid=admin;server=myserver;database=people"
SwitchfromDAOtoADO

BySamHuggill

UsingtheConnectionObject

TheConnectionobjectisthebasefromwhichalmostallADOfunctionsderivefrom.Youcanusethisobjecttocarryoutmostoftheactionsperformedinthesamplecode,usingSQLstatements.E.g.

mCN.Execute"DELETEFROMPeopleWHEREID=1"

Iwon注釋:tgointoanydetailaboutusingSQLstatements,buttheMSDNhassomeinfoonthem.

TheconnectionobjectreturnsarecordsetobjectifyouusetheExecutemehtod.YoucanusethistocreateaDLLanduseCOMtogetthecontentsofarecordset.e.g.

PublicSubGetRecordSet()AsADODB.Recordset
GetRecordSet=mCN.Execute("SELECT*FROMPeople")
EndSub

Thismeansthatyoucancentralizeallyoudatabasecodeintoonecomponent,preferablyaDLL.

UsingtheRecordsetObject

InADO,theRecordsetobjectisverysimilartotheDAORecordsetobject.Thismakesthingsaloteasierwhenportingyourcode,althoughyouwillneedtodeviseafewworkaroundstoovercomeafewmissingfeatures.

Forexample,whenyouinsertarecord,butneedtostoreitsID(AutoNumber)valueinthesameaction,youwouldnormallyusethiscodeinDAO:

Withrs
.AddNew
.Fields("Name").value=sNewValue
.Update
.Bookmark=.Lastmodified
m_intRcdID=.Fields("ID").value
.Close
EndWith
TheADORecordsetobjectdoesnotexposeaLastModifiedorLastUpdatedproperty,soweneedtousethefollowingworkaround:

Withrs
.AddNew
.Fields("Name").value=sNewValue
.Update
.Requery
.MoveLast
m_intRcdID=.Fields("ID").value
.Close
EndWith

Afterupdatingtherecordset(whichyoudon注釋:tneedtodoifyouaremovingtoanotherrecord,asADOautomaticallyupdateschangesmadewhenyoumoverecords)youneedtorefreshtherecordsetusingtheRequerymethod.Thenyouneedtomovetothelastrecord,whichistheoneyouhavejustadded.Now,justextracttheIDvalueandstoreitinamembervariable.
Sampleapplication

TohelpyoumovefromDAOtoADO,IhavemadeasimilarsampleapplicationasIdidfortheBeginningDatabasesarticle.Thesampleoffersthesefeatures:

Addingnewrecords
Deletingrecords
Updatingrecords
Gettingrecorddata
Itisaverysimpledemo,butshouldhelpyoutounderstandthebasics.ItusethelatestversionofADO,version2.1.SeethesectionatthebottomfordownloadingtheADOLibrariesandthesampleapplcation.

Togetthesampleapplicationtowork,startanewStandardEXEProjectandaddareferencetotheMicrosoftActiveXDataObjects2.1Library(Project,References).Addfourcommandbuttons(cmdAdd,cmdDelete,cmdGet,cmdSave)andthreetextboxes(txtNotes,txtURL,txtName).Copy/pastethefollowingcodeintotheform:

OptionExplicit

注釋:PrivatereferencestotheADO2.1ObjectLibrary
PrivatemCNAsConnection
PrivatemRSAsNewRecordset

注釋:InternalreferencetothecurrentrecordsIDvalue
PrivatemintRcdIDAsInteger

PrivateSubcmdAbout_Click()
frmAbout.ShowvbModal
EndSub

PrivateSubcmdAdd_Click()
AddRecord
EndSub

PrivateSubcmdClose_Click()
UnloadMe
EndSub

PrivateSubOpenConnection(strPathAsString)

注釋:Closeanopenconnection
IfNot(mCNIsNothing)Then
mCN.Close
SetmCN=Nothing
EndIf


注釋:Createanewconnection
SetmCN=NewConnection

WithmCN
注釋:ToconnecttoaSQLServer,usethefollowingline:

注釋:.ConnectionString="driver=[SQLServer];uid=admin;server=mysrv;database=site"

注釋:Forthisexample,wewillbeconnectingtoalocaldatabase
.ConnectionString="Provider=Microsoft.JET.OLEDB.3.51;DataSource="&strPath

.CursorLocation=adUseClient
.Open

EndWith

EndSub

PrivateSubAddRecord()


注釋:Addanewrecordusingtherecordsetobject
注釋:Couldbedoneusingtheconnectionobject
mRS.Open"SELECT*FROMPeople",mCN,adOpenKeyset,adLockOptimistic

WithmRS

.AddNew
.Fields("Name").Value=txtName.Text
.Fields("URL").Value=txtURL.Text
.Fields("Notes").Value=txtNotes.Text

注釋:Afterupdatingtherecordset,weneedtorefreshit,andthenmovetothe
注釋:endtogetthenewestrecord.Wecanthenretrievethenewrecord注釋:sid
.Update
.Requery
.MoveLast

mintRcdID=.Fields("ID").Value

.Close

EndWith

EndSub

PrivateSubDeleteRecord()

注釋:Deletearecordandclearthetextboxes

mRS.Open"SELECT*FROMPeopleWHEREID="&mintRcdID,mCN,adOpenKeyset,adLockOptimistic

mRS.Delete
mRS.Close

txtName.Text=""
txtURL.Text=""
txtNotes.Text=""

EndSub

PrivateSubGetInfo()

注釋:GetthedataforarecordbasedonitsIDvalue
mRS.Open"SELECT*FROMPeopleWHEREID="&
mintRcdID,mCN,adOpenKeyset,adLockOptimistic

WithmRS

txtName.Text=.Fields("Name").Value
txtURL.Text=.Fields("URL").Value
txtNotes.Text=.Fields("Notes").Value
.Close

EndWith

EndSub

PrivateSubUpdateRecord()

注釋:Updatearecord注釋:svalues
mRS.Open"SELECT*FROMPeopleWHEREID="&mintRcdID,mCN,adOpenKeyset,adLockOptimistic

WithmRS

.Fields("Name").Value=txtName.Text
.Fields("URL").Value=txtURL.Text
.Fields("Notes").Value=txtNotes.Text

.Update
.Close

EndWith

EndSub

PrivateSubcmdDelete_Click()
DeleteRecord
EndSub

PrivateSubcmdGet_Click()

注釋:Asktheuserwhichrecordshouldberetrievedandgetthedata
注釋:forthatrecord
mintRcdID=Val(InputBox$("EnterIDofrecord:",App.Title,"1"))

GetInfo

EndSub

PrivateSubcmdSave_Click()
UpdateRecord
EndSub

PrivateSubForm_Load()

OpenConnectionApp.Path&"/people.mdb"

EndSub

PrivateSubForm_Unload(CancelAsInteger)

IfNot(mRSIsNothing)Then
SetmRS=Nothing
EndIf

IfNot(mCNIsNothing)Then
mCN.Close
SetmCN=Nothing
EndIf

EndSub->


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲自拍偷拍第一页| 色综合老司机第九色激情| 狠狠久久亚洲欧美专区| 国产va免费精品高清在线| 亚洲精品一区二区网址| 欧美成人一区二区三区电影| 日韩av综合网| 亚洲美女性视频| 亚洲色图偷窥自拍| 久久精品久久久久| 丝袜亚洲欧美日韩综合| 精品久久久一区| 久久精品成人一区二区三区| 久久久久久亚洲精品中文字幕| 日韩综合中文字幕| 久久久久久久久久av| 国产乱肥老妇国产一区二| 日韩视频一区在线| 久久久久久久久国产精品| 欧美日韩aaaa| 岛国av一区二区三区| 欧美电影免费在线观看| 伊人男人综合视频网| 日韩精品福利在线| 国产精品久久不能| 欧美一级片免费在线| 国产精品久久久久久久久久免费| 这里只有精品久久| 国产精品 欧美在线| 精品美女久久久久久免费| 亚洲深夜福利在线| 国产成人精品免高潮在线观看| 少妇av一区二区三区| 日韩精品久久久久久福利| 久久精品久久久久久| 姬川优奈aav一区二区| 国产精品久久久久久久久久久久| 欧美日韩视频在线| 亚洲国产精品小视频| 中文字幕日韩高清| 欧美成人黑人xx视频免费观看| 日韩精品欧美激情| 国产精品色婷婷视频| 久久精品久久久久电影| 亚洲人成绝费网站色www| 成人欧美一区二区三区在线湿哒哒| 久久亚洲综合国产精品99麻豆精品福利| 国产成人在线精品| 亚洲欧洲日产国码av系列天堂| 亚洲精品www久久久| 国产一区av在线| 欧美夫妻性生活视频| 91亚洲精品一区二区| 亚洲综合视频1区| 日韩激情第一页| 欧美日韩亚洲高清| 亚洲男人天堂2024| 在线不卡国产精品| 最近中文字幕日韩精品| 日韩精品久久久久久福利| 黑人巨大精品欧美一区二区三区| 国产精品午夜国产小视频| 性欧美亚洲xxxx乳在线观看| 亚洲一区免费网站| 亚洲色图美腿丝袜| 91中文字幕在线| 91美女高潮出水| 国产成人a亚洲精品| 91精品久久久久久久久久| 久久久久久久激情视频| 亚洲国产欧美自拍| 中文字幕精品www乱入免费视频| 亚洲国产精品久久久| 亚洲欧美日韩直播| 精品一区二区三区三区| 97视频在线观看视频免费视频| 亚洲aⅴ日韩av电影在线观看| 成人免费视频网| 欧美日韩激情小视频| 国产a∨精品一区二区三区不卡| 成人国内精品久久久久一区| 成人国产在线激情| 国产激情久久久| 久久99国产精品自在自在app| 97久久精品人人澡人人爽缅北| 久久精品久久久久电影| 久久精品人人爽| 91在线观看免费观看| 国产精品人成电影在线观看| 亚洲日本中文字幕免费在线不卡| 久久影院模特热| 久久香蕉频线观| 日韩中文字幕在线精品| 精品亚洲男同gayvideo网站| 2019国产精品自在线拍国产不卡| 国产精品久久久久久久9999| 92福利视频午夜1000合集在线观看| 亚洲人午夜精品| 色午夜这里只有精品| 日韩精品在线视频观看| 亚洲女在线观看| 日韩av在线网| 欧美国产在线视频| 亚洲乱码一区二区| 51ⅴ精品国产91久久久久久| 亚洲另类欧美自拍| 97av在线视频免费播放| 日本久久中文字幕| 日韩中文av在线| 久久国产精品网站| 欧美另类精品xxxx孕妇| 欧美午夜精品久久久久久浪潮| 欧美精品18videos性欧| 狠狠躁18三区二区一区| 91av在线国产| 国产精品久久久久久久久久久久久久| 少妇久久久久久| 久久高清视频免费| 国产欧美日韩91| 日韩欧美在线视频日韩欧美在线视频| 97视频在线看| 国产精品视频一区二区三区四| 91情侣偷在线精品国产| 亚洲美女av网站| 亚洲欧美综合另类中字| 欧美激情第1页| 亚洲jizzjizz日本少妇| 国产91九色视频| 人体精品一二三区| 热草久综合在线| 欧美激情久久久| 亚洲精品视频中文字幕| 成人久久精品视频| 久久久久久久久久av| 亚洲国产欧美日韩精品| 亚洲精品国产福利| 久久精品国产亚洲| 中文字幕在线看视频国产欧美| 欧美在线视频免费| 欧美丰满少妇xxxxx| 亚洲第一页在线| 久久精品视频一| 久久久国产精品免费| 日韩中文字幕免费视频| 日韩在线视频一区| 91精品视频免费| www.久久草.com| 亚洲精品日韩av| 96精品视频在线| 亚洲国内高清视频| 亚洲国产一区二区三区四区| 亚洲欧美激情另类校园| 日韩精品在线免费观看视频| 亚洲免费高清视频| 日韩精品免费观看| 亚洲欧洲黄色网| 国产网站欧美日韩免费精品在线观看| 国产一区二区三区在线观看视频| 国产精品第8页| 精品免费在线视频| 欧美一区二区三区艳史| 国产精品免费网站| 亚洲女人天堂视频| 欧美国产日韩中文字幕在线|