【问题标题】:Bind field to temporary recordset field programmatically以编程方式将字段绑定到临时记录集字段
【发布时间】:2012-03-14 22:35:37
【问题描述】:

我正在尝试显示以编程方式创建的记录集。但我在将控制源绑定到记录集字段时遇到问题。

以下代码在 FirstField 文本框中输出“#Error”。

Option Compare Database
Option Explicit

Private Sub Form_Load()
    Dim rs As ADODB.Recordset
    Set rs = New ADODB.Recordset

    With rs.Fields
        .Append "A", adInteger
        .Append "B", adInteger
        .Append "C", adInteger
    End With

    rs.Open

    With rs
      .AddNew
        ![a] = 1
        ![b] = 1
        ![c] = 1
      .Update
    End With

    rs.Clone

    Set Me.Recordset = rs
    Me.FirstField.ControlSource = rs.Fields(0).Name 'outputs #Error in FirstField
End Sub

非常感谢您的帮助!


我想要做什么

我有一个数据库,它代表停车场中已使用的停车位。 A,B,C 是位置坐标,每个坐标都有一个验证规则集,因此它们不能超过它们的限制。现在我想显示所有可用的停车位。 所以我想我会创建一个包含所有停车位的“假”数据库,然后做一个查询,我只显示假数据库中的整体,其中位置不在“已用停车位”数据库中。

创建一个只包含位置的数据库对我来说似乎很愚蠢,然后用所有停车位填充“已用停车位”数据库,然后添加一个已用布尔字段似乎也是个坏主意。

我欢迎就如何以更好的方式解决此问题提供意见。

感谢您的宝贵时间。

【问题讨论】:

  • 我不明白为什么列出可能的停车位是个坏主意。
  • 一个列表很好,这就是我试图将记录集用作数组列表。但是仅用于此目的的数据库将很难维护,想象一下如果有 20k 个停车位。
  • 我没有看到问题 20K 记录不是很多,20K 断开连接的记录集不是一个好主意。您在 MS Access 中与这个想法作斗争。您确实需要构建一个表而不是使用断开连接的记录集,然后您将不得不处理膨胀问题。
  • 我明白了。谢谢你。我会做一些重新设计:)

标签: ms-access vba


【解决方案1】:

从您的评论中,我看到您打算重新设计,这对我来说似乎是个好主意。尽管如此,如果您想进一步试验表单的 ADO 断开记录集,请在 .Open 之前包含 .LockType

rs.LockType = adLockPessimistic
rs.Open

通过该更改并丢弃 rs.Clone 行,您的 Form_Load 代码可以在我的测试表单上运行。

有关此主题的更多详细信息,请参阅Database Journal 中的这篇文章:Create In-Memory ADO Recordsets

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    相关资源
    最近更新 更多