![](/img/trans.png)
[英]Using Access VBA, how to count number of output records in a select query and store the count as a VBA variable?
[英]count the number of rows in sql query result using access vba
我正在嘗試使用Access 2007 vba計算sql查詢結果中的行數。 我所擁有的是一個名為AGN
的文本框,當用戶在其上輸入值時檢查該值,然后如果該值已插入,則會帶回MsgBox
。 我想做的是:
Dim rs As DAO.Recordset
Dim db As Database
Dim strSQL As String
Set db = CurrentDb
strSQL = "SELECT agencies.[agency no] FROM agencies WHERE agencies.[agency no]= " &Me.AGN.Text
Set rs = db.OpenRecordset(strSQL)
If rs.Fields.Count > 1 Then
MsgBox "this value is already here "
End If
Set rs = Nothing
當我在文本框中插入任何值時,出現運行時錯誤3061(參數太少)
錯誤消息“參數太少”通常意味着您的SQL語句中有某些內容不能被Access識別為字段,表,函數或SQL關鍵字。 在這種情況下,如果[agency no]
是文本而不是數字數據類型,則可能會發生。 如果是這種情況,在構建SQL語句時,請用引號將AGN
的值括起來。 (或者,您可以使用參數查詢來避免引用文本值。)
strSQL = "SELECT a.[agency no] FROM agencies AS a" & vbCrLf & _
"WHERE a.[agency no]= '" & Me.AGN.Value & "'"
Debug.Print strSQL
如果遇到問題,請轉到立即窗口,然后復制Debug.Print
的輸出。 然后,您可以在Access查詢設計器中創建一個新查詢,切換到SQL View並粘貼語句文本進行測試。
SELECT
工作之后,您可以檢查記錄集是否為空。 當為空時,其BOF
和EOF
屬性均為true。 因此,要檢測何時不為空,請檢查“ 否” Not (BOF And EOF)
...
With rs
If Not (.BOF And .EOF) Then
MsgBox "this value is already here "
End If
End With
但是,您實際上不需要打開記錄集來確定是否存在匹配的行。 您可以檢查DCount
表達式返回的值。
Dim lngRows As Long
lngRows = DCount("*", "agencies", "[agency no]='" & Me.AGN.Value & "'")
If lngRows > 0 Then
MsgBox "this value is already here "
End If
筆記:
AGN.Value
而不是AGN.Text
因為僅當控件具有焦點時才可以訪問.Text
屬性。 但是我不知道您在哪里使用該檢查代碼,因此不確定哪個是您的正確選擇。 SELECT
查詢和DCount
選項之間的相似之處。 在兩者之間進行轉換通常很容易。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.