2016-08-17 101 views
0

我想返回多个值到MS Access中使用VB的消息框输出,到目前为止我已经成功使用下面的代码,我现在需要扩展以便消息框输出逗号分隔不同的月份名称。VB访问MsgBox返回多个结果的SQL查询

Dim rs As DAO.Recordset 
Set rs=CurrentDB.OpenRecordset("Qry_MonthName") 
If Not rs.EOF Then 
MsgBox "Records Loaded Are For The Month Of: " & rs.Fields(0) 
End if 

有谁能提醒一下吗?

+0

所以,你想用逗号分隔的月份列表而不是每个月新的msgbox? – Carl

+0

是的,查询从表格中返回不同的月份名称,我需要查看表格中有多于一个月的名称,并通过msgbox输出,并用逗号分隔。 – jimmy8ball

+0

我编辑了我的答案来回答你的问题 – Carl

回答

0

试试这个:

Dim rs As DAO.Recordset 
Dim strOutput As String 
Dim i As Integer 

Set rs = CurrentDb.OpenRecordset("Qry_MonthName") 

With rs 
    'test for empty recordset 
    If Not .EOF And Not .BOF Then 
     .MoveLast 
     .MoveFirst 

     For i = 0 To (.RecordCount - 1) 
      'test for last record 
      If i = (.RecordCount - 1) Then 
       'last record 
       strOutput = strOutput + !yourField 
      Else 
       'all other records 
       strOutput = strOutput + !yourField + ", " 
      End If 

      .MoveNext 
     Next 
    End If 
    .Close 
End With 
    'execute messagebox 
    MsgBox strOutput 
Set rs = Nothing 
+0

非常感谢这两个答案让我非常期待输出谢谢你。 – jimmy8ball

0

您可以创建在循环中的逗号分隔字符串,然后MSGBOX该字符串像这样的东西:

Dim rs As DAO.Recordset 
Dim mthString as string 
mthString="" 
Set rs=CurrentDB.OpenRecordset("Qry_MonthName") 
If Not rs.EOF Then 
    rs.firstMove 
     Do Until rs.EOF 
     mthString = mthString & rs.Fields(0) & ", " 
     rs.MoveNext ' if you forget this an infinite loop will occur 
    Loop 
    End if 
' remove last comma 
mthString=left(mthString,len(mthString)-2) 
msgbox "Records loaded for the months: " & mthString 
+0

'rs.firstMove'会产生一个错误。你可以实际删除整个If块,如果不是rs.EOF然后 rs.firstMove'与关联的'End if',但是如果'mthString =“”'你会得到一个错误 - 在提取Left之前应该检查空字符串值 – dbmitch

+0

它是'rs.MoveFirst'而不是'rs.firstMove'。据我所知,假设Access将在第一条记录上打开记录集是不安全的,因此检查没有记录的正确方法是'if rs.BOF = False OR rs.EOF = False'(或使用NOT而不是= False,但它看起来更干净,不会混淆OR和NOT)。即使有记录,您的记录集也可能会在最后打开(rs.EOF = True),这就是为什么您必须检查光标不在开始和结束时的情况,发生零记录返回。 – SunKnight0