2008-10-24 48 views
0

我有一個數據庫,其中充滿了用於檢查另一個數據庫的條件和錯誤消息。如何在訪問中運行查詢循環?

我想運行一個循環,以便根據第二個數據庫中的所有表檢查這些條件中的每一個,並生成一個給出錯誤的報告。

這是可能的MS訪問。

例如,

querycrit表

id   query         error  
1   speed<25 and speed>56    speed above limit 
2   dist<56 or dist >78    dist within limit 

我有超過400個查詢像這樣不同的變量。

一個我正在運行的查詢表是

記錄表

id speed  dist accce decele aaa bbb  ccc 
1  33  34  44   33 33  33  33 
2  45  44  55   55 55  22  23 

問候 TTK

回答

2

這裏是一些更多的示例代碼。它演示了兩種不同類型的記錄集的使用。您不妨閱讀Allen Browne的VBA Traps: Working with RecordsetsList of reserved words in Access 2002 and in later versions of Access

Dim rs As DAO.Recordset 
Dim rs2 As ADODB.Recordset 

Set rs = CurrentDb.OpenRecordset("querycrit") 
Set rs2 = CreateObject("ADODB.Recordset") 
rs2.ActiveConnection = CurrentProject.Connection 
For Each tdf In CurrentDb.TableDefs 
'EDIT: TableDefs includes Microsoft System tables and ' 
'these should never be tampered with. They all begin with Msys ' 
'so we can leave them out of the loop here. ' 
    If Left(tdf.Name, 4) <> "msys" And tdf.Name <> "querycrit" Then 
     rs.MoveFirst 
     strSQL = "SELECT * From [" & tdf.Name & "] WHERE " 

     Do While Not rs.EOF 
      On Error Resume Next 
      Debug.Print tdf.Name 
      rs2.Open strSQL & " " & rs![query] 
      If Err.Number = 0 Then 
       On Error GoTo 0 
       If Not rs2.EOF Then 
        Debug.Print rs![Error] 
        Debug.Print rs2.GetString 
       End If 
      End If 
      Err.Clear 
      rs2.Close 
      rs.MoveNext 

     Loop 
    End If 
Next 
End Sub 
+0

這裏我得到一個運行時錯誤3734在 對於每個TDF在CurrentDb.TableDefs 我已經定義爲TDF tabledef的 – tksy 2008-11-13 12:45:50

0

當你說「報告」,你的意思Access報表,或將寫入文件或訪問表單的工作?

您可以在模塊中創建一個函數或子項來​​執行此操作。在您的querycrit表上打開一個記錄集,並旋轉記錄動態構建和運行記錄表的SQL。您可以將這些動態查詢的結果寫入文件或表單,或者將結果插入臨時表並從那裏驅動訪問報告。

0

以下是一些示例代碼,它是鍵入的,未經測試。

Dim rs AS DAO.Recordset 
Dim rs2 AS DAO.Recordset 

Set rs=CurrentDB.OpenRecordset("querycrit") 

strSQL="SELECT * From Records WHERE " 
Do While Not rs.EOF 
    Set rs2=CurrentDB.OpenRecordset(strSQL & rs![Query]) 
    If Not rs2.EOF Then 
     Debug.Print rs![Error] 
     Debug.Print rs2.Fields(1) 
    End If 

    rs.MoveNext 
Loop 
0

「其實有很多記錄表 進行檢查,而不是所有的查詢可以 對所有表在一個 表的速度運行,對於如可能不會出現在 鄰桌的距離不在那裏。「

正確的認爲做,我想,是創建表的表和查詢其上表中可以運行一個查詢表接線表顯示,例如:

TableID QueryID 
1   4 
2   1 
2   3 
3   1 

這可以用來在每個表上運行正確的一組查詢。