我是制作数据库的新手。到目前为止,我有一个像我喜欢的表单设置,但没有绑定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等来引用字段,而不使用括号。它起作用了我周五上班(喘息 - 我不是一个贸易程序员),但是当我进入时没有工作。这可能是人类可能出现问题最复杂的解释......但是任何帮助都会是非常感谢。
答案 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