我有一份excel表,其中包含有关每位员工的信息。我每个月都会不断收到新的电子表格。我必须创建一个管理与员工相关的案例的数据库。我有一个数据库和已经为包含emp信息字段的案例创建的有界形式。我想要做的是只在表单中键入emp id并希望表单在电子表格中查找(可以是案例数据库中的表)并填充表单中的其他字段并且信息可以去进入案例db。可以这样做吗?
答案 0 :(得分:0)
假设Employee信息在当前数据库中可用,可能在链接(Excel)表中有许多方法可以解决这个问题,其中一种方法是:
RecordSource
ControlSource
。你需要这样做,否则他们最初都会显示错误#Name?Locked
或Enabled
属性分别设置为是或否,这样他们将显示的信息将无法编辑Combo Box
;您可以接受控件向导中的第三个选项来帮助您填充此选项。您需要EmployeedID作为第一列,但可以添加其他列Embedded Macro
事件创建的AfterUpdate
(或Access 2003或更早版本的宏)以下是我在示例员工数据库中使用的一些代码:
Private Sub cboStaff_AfterUpdate()
Me.RecordSource = "SELECT StaffID, Title, FirstName, Surname FROM " _
& "tblStaff WHERE StaffID = " & Me.cboStaff
With Me
.txtStaffID.ControlSource = "StaffID"
.txtTitle.ControlSource = "Title"
.txtFirstName.ControlSource = "FirstName"
.txtSurname.ControlSource = "Surname"
End With
End Sub
每当用户从组合框中选择一个员工(或员工)成员时,这将从表中检索数据并填充表单上的各种控件。这些控件将无法编辑,因为它们将被锁定或未启用。 (您还可以将表单的“允许添加”和“允许删除”属性设置为“否”,但“允许编辑”需要保留为“是”,否则组合框将无效。)
此代码可以改进。特别是,只需设置RecordSource
和ControlSource
一次。
显然,我不了解您的数据库的具体情况,还有其他方法可以解决这个问题。
已添加但是,如果表单的RecordSource
是您希望使用Employees表中的某些详细信息填充的其他表,则代替更改RecordSource和ControlSource如图所示,您可以使用ADO(在组合框的AfterUpdate事件中)创建包含单行的RecordSet
(所选员工的详细信息)并设置控件的值(Text
)从此记录集形成值。正如我所说,有很多方法可以解决这个问题。
已添加以回复:
“您向表格请求的更改未成功,因为 他们会在索引,主键或中创建重复值 关系....“
我不知道你的确切设置,但我可以告诉你为什么会这样。 Access中的默认行为是,对于绑定表单,如果对任何一个绑定字段进行了更改,则尝试离开该记录将导致Access保存记录。
表单是否在不需要时绑定?或者您是否将控件的ControlSource
设置为不需要的字段?如果情况并非如此,那么:
在表单的BeforeUpdate
事件中,您可以将Cancel
参数设置为True以防止更新(或插入)。但是,这将阻止插入任何新记录。您可以拥有用户需要单击以显式保存记录的Button,或者在BeforeUpdate
事件中使用If
测试某些条件以决定是否允许插入(或更新)或者停止保存记录(通过设置Cancel = True
)。