【问题标题】:Query results on Access form (VBA)Access 表单 (VBA) 上的查询结果
【发布时间】:2020-01-06 19:41:30
【问题描述】:

我作为一个新手正在做一个 Access 项目,我遇到了一些问题(必须在 VBA 中完成所有操作)。简而言之,我必须在表单上显示查询结果。我的文本框很少,我需要显示一些信息。我知道我必须将 RecordSource 更改为表单,并且我必须为每个文本框设置 RecordSet。这是我的代码,但不起作用:

 Private Sub Form_open(Cancel As Integer)
    Dim strSQL As String, queryDef As DAO.queryDef
    strSQL = " *SELECT etc...* "
    CurrentDb.QueryDefs.Delete "Info"
    Set queryDef = CurrentDb.CreateQueryDef("Info", strSQL)
    Me.RecordSource = queryDef.OpenRecordset() '**error here type mismatch

如何将我的 RecordSource 更改为打开表单时创建的查询? (已尝试使用 Me.RecordSet = strSQL,但不适用于 INNER JOIN)
万分感谢!

【问题讨论】:

  • 试试Me.Form.RecordSet = queryDef.OpenRecordset()

标签: sql vba ms-access


【解决方案1】:

您只需将表单记录源和表单记录集混为一谈。

recordsourceMe.RecordSource是一个字符串,包含一个表/查询名称或一个sql select语句。

Me.RecordSource = strSQL

记录集是一个对象。因此,必须设置它

Set Me.RecordSet = queryDef.OpenRecordSet

避免CurrentDb的多次使用,将其存储在一个变量中。

每次使用时,都会创建一个新的数据库实例副本(通常为DbEngine(0).Workspace(0)),这会消耗不必要的资源。

关于该主题的一些有用链接:

Private Sub Form_Open(Cancel As Integer)
    Dim db as DAO.Database
    Dim strSQL As String, queryDef As DAO.queryDef
    strSQL = " *SELECT etc...* "
    Set db = CurrentDb

    Set queryDef = db.CreateQueryDef(vbNullString, strSQL) ' vbNullstring is "" but typo-safe. If you create a querydef with an empty name, it is just temporary and will get lost after querydef is terminated
    Set Me.RecordSet = queryDef.OpenRecordset() 

或者只是使用记录源:

Private Sub Form_Open(Cancel As Integer)
    Dim strSQL As String
    strSQL = " *SELECT etc...* "
    Me.RecordSource = strSQL 

【讨论】:

  • 非常感谢!但是为什么复杂的查询不适用于第二个选择(= strSQL)。就像它适用于来自一个表的查询,但不适用于连接。它说的是 can't find ...\table\ .mdb
  • sql 语句肯定出错。 Debug.Print strSQL 在分配到记录源并将字符串复制并粘贴到新查询(sql-view)之前。当您尝试数据表视图时,这将向您显示错误。
  • 避免多次使用CurrentDb,将其存储在一个变量中。每次使用时,都会创建一个新的数据库实例副本,这会消耗不必要的资源。 :O 没听说过,但这很有趣。有什么资料或文档可以让我了解更多信息吗?
  • @FoxfireAndBurnsAndBurns 阅读The CurrentDb() Function。从未在 tabledef 上失败(缺少父级)?。在循环中使用它并将执行时间与存储的引用进行比较。我总是使用CurrentDbCproperty,如链接所示。
猜你喜欢
  • 2011-06-15
  • 2013-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-17
  • 1970-01-01
相关资源
最近更新 更多