我正在尝试整理来自两个不同服务器的数据,一个SQL和一个Access。我承认我的访问SQL有点不对劲,但这个对我来说真的没有意义。
我在访问数据库中触发查询,我在两个服务器中配置了查询以返回此函数的单个值。
查询如下
Bookquery =
"SELECT SUM(dbo_WIPJOBPOST.LQtyComplete) as [Sum]" & vbCr & _
"FROM dbo_WIPJOBPOST" & vbCr & _
"WHERE dbo_WIPJOBPOST.LMachine like '**" & Machno & "**'" & vbCr & _
"AND dbo_WIPJOBPOST.TrnDate between #" & Format(Stime, "dd-mmm-yyyy hh:mm:sss") & "# and #" & Format(Atime, "dd-mmm-yyyy hh:mm:sss") & "#" & vbCr & _
"or dbo_WIPJOBPOST.LWorkCentre like '**" & Machno & "**'" & vbCr & _
"AND dbo_WIPJOBPOST.TrnDate between #" & Format(Stime, "dd-mmm-yyyy hh:mm:sss") & "# and #" & Format(Atime, "dd-mmm-yyyy hh:mm:sss") & "#;"
当我直接对访问数据库运行查询时,我得到一个在“Sum”列下返回的数字。但是在应用程序中,我使用我的函数自动调用它,该函数将查询与数据库和我们感兴趣的列标题放在一起
Bstring = onerecord(Bookquery,“Access”,“Sum”)
Function onerecord(query As String, DB As String, Field As String)
'function to return single cell recordset
Dim Conn As ADODB.Connection
Dim Rec As ADODB.Recordset
Dim constring As String
constring = SelectDB(DB)
Set Conn = New ADODB.Connection
Set Rec = New ADODB.Recordset
'Open con string and run query
Conn.Open constring
Set Rec = Conn.Execute(query)
'Check records exist
If Not Rec.EOF Then
'return result
onerecord = Rec.Fields(Field)
Rec.Close
Else
MsgBox "No records"
Norecords = True
End If
' Clean up
If CBool(Conn.State And adStateOpen) Then Conn.Close
Set Conn = Nothing
Set Rec = Nothing
End Function
出于某种原因,一旦查询和字段放在行
中onerecord = Rec.Fields(Field)
突出显示的提示返回null。我已经测试了查询,因为它在一个记录函数中打印并且它有效,我肯定将标题作为总和,但由于某种原因它不起作用。
我认为这与Machno周围的通配符有关,好像我指定了一个独立的机器,一个记录代码可以工作,但是它没有通配符(我正在处理较旧的数据库和机器名中的随机空格等)很常见。)
有谁可以帮助我采取最后的步骤?感觉非常接近!