2013-04-21 34 views
0

由於之前的回答結果不是我真正需要的,我正在更新此信息。創建訪問報告,該報告列出來自另一個表的ID匹配的表中的信息

我在我的Access數據庫中有兩個表。一個叫Billings,一個叫Bookings。每張表都有一個名爲預訂號碼的欄目,它們是如何關聯的。 Billings表還有一個名爲Container的字段。我想要做的是:

  • 爲每個預訂數一頁紙的報告(可擴展到根據容器的數量多頁)
  • 在我想的報告正文列出每個集裝箱上不同的行(有關每個容器的其他信息一起)

這裏是我的表:

Bookings 
---------------- 
ID | Booking Number 
1 | '1234' 
2 | '1235' 


Billings 
---------------- 
ID | Booking Number | Container 
1 | '1234'   | '12' 
2 | '1234'   | '16' 
3 | '1235'   | '18' 

基於這兩個表,應該成爲預訂#1234和預訂#1235的報告。 Booking#1234的報告應該列出Container的12和16,而Booking#1235的報告只會列出18.我是PHP/MySQL開發人員,所以我理解SQL查詢。然而,我爲MySQL編寫查詢的方式顯然不適用於Access。目前我正在使用與下面的答案類似的模塊,但它沒有做到我需要它做的事情。這是我當前的查詢:

SELECT 
    b.*, 
    ListContainers(b.[Booking Number]) AS Containers 
FROM 
    Bookings AS b 
WHERE 
    ((b.[Booking Number]) Is Not Null); 

這將創建一個逗號分隔每個訂房號碼相關聯的容器的名單,但我要爲每一個集裝箱,其中也將包括來自比林斯其他信息的單獨行表。

有沒有人有類似的情況的經驗,或知道我可以採取任何步驟來完成我想要做的事情?

回答

1

對於您的新需求,您需要使用「子報表」列出容器(和相關信息)。有關詳細信息,請參閱我最近對類似問題here的回答。

+0

你真棒,戈德。我很早就對這種不接受表示歉意。如果我能接受這兩個答案,我會的。非常感謝您的幫助。 – 2013-05-02 13:16:33

1

[這就是我的回答原來的問題,改變了「規範」之前。]

在Access中創建一個新的Module,並在下面的代碼

Public Function ListContainers(Booking_Number As String) As String 
Dim cdb As DAO.Database, rst As DAO.Recordset, rtn As String 
Const Separator = ", " 
Set cdb = CurrentDb 
rtn = "" 
Set rst = cdb.OpenRecordset("SELECT Container FROM Billings WHERE [Booking Number]=""" & Booking_Number & """ ORDER BY Container", dbOpenSnapshot) 
Do While Not rst.EOF 
    rtn = rtn & rst!Container & Separator 
    rst.MoveNext 
Loop 
rst.Close 
Set rst = Nothing 
Set cdb = Nothing 
If Len(rtn) > 0 Then 
    rtn = Left(rtn, Len(rtn) - Len(Separator)) '' trim trailing separator 
End If 
ListContainers = rtn 
End Function 

然後,您可以使用粘貼功能在查詢中,像這樣的

SELECT [Booking Number], ListContainers([Booking Number]) AS Containers 
FROM Billings 

,將返回

Booking Number Containers 
-------------- ---------- 
1234   12, 16 
1235   18 
+0

謝謝你,戈德!我稍微修改了一下,以包含報告所需的其他信息,但這正是我所期待的。非常感激! – 2013-04-22 13:07:22

相關問題