簡體   English   中英

使用Access vba計算sql查詢結果中的行數

[英]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工作之后,您可以檢查記錄集是否為空。 當為空時,其BOFEOF屬性均為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

筆記:

  1. 我使用AGN.Value而不是AGN.Text因為僅當控件具有焦點時才可以訪問.Text屬性。 但是我不知道您在哪里使用該檢查代碼,因此不確定哪個是您的正確選擇。
  2. 注意SELECT查詢和DCount選項之間的相似之處。 在兩者之間進行轉換通常很容易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM