如何使用Access中的VBA引用表中的字段,以便可以对其进行编辑?

时间:2009-09-21 18:30:53

标签: ms-access access-vba field edit

我是制作数据库的新手。到目前为止,我有一个像我喜欢的表单设置,但没有绑定b / c我需要在表之间切换(我可能只是将第一个表中的所有字段添加到第二个表,但是一半我自己这样做的一点就是学习。)

我遇到了两个问题。

首先,我无法使表单接受我希望其recordsource为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等来引用字段,而不使用括号。它起作用了我周五上班(喘息 - 我不是一个贸易程序员),但是当我进入时没有工作。这可能是人类可能出现问题最复杂的解释......但是任何帮助都会是非常感谢。

2 个答案:

答案 0 :(得分:2)

您似乎正在与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”。误解这个问题很容易。

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

答案 1 :(得分:0)

  

我在制作表单时遇到问题   接受我想要的记录源   是myTable。

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

  

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

     

SELECT * FROM myTable

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

  

如果我尝试:

     

txtDisplayField1 = [myTable.Field1]

     

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

     

[myTable.Field1] =   txtDisplayField1.text

     

我得到运行时错误2448 - “你不能   为这个对象赋值。“(哪个   是最有用的错误消息   如初。)

试试这个:

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