Access SQL中VBA的奇怪问题

时间:2010-08-25 19:38:48

标签: sql access-vba

我已经在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;

任何帮助都将不胜感激。

2 个答案:

答案 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.IngredientItem Name的内容进行比较。因此函数的返回值永远不会随着价格而增加。在您的即时窗口测试中,您将令人不快的内容添加为输入参数。

答案 1 :(得分:0)

如果将SQL查询更改为:SELECT Table1。[Item Name],LoopIngredients([Item Name])AS [Price],似乎一切正常 FROM Table1;