在ms访问中将记录插入表中

时间:2010-11-09 14:52:56

标签: forms ms-access-2007

我需要使用ms access 2007创建一个小的“应用程序”。我只需要创建一个表单来处理与几个db表相关的输入/输出。 我创建了表格:患者,治疗和实验结果。

患者表中的主键是ID,它在治疗和实验表中用作外键,其名称为patientID。

我还创建了一个我在本期问题开头提到过的表单。它有多个标签。第一个选项卡打开/创建患者,第二个选项卡用于输入要输入到实验表中的数据。同样适用于治疗表。

我的问题:I added a button to the 2nd tab, and I want to attach an 'action' that will set an INSERT query with values taken from fields (controls) in tab 2, together with ID field taken from tab1 (that corresponds with patient ID from patients table), and then execute a query.

现在我正在努力实现这一目标,但收效甚微。此外,在MS网站上搜索解决方案有点难,因为它总是显示其中包含“查询”的结果:)...而查询不是我想要使用的smt。 (但是,我会接受任何解决方案。)

THX

表格:

的患者

ID - primary key, autogenerated
patientID - internal number of the patient record. I could've used this, but it would complicate my life later on :)
gender
age
dateOfDiagnose

- 字段名称实际上是塞尔维亚语,但字段名称并不那么重要

labtests

ID - primary key
patientID - foreign key, from patients table
... bunch of numerical data :)

还有2个表,但它们基本上反映了一些额外的信息,并不那么重要。

我的表单需要让用户输入有关患者的数据,然后在labtests表中输入几行,随着治疗的进行。有两种类型的治疗,有一个与此相关的表,但它们只有很少的字段,包含关于治疗开始的信息,其余的是关于实验室测试的信息。

1 个答案:

答案 0 :(得分:5)

很有可能在VBA下运行SQL,但我怀疑简单地设置表单可能更容易。例如,如果您将ID设置为Link Child&实验室结果子窗体的主要字段(我希望您正在使用),然后它将自动填充。此外,还可以将控件的默认值设置为先前使用非常少的代码输入的值。因此,我建议您添加一些关于您希望实现的内容的说明。

基于后续评论的进一步说明

根据您的评论,您似乎至少有三个相关的表格:

<强>患者

PatientID PK, Counter

<强>治疗

TreatmentID PK, Counter
PatientID FK
TreatmentTypeID FK

<强> LabResults

LabResultID PK, Counter
TreatmentID FK 
PatientID FK <-- Optional, can be got through TreatmentID
LabResultTypeID FK

此外,您还需要一个TreatmentTypes表,其中列出了当前的两种治疗方法,并允许进一步的治疗类型:

TreatmentTypes

TreatmentTypeID PK, Counter 
TreatmentDescription 

您还需要:

<强> LabResultTypes

LabResultTypeID PK, Counter <-- This can be referenced in the LabResults table
TreatmentTypeID FK

除了建议的PK之外还有PK的参数,因为你有自然键,但我认为使用Access使用自动编号时更容易,但是,你需要自然键的索引。

我强烈建议所有表格还包括创建日期,修改/更新日期以及两者的用户ID。 Access不保留这些数据,您必须自己完成。创建的日期可以通过默认值设置,如果您使用的是2010版本,其他字段可以有“触发器”(数据级宏),否则,您将需要代码,但这并不太难。另请注意,这些相同的“触发器”可用于插入相关记录:Meet the Access 2010 macro designer

您的表格将包含每位患者的记录和两个子表格,治疗和LabResults。 Treatments子表单绑定到Treatments表,其中包含LinkChild和Master字段的PatientID以及TreatmentTypeID的组合框:

Rowsource: SELECT TreatmentTypeID, TreatmentDescription FROM TreatmentTypes
ColumnCount: 2
BoundColumn: 1

将处理类型添加到Treatments子表单后,您可以运行查询,或在VBA下运行SQL。您可以将“插入后”事件用于处理子窗体或按钮所包含的表单,After Insert事件具有优势,但只有在用户保存记录或从记录移动时才会触发,这是相同的事情。使用治疗子窗体和After Insert事件,SQL将在以下行中进行:

''Reference Microsoft DAO x.x Object Library
Set db = CurrentDB
sSQL = "INSERT INTO LabResults (TreatmentID, PatientID, LabResultTypeID) " _
     & "SELECT " _
     & Me.TreatmentID & ", " _
     & Me.PatientID & ", " _
     & "LabResultTypeID FROM LabResultTypes " _
     & "WHERE TreatmentTypeID " = & Me.TreatmentTypeID
db.Execute sSQL

MsgBox "Records inserted: " & db.RecordsAffected

Me.Parent.LabResults_Subform.Form.Requery

如果您的版本低于2010且尚未设置触发器,则查询还应包括日期和用户名,如上所述。

我怀疑,对于子表单,您会想要使用数据表。我建议你抵制诱惑,使用单一形式的连续形式,它们更强大。对于一个有趣的方法,您可能希望查看Northwind示例数据库客户订单表单。