c# combobox集合数据不显示_VBA与数据库解决方案:Recordset记录集合的动态查询,并显示结果...
大家好,今日繼續(xù)講解VBA與數(shù)據(jù)庫(kù)解決方案的第10講內(nèi)容,打開一個(gè)指定的數(shù)據(jù)庫(kù)記錄集,把所得的數(shù)據(jù)顯示到工作表中的方法。今日的內(nèi)容是和第8講,第9講內(nèi)容是相連續(xù),在第9講中講了打開記錄集的用的方法是rsADO.Open strSQL, cnADO, 1, 3,在第8講中我們講了還有一種是Execute(strSQL)方法,今日我們就講利用這種方法達(dá)到我們的目的,同時(shí)在SQL語(yǔ)句中的我們將查詢?cè)O(shè)置為一個(gè)動(dòng)態(tài)的查詢。
如下面的工作表文件:我們要根據(jù)I2單元格的提示部門信息來(lái)查找工作表的數(shù)據(jù)并將查詢的結(jié)果放在左側(cè)的區(qū)域:
我們看代碼:
Sub mynzra2()
Dim cnADO, rsADO As Object
Dim strPath, strSQL As String
Dim i As Integer
strPath = ThisWorkbook.Path & "mydata.accdb"
Set cnADO = CreateObject("ADODB.Connection")
With cnADO
.Provider = "Microsoft.ACE.OLEDB.12.0"
.Open strPath
End With
strSQL = "SELECT * FROM 職員表 WHERE 部門= '" & Cells(2, 9) & " '"
Set rsADO = cnADO.Execute(strSQL)
Columns("A:E").Select
Selection.ClearContents
Cells(2, 9).Select
For i = 0 To rsADO.Fields.Count - 1
Cells(1, i + 1) = rsADO.Fields(i).Name
Next i
Range("A2").CopyFromRecordset rsADO
rsADO.Close
cnADO.Close
Set rsADO = Nothing
Set cnADO = Nothing
End Sub
代碼截圖:
代碼精講:
① Dim cnADO, rsADO As Object
Dim strPath, strSQL As String
Dim i As Integer
strPath = ThisWorkbook.Path & "mydata.accdb"
Set cnADO = CreateObject("ADODB.Connection")
上面的代碼和第9講的相同,分別聲明了幾個(gè)變量并建立了數(shù)據(jù)庫(kù)的ADO連接,
② 在打開數(shù)據(jù)庫(kù)時(shí)同時(shí)設(shè)置了連接:
With cnADO
.Provider = "Microsoft.ACE.OLEDB.12.0"
.Open strPath
End With
這種連接方式采用了我在第8講中講到另外的方式,可以參考一下。
③strSQL = "SELECT * FROM 職員表 WHERE 部門= '" & Cells(2, 9) & " '"
我們要重點(diǎn)的講解一下這條語(yǔ)句,之前有朋友聯(lián)絡(luò)問(wèn)過(guò)這類語(yǔ)句的書寫方式,今日可以一并回答,這里要注意變量,變量是代碼中的變量,在SQL語(yǔ)句中是不能出現(xiàn)變量的,要是常量并用引號(hào)括起來(lái),所以在上面的語(yǔ)句中
a "SELECT * FROM 職員表 WHERE 部門= '" 為第一部分
b 最后的 " '"為第三部分
c Cells(2, 9)為第二部分。
三個(gè)部分中間用"&"連接起來(lái)。大家要?jiǎng)?wù)必記住這種書寫的方式,這樣在程序的運(yùn)行中SQL語(yǔ)句才正確,下面看看在運(yùn)行過(guò)程中的SQL語(yǔ)句:
④ Set rsADO = cnADO.Execute(strSQL) 對(duì)于這條語(yǔ)句,我在第8講的內(nèi)容中,也講到是一種打開記錄集的方式之一,是Connection對(duì)象的Execute方法,通過(guò)上面語(yǔ)句,我們就可以執(zhí)行查詢,并將結(jié)果保存到集合的對(duì)象中。下面我將Connection對(duì)象的Execute方法再次專門的講解一下:
ADODB.Connection對(duì)象的Execute方法
該方法用于執(zhí)行SQL語(yǔ)句。根據(jù)SQL語(yǔ)句執(zhí)行后是否返回記錄集,該方法的使用格式分為以下兩種:
第一種:執(zhí)行SQL查詢語(yǔ)句時(shí),將返回查詢得到的記錄集。用法為:
Set對(duì)象變量名=連接對(duì)象.Execute("SQL語(yǔ)句")
Execute方法調(diào)用后,會(huì)自動(dòng)創(chuàng)建記錄集對(duì)象,并將查詢結(jié)果存儲(chǔ)在該記錄對(duì)象中,通過(guò)Set方法,將記錄集賦給指定的對(duì)象保存,以后對(duì)象變量就代表了該記錄集對(duì)象。
第二種:執(zhí)行SQL的操作性語(yǔ)言時(shí),沒(méi)有記錄集的返回。此時(shí)用法為:
連接對(duì)象.Execute "SQL語(yǔ)句" [,RecordAffected][, Option]
參數(shù)a RecordAffected為可選項(xiàng),此出可放置一個(gè)變量,SQL語(yǔ)句執(zhí)行后,所生效的記錄數(shù)會(huì)自動(dòng)保存到該變量中。通過(guò)訪問(wèn)該變量,就可知道SQL語(yǔ)句隊(duì)多少條記錄進(jìn)行了操作。
參數(shù)b Option 可選項(xiàng),該參數(shù)的取值通常為adCMDText,它用于告訴ADO,應(yīng)該將Execute方法之后的第一個(gè)字符解釋為命令文本。通過(guò)指定該參數(shù),可使執(zhí)行更高效
在第9講的講解中,我們用了第二種方法,今日的代碼有的是第一種代碼。至于那種好,我這里沒(méi)有說(shuō)明,可以根據(jù)寫代碼人員的喜好即可。
代碼的運(yùn)行結(jié)果:
今日內(nèi)容回向:
1 Connection對(duì)象的Execute方法有哪兩種方法?
2 如何實(shí)現(xiàn)可控的指定查詢?并將結(jié)果顯示?
總結(jié)
以上是生活随笔為你收集整理的c# combobox集合数据不显示_VBA与数据库解决方案:Recordset记录集合的动态查询,并显示结果...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python避免深度嵌套的if-else
- 下一篇: vsscode beego 没有提示_轻