【问题标题】:ms-access save query result in a stringms-access 将查询结果保存在字符串中
【发布时间】:2009-09-02 19:13:42
【问题描述】:

我在查询部分保存了一个查询。我正在从 VBA 运行查询。是否可以将此查询的结果保存为字符串?

【问题讨论】:

  • 您的查询返回什么?一个记录集还是单个项目?
  • 你必须澄清你的问题:你需要标题吗?是什么分隔返回的字段值?列是否应该是固定宽度?什么分隔行?是显示还是保存到文件?
  • renaud,我只需要查询的输出直接进入一个字符串,然后我会将字符串输入一个列表框(是的,而不是行源)
  • 那么记录中的每个字段数据都会在列表框中自己选择?或者整个记录将成为列表框中的选择?

标签: sql ms-access vba


【解决方案1】:

ADO 记录集有一个GetString 方法,可能对您有用。

我有一个名为 qryListTables 的查询,如下所示:

SELECT m.Name AS tbl_name
FROM MSysObjects AS m
WHERE
        (((m.Name) Not Like "msys%"
    And (m.Name) Not Like "~%")
    AND ((m.Type)=1))
ORDER BY m.Name;

请注意,查询使用% 而不是* 作为通配符。选择的原因是 ADO 需要 ANSI 通配符(%_ 而不是 *?)。

我可以使用以下函数来输出一个字符串,该字符串包含数据库中常规表的引用名称,以分号分隔,如下所示:

? DemoGetString("qryListTables", True)

Public Function DemoGetString(ByVal pQueryName As String, _
    Optional ByVal AddQuotes As Boolean = False) As Variant
    '* early binding requires a reference to Microsoft ActiveX
    '* Data Objects Library
    'Dim rs As ADODB.Recordset
    'Set rs = New ADODB.Recordset

    '* use late binding; no referenced needed
    Dim rs As Object
    Set rs = CreateObject("ADODB.Recordset")

    Dim varOut As Variant
    rs.Open pQueryName, CurrentProject.Connection
    If AddQuotes Then
        varOut = """" & rs.GetString(2, , , """;""") '2 = adClipString
        ' strip off last quote
        If Len(varOut & vbNullString) > 0 Then
            varOut = Left(varOut, Len(varOut) - 1)
        End If
    Else
        varOut = rs.GetString(2, , , ";") '2 = adClipString
    End If
    rs.Close
    Set rs = Nothing
    DemoGetString = varOut
End Function

【讨论】:

  • 在 DAO 记录集中,您可以通过将 GetRows 的输出放入数组中然后使用 Join() 将数组转换为分隔列表来执行相同的操作。
  • 谢谢。在我意识到它只在 ADO 中可用之前,我首先在 DAO 中寻找 GetString。但我通常更喜欢 DAO,所以我很感谢你的建议。
  • 由于 SO 上的很多人都在使用 ADO,因此我尝试确保发布任何 ADO 解决方案的 DAO 版本(在有意义的地方),因为 DAO 是适合 Access 的接口。
  • @David W. Fenton:在这种情况下,当您必须推出自己的 ADO 开箱即用的功能时,DAO 如何才能“最合适”?!
【解决方案2】:

好的..在这里在黑暗中拍摄完整的照片...

您正在运行的查询实际上是一个查询...将其视为其 OWN 表...可以像引用任何其他表一样引用它,并且可以对其进行查询。

如果您尝试基于单个条件返回单个字符串项,则最好的选择是 Dlookup:

Lookup = Nz(DLookup(string Field, string Table, string Criteria), "")

如果您要查找一组记录:

dim tsSQL as string
stSQL = "SELECT * FROM table WHERE field=criteria"
dim toRecordset as new ADODB.Recordset
toRecordset.open stSQL, CurrentProject.AccessConnection, int Keyset, int Lock

然后您可以通过以下方式直接访问字段:

If toRecordset.RecordCount > 0 then
  String = toRecordset!FieldName
End If

没有更多信息...关于它... 它也适用于另一个方向..

你可以这样做:

toRecordset.AddNew
toRecordset!Field = Value
toRecordset.Update

我希望在某个地方能给你一个答案。

要获取整个查询,您可以将示例一中的 select 语句更改为“SELECT * FROM 查询名称”,这样就可以将整个查询都包含在内。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-26
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多