我已经在Access 2007中为学校项目编写了这个VBA模块,它在Visual Basic编辑器中的立即窗口中工作正常。但是,当我在查询(SQL)中使用它时,值不会显示。我不知道为什么。 这是模块代码:
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 3
这是SQL查询:
SELECT Table1.ID, Table1.[Item Name], LoopIngredients([Item Name]) AS Price, Table2.ID, Table2.Ingredient, Table2.Price
FROM Table1, Table2;
任何帮助都将不胜感激。
答案 0 :(得分:0)
事情真的有效,但你在查询中使用它......
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
- > Table2.Ingredient
与Item Name
的内容进行比较。因此函数的返回值永远不会随着价格而增加。在您的即时窗口测试中,您将令人不快的内容添加为输入参数。
答案 1 :(得分:0)
如果将SQL查询更改为:SELECT Table1。[Item Name],LoopIngredients([Item Name])AS [Price],似乎一切正常 FROM Table1;