2010-08-25 50 views
0

我已經爲Access 2007中的學校項目編寫了此VBA模塊,並且它在Visual Basic編輯器中的立即窗口中正常工作。但是,當我在查詢(SQL)中使用它時,該值不會顯示。我不知道爲什麼。 這裏是模塊代碼:訪問SQL中的VBA的奇怪問題

Option Compare Database 

Function LoopIngredients(itemName As String) As Long 
Dim strSQL As String 
Dim rst As Recordset 
Dim field As field 
Dim temp As Boolean 
strSQL = "Select Table2.[Ingredient], Table2.[Price] From Table2" 

'open the results read-only 
Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenForwardOnly) 
If rst.RecordCount > 0 Then 
'rst.MoveFirst 
Do While Not rst.EOF 
For Each field In rst.Fields 
    If field.Name = "Ingredient" Then 
     temp = False 
     If InStr(itemName, field.Value) Then 
      temp = True 
      Debug.Print ("Name " & field.Value) 
     End If 
    End If 
    If field.Name = "Price" Then 
     If temp Then 
      LoopIngredients = LoopIngredients + field.Value 
      Debug.Print ("Price " & LoopIngredients) 
     End If 
    End If 
Next field 
rst.MoveNext 
Loop 
End If 
End Function 

這裏是在即時窗口輸出:

LoopIngredients( 「奶酪和番茄三明治」)
名稱奶酪
價格1
名稱番茄
價格3

下面是SQL查詢:

SELECT Table1.ID, Table1.[Item Name], LoopIngredients([Item Name]) AS Price, Table2.ID, Table2.Ingredient, Table2.Price 
FROM Table1, Table2; 

任何幫助,將不勝感激。

回答

0

的事情actualy工作,但你在你的查詢使用此...

LoopIngredients([Item Name]) AS Price 

但你只能選在SQL語句中的以下字段...

strSQL = "Select Table2.[Ingredient], Table2.[Price] From Table2" 

和那麼場相比Ingredient ...

If field.Name = "Ingredient" Then 
    temp = False 
    If InStr(itemName, field.Value) Then 
     temp = True 

這裏field.Value - > 01將與Item Name的內容進行比較。所以函數的返回值不會隨着價格而增加。在你的即時窗口測試中,你添加了incredients作爲輸入參數。

+0

對不起,我不太清楚你的意思。即使我像這樣調用Lo​​opIngredients(「奶酪三明治」)AS Price函數,它仍然不起作用。至於InStr方法,我試圖看看循環中的當前成分(單獨的表格)是否包含在項目名稱中。例如。 「奶酪和番茄三明治」由奶酪和番茄組成。感謝您的回覆。 – Geniass 2010-08-26 13:35:47

0

如果將SQL查詢更改爲:SELECT Table1. [Item Name],LoopIngredients([Item Name])AS [Price] FROM Table1;