2

我是制作数据库的新手。到目前为止,我已经设置了一个我喜欢的表单,但是没有绑定任何值 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 等来引用字段,而无需括号。它在我周五下班时起作用(喘气 - 我不是一名程序员)但当我进来时没有工作。这可能是对人类可能的问题的最复杂的解释......但任何帮助都是非常感激。

4

2 回答 2

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

这是一个糟糕的 UI 的原因是因为你在问一个是/否的问题,但答案实际上是“table1”或“table2”。很容易误解这个问题。

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

于 2009-09-21T21:08:47.683 回答
0

我无法让表单接受我希望它的记录源是 myTable。

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

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

从我的表中选择 *

正确,尽管您的原始 SQL 有点复杂。

如果我尝试:

txtDisplayField1=[myTable.Field1]

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

[myTable.Field1] = txtDisplayField1.text

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

尝试这个:

Me.Recordset.Edit
Me.Recordset("Field1") = txtDisplayField1
Me.Recordset.Update
于 2009-09-21T19:06:11.427 回答