【问题标题】:Reference fields within tables such that they can be edited参考表格中的字段,以便可以对其进行编辑
【发布时间】:2009-09-21 18:30:52
【问题描述】:

我是创建数据库的新手。到目前为止,我已经设置了一个我喜欢的表单,但是没有绑定任何值 b/c 我需要在表之间切换(我可能只是将第一个表中的所有字段添加到第二个表中,但是一半我自己做这件事的意义在于学习)。

我遇到了两个问题。

首先,我无法让表单接受我希望它的记录源是 myTable。我不知道为什么。看起来很简单

form.RecordSource="myTable"

不幸的是,它不起作用。如果我这样做,绑定到 myTable 中的字段的文本框会显示 #error 或 #name?而不是他们的预期价值。

为了尝试解决这个问题,我进入了表单的属性并将其控制源设置为:

"SELECT * FROM myTable, myTable AS backup_1;"

我不知道这意味着什么,但我必须这样做才能让任何事情发挥作用。这是我的第一个问题 - 我如何“正确”地将数据库与没有恶作剧的表单关联起来并让参考工作?我现在已经做了 3 种不同的方法,一种工作一段时间然后停止,一种 (form.recordSource=myTable) 根本不起作用,另一种是我提到的第一种方法。所有这些都给我带来了麻烦。

无论如何,我使用了SELECT...,因为它最接近实际工作。从那里我将不想离开 Unbound 的文本框设置为 [myTable.FieldName],并且它起作用了。以编程方式,我能够使用 [myTable.FieldName] 轻松编辑从特定记录中获取特定字段的信息。问题是我似乎无法以编程方式编辑存储在这些字段中的数据。
例如,如果我尝试:

txtDisplayField1=[myTable.Field1]

工作正常。但如果我尝试:

[myTable.Field1] = txtDisplayField1.text

我收到运行时错误 2448 -“您无法为该对象分配值。” (这是有史以来最有用的错误消息。)

之前我提到,当我将表单与表格关联时,有一种方法一开始可以工作,但后来由于某种原因停止工作。最初我只是输入:

form.recordsource = myTable

它工作得很好。我可以通过将字段称为 Field1 等来引用字段,而无需括号。它在我周五下班时起作用(喘气 - 我不是一名程序员)但当我进来时没有工作。这可能是对人类可能的问题的最复杂的解释......但任何帮助都是非常感谢。

【问题讨论】:

    标签: vba ms-access field edit


    【解决方案1】:

    您似乎在与 Access 的默认设计作斗争。

    如果您有两个具有相同结构的表(您不应该在精心设计的数据库中,但是,嘿,事情发生了),您可以使用表单的 OnOpen 事件来设置表单的记录源。一个非常简单(但不是非常用户友好)的方法是:

      Private Sub Form_Open(Cancel As Integer)
        If vbYes = MsgBox("Edit Table1?", vbQuestion+vbYesNo, "Choose table") Then
           Me.RecordSource = "Table1"
        Else
           Me.RecordSource = "Table2"
        End If
      End Sub
    

    这是一个糟糕的用户界面的原因是因为您问的是/否问题,但答案实际上是“table1”或“table2”。这个问题很容易被误解。

    那么表单上的所有控件都应该绑定到底层字段。如果这样做,您不必编写任何代码来更新数据——用户更改控件中的数据将自动更改底层数据。

    【讨论】:

    • 我和大卫在一起。我很少在 Access 中使用未绑定的表单,然后仅用于特定要求,例如在时间表应用程序中一次添加多条记录,其中可以输入常规时间、随时间和/或双倍时间,而许多其他字段相同。
    • 问题是每当有人更改某些内容时,我都需要保存所有字段的备份。我把变化的历史放在另一个表中。我正在尝试(如前所述,很尴尬)这样做:(所有 txtBoxes 在表单加载和记录更改时手动设置为相等的正确值) txtAddress.setfocus 地址 = [myTable.address] [myTable.address] = txtAddress.text 表单。 recordSource = "SELECT * FROM backupTable" [backupTable.Address] = address 问题是获得访问权限以接受我对字段的引用,并让我更改它们。有人告诉我使用记录集,这对我来说是希腊语。发送帮助
    • 嗯,评论应用把我的回报拿走了,抱歉很难读。
    【解决方案2】:

    我在制作表单时遇到问题 接受我希望它的记录源 成为我的表。

    在程序运行时更改表单的记录源是一项高级技术,应保留仅供专家使用。

    为了尝试解决这个问题,我进入了 窗体的属性并设置其 控制源到:

    从我的表中选择 *

    正确,虽然您的原始 SQL 有点复杂。

    如果我尝试:

    txtDisplayField1=[myTable.Field1]

    工作正常。但如果我尝试:

    [myTable.Field1] = txtDisplayField1.text

    我收到运行时错误 2448 -“你不能 给这个对象赋值。”(其中 是最有用的错误信息 永远。)

    试试这个:

    Me.Recordset.Edit
    Me.Recordset("Field1") = txtDisplayField1
    Me.Recordset.Update
    

    【讨论】:

    • 呃,什么?默认情况下,绑定的记录源是可编辑的。也许你想在我否决这个答案之前澄清你的意思?
    • 明确地说,绑定的记录源只有在其底层 SQL 语句可更新时才可编辑。虽然 OP 的示例表明他的记录集确实是可更新的,但在基础 SQL 语句创建不可更新记录集的情况下,我的示例记录集编辑将不起作用
    猜你喜欢
    • 2010-12-15
    • 2018-01-28
    • 2020-09-11
    • 2021-11-01
    • 2020-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-23
    相关资源
    最近更新 更多