2016-06-20 36 views
0

我使用的MS Access 2007的MS Access - 根據字段的值是一個數組中選擇行

我想根據一些領域在數據庫中從一個表中提取數據,說「車ID 」。對於每個'汽車ID'(共100輛汽車),我想將與該汽車相關的所有行提取到Excel電子表格中,以便稍後對其進行操作。理想情況下,我最終將擁有100個不同的電子表格,每個電子表格都描述一輛汽車的歷史。

現在,由於我有100個車輛ID的矢量,因此我想自動選擇車輛ID,就好像它在for循環中一樣,而不是手動執行100次查詢。

我想我應該使用VBA,但由於我是MS Access和VBA的新手,我不太清楚如何處理這個問題。

任何提示將不勝感激。 非常感謝。

+0

在第二個表,是所有的數據只是特定的汽車的特點是什麼?例如,CarID = 1,數據將是紅色,6個循環等...? –

+0

該表格包含100輛汽車相對於1年的歷史信息。因此,例如,如果我們考慮CarID = 222,則在此表中我們有365行僅與CarID = 222有關。每行包含一個感興趣的值,例如,所涵蓋的km。顯然,我們對所有不同的其他汽車也有365行。我所討論的所有行都在一張表內。我的目標是在單個Excel電子表格中提取與每輛車相關的365行,併爲每輛車做到這一點。我最終會得到與最終汽車數量一樣多的電子表格,每個電子表格都包含365行 – user6490368

回答

0

所以你需要2張桌子。您的主表格包含CarID作爲關鍵字段,第二個表格包含我們所有的值/興趣。看來你已經這樣設置了。

對於以下示例,您需要創建一個選擇查詢並將其保存爲名稱「mySavedQuery」(選擇查詢在這一點上的作用並不重要,因爲我們將通過代碼對其進行更改)。

在上單擊命令按鈕,你可以這樣做:

Dim rs As DAO.Recordset 
Dim db As DAO.Database 
Dim qdf As DAO.QueryDef 
Dim strSQL As String 
Dim intLow As Integer 
Dim intHigh As Integer 
Dim i As Integer 

Set db = CurrentDb 

intLow = 1 
intHigh = DMax("CarID", "Table2") 

For i = intLow To intHigh 
    strSQL = "SELECT Table1.CarID, Table2.Interest FROM Table1 INNER JOIN Table2 ON Table1.CarID = Table2.CarID " _ 
      & " WHERE (((Table1.CarID)=" & i & "));" 
    Set rs = CurrentDb.OpenRecordset(strSQL) 

    If Not (rs.EOF And rs.BOF) Then 
     rs.MoveFirst 

     Set qdf = db.QueryDefs("mySavedQuery") 
     qdf.SQL = strSQL 

     DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "mySavedQuery", "C:\Users\SClark\Desktop\Survey" & i & ".xls", True 
    End If 

Next i 

Set rs = Nothing 
Set db = Nothing 
Set qdf = Nothing 

這裏發生的事情是我們確定的最低CarID = 1,並使用DMAX找到最大CarID。然後,我們迭代這些值併爲每個CarID導出一個Excel表。

這是一個降濁的例子,但應該讓你開始正確的道路......

+0

非常感謝random_answer_guy!我明白了並獲得了我正在尋找的東西。 – user6490368

相關問題