日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

本文述如何連接用戶窗體與ADO記錄集,最終創(chuàng)建一個(gè)與Access窗體相似的用戶窗體,可以導(dǎo)航至前一條記錄、下一條記錄、第一條記錄、最后一條記錄,等等。

設(shè)計(jì)用戶窗體

在VBE中,插入一個(gè)用戶窗體,在其中添加文本框、按鈕、標(biāo)簽等控件,如下圖1所示。

圖1

這個(gè)用戶窗體中的控件及相應(yīng)的名稱如下:

  • 用戶窗體名稱:ufEmployee
  • 用戶窗體標(biāo)題:員工記錄
  • 在用戶窗體中,從上至下,從左至右,創(chuàng)建下面的控件:
  • 員工ID文本框名稱:tbxEEID
  • Tag:Field0
  • 姓氏文本框名稱:tbxLastName
  • Tag:Field1
  • 名字文本框名稱:tbxFirstName
  • Tag:Field2
  • 出生日期文本框名稱:tbxBirthDate
  • Tag:Field3
  • 雇用日期文本框名稱:tbxHireDate
  • Tag:Field4
  • 命令按鈕名稱:cmdFirst
  • Caption: <<
  • Tag:ButtonFirst
  • 命令按鈕名稱:cmdPrev
  • Caption: <
  • Tag:ButtonPrev
  • 命令按鈕名稱:cmdNext
  • Caption: >
  • Tag:ButtonNext
  • 命令按鈕名稱:cmdLast
  • Caption:
  • Tag:ButtonLast

編寫代碼

下面,編寫代碼來管理這個(gè)用戶窗體,即處理數(shù)據(jù)和用戶窗體中的控件。

這個(gè)用戶窗體需要6個(gè)事件:Initialize(當(dāng)用戶窗體打開時(shí))、QueryClose(當(dāng)用戶窗體關(guān)閉時(shí)),以及每個(gè)命令按鈕的單擊事件。

需要使用事件代碼將記錄集的當(dāng)前記錄顯示在文本框中、以及阻止用戶錯(cuò)誤操作,例如當(dāng)處于第一條記錄時(shí)單擊命令按鈕cmdPrev(<)。

在用戶窗體模塊中,聲明兩個(gè)模塊級(jí)的變量:

  • Dim mADOCon As ADODB.Connection
  • Dim mADORs As ADODB.Recordset

使用模塊級(jí)變量的原因是:當(dāng)用戶窗體開啟時(shí),Connection和Recordset對(duì)象在作用域內(nèi)。

下面的過程使用記錄集中當(dāng)前記錄的數(shù)據(jù)填充文本框。

  • Private Sub FillTextBoxes()
  • Dim cTxtBx As Control
  • Dim lFldNo As Long
  • For Each cTxtBx In Me.Controls
  • If cTxtBx.Tag Like “Field*”Then
  • lFldNo = Mid(cTxtBx.Tag, 6)
  • cTxtBx.Text = mADORs.Fields(lFldNo)
  • End If
  • Next cTxtBx
  • End Sub

記得前面在設(shè)計(jì)用戶窗體時(shí)給文本框設(shè)置的Tag屬性嗎?接下來看看我們?yōu)槭裁丛O(shè)置這個(gè)屬性。

上面的程序代碼遍歷用戶窗體中所有的控件,如果控件具有像Field0、Field1、Field2等形式的標(biāo)簽(tag),就從記錄集中獲取與標(biāo)簽相同名稱字段的數(shù)據(jù)來填充相應(yīng)的文本框。當(dāng)打開用戶窗體或者單擊任一按鈕時(shí),需要改變文本框來響應(yīng)事件。因此,Initialize事件和四個(gè)按鈕中任一按鈕的單擊事件都將調(diào)用上面的程序。在調(diào)用上面的程序之前,這些事件將首先設(shè)置當(dāng)前記錄。

上述程序代碼的一個(gè)好處是,你可以添加和刪除文本框,而無須修改代碼。前提是只要正確填寫了Tag屬性,就會(huì)正確填充文本框。然而,不會(huì)檢查來確保字段實(shí)際存在。例如,如果設(shè)置一個(gè)Tag為Field10,但記錄集僅有9個(gè)字段,那就會(huì)弄混淆。在示例代碼中,為了簡單起見,我們不會(huì)創(chuàng)建這樣明確的錯(cuò)誤檢查代碼。

下面的程序代碼控制命令按鈕(CommandButtons)。假如已經(jīng)到達(dá)第一條記錄,我們不想提供給用戶到達(dá)第一條記錄或者前一條記錄的按鈕選項(xiàng),因?yàn)橐呀?jīng)是第一條記錄,沒有更前一條記錄了。同樣地,當(dāng)前記錄是最后一條記錄時(shí),禁用最后一條記錄和下一條記錄按鈕。每次觸發(fā)一個(gè)事件時(shí),都要確保按鈕響應(yīng)當(dāng)前的狀態(tài)。

  • Private Sub DisableButtons(ParamArray aBtnTags() As Variant)
  • Dim i As Long
  • Dim ctl As Control
  • For Each ctl In Me.Controls
  • ctl.Enabled = True
  • For i = LBound(aBtnTags) To UBound(aBtnTags)
  • If ctl.Tag = aBtnTags(i) Then
  • ctl.Enabled = False
  • Exit For
  • End If
  • Next i
  • Next ctl
  • End Sub

對(duì)于上面的程序,使用了ParamArray參數(shù),可以發(fā)送任意數(shù)量想要禁用的按鈕的名稱。例如,如果想禁用第一個(gè)和前一個(gè)按鈕,就可以像下面這樣調(diào)用該程序:

DisableButtons “ButtonFirst”, “ButtonPrev”

除了傳遞給參數(shù)的按鈕外,每個(gè)按鈕都可用,即能被用戶單擊。如果不帶任何參數(shù)調(diào)用該程序,那么所有的按鈕都是可用的。該程序遍歷用戶窗體中的所有按鈕,將其Tag屬性與參數(shù)列表對(duì)比,如果發(fā)現(xiàn)匹配則禁用該控件。該程序不會(huì)區(qū)分文本框、命令按鈕或任何其它類型的控件。你只需確保使用了正確的Tag屬性,以免禁用了你不想禁用的控件。

現(xiàn)在,創(chuàng)建記錄集,確保使用有用的信息來填充文本框。

無論用戶窗體在什么時(shí)候打開都會(huì)觸發(fā)Initialize事件,此時(shí)適合創(chuàng)建記錄集。這樣,無論何時(shí)用戶窗體顯示,我們都知道有可用的記錄集存在。

  • Private Sub UserForm_Initialize()
  • DimsConn As String
  • Dim sSQL As String
  • Dim sDbPath As String
  • Dim sDbName As String
  • ‘存儲(chǔ)數(shù)據(jù)庫的路徑和名稱
  • ‘可以修改為你自已的路徑和名稱
  • sDbPath =”C:\Users\Administrator\Documents\”
  • sDbName = “Northwind”
  • ‘存儲(chǔ)連接字符串
  • sConn = “DSN=MS Access Database;”
  • sConn = sConn & “DBQ=” &sDbPath & “” & sDbName & “.mdb;”
  • sConn = sConn & “DefaultDir=”& sDbPath & “;”
  • sConn = sConn &”DriverId=281;FIL=MS Access;MaxBuffersize=2048;PageTimeout=5;”
  • ‘存儲(chǔ)SQL語句
  • sSQL = “SELECT 雇員.雇員ID,雇員.姓氏,”
  • sSQL = sSQL & “雇員.名字,雇員.出生日期,雇員.雇用日期 “
  • sSQL = sSQL & “FROM ” &sDbPath & “” & sDbName & “.mdb” & “.雇員” ‘此處要注意如果路徑中有空格則需添加單引號(hào)來引用
  • ‘創(chuàng)建新的連接和記錄集
  • Set mADOCon = New ADODB.Connection
  • Set mADORs = New ADODB.Recordset
  • mADORs.CursorLocation = adUseClient
  • ‘打開連接和記錄集
  • mADOCon.Open sConn
  • mADORs.Open sSQL, mADOCon, adOpenDynamic
  • ‘到第一條記錄
  • mADORs.MoveFirst
  • ‘調(diào)用特定目的的過程
  • FillTextBoxes
  • DisableButtons “ButtonFirst”,”ButtonPrev”
  • End Sub

這個(gè)程序的大部分代碼是設(shè)置字符串,那些煩人的連接字符串和SQL語句是難以編寫的。其中一種方法是在Excel中創(chuàng)建外部數(shù)據(jù)表(數(shù)據(jù)>獲取外部數(shù)據(jù)),然后讀取Connection和CommandText屬性。接著,做一些修改,例如從連接字符串中移除ODBC以及使用變量代替數(shù)據(jù)庫信息。一旦建立了外部數(shù)據(jù)表,可在立即窗口輸入:

  • Print Sheet1.QueryTables(1).Connection
  • Print Sheet1.QueryTables(1).CommandText

將獲得兩個(gè)長字符串,可以將其復(fù)制并粘貼到代碼中。也可以像上面程序中一樣,將代碼分成幾個(gè)字符串。

當(dāng)關(guān)閉用戶窗體時(shí),將觸發(fā)QueryClose事件。如果用戶窗體不打開,就不需要記錄集,因此在該事件中要將其釋放并清空內(nèi)存。

  • Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
  • mADORs.Close
  • mADOCon.Close
  • Set mADORs = Nothing
  • Set mADOCon = Nothing
  • End Sub

下面,介紹如何編寫命令按鈕代碼,使記錄來回移動(dòng)。

基本上有兩類命令按鈕,一類按鈕到達(dá)記錄集的兩端即第一條記錄和最后一條記錄,一類按鈕一次移動(dòng)一條記錄。所有的四個(gè)命令按鈕都做三件事:使正確的記錄為當(dāng)前記錄、調(diào)用FillTextBoxes過程和調(diào)用DisableButtons過程。“移動(dòng)一條記錄”按鈕有一個(gè)額外的步驟,即決定哪條記錄是當(dāng)前記錄。如果是第一條或最后一條記錄,需要禁用不同的命令按鈕。

  • Private Sub cmdFirst_Click()
  • mADORs.MoveFirst
  • FillTextBoxes
  • DisableButtons “ButtonFirst”,”ButtonPrev”
  • End Sub
  • Private Sub cmdLast_Click()
  • mADORs.MoveLast
  • FillTextBoxes
  • DisableButtons “ButtonLast”,”ButtonNext”
  • End Sub
  • Private Sub cmdNext_Click()
  • mADORs.MoveNext
  • FillTextBoxes
  • If mADORs.AbsolutePosition =mADORs.RecordCount Then
  • DisableButtons “ButtonLast”,”ButtonNext”
  • Else
  • DisableButtons
  • End If
  • End Sub
  • Private Sub cmdPrev_Click()
  • mADORs.MovePrevious
  • FillTextBoxes
  • If mADORs.AbsolutePosition = 1 Then
  • DisableButtons “buttonFirst”,”ButtonPrev”
  • Else
  • DisableButtons
  • End If
  • End Sub

上述程序代碼中, MoveNext方法、MoveFirst方法、MovePrevious方法和MoveLast方法都是Recordset對(duì)象的方法。

最終的效果如下圖2所示。

圖2

注意,如果你運(yùn)行這個(gè)用戶窗體出現(xiàn)錯(cuò)誤,檢查一個(gè)是否在VBE中設(shè)置了對(duì)Microsoft ActiveXData Objects 2.X Library的引用;或者是否Initialize事件中對(duì)數(shù)據(jù)庫的引用路徑和名稱有誤。

分享到:
標(biāo)簽:excel圖表制作 excel常用函數(shù) excel數(shù)據(jù)透視表 Excel教程
用戶無頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績?cè)u(píng)定