尝试通过删除DLookUp - Access 2007来提高性能

时间:2010-07-22 10:52:26

标签: ms-access ms-access-2007

任何人都可以给我一些关于在这里使用的适当方法的指示。

- 编辑

我的表单中包含与用户风险地址相关的字段,我有一个复选框可以更新这些字段中的值,如果选中,则会将“联系人”详细信息(从表tblInsPersDet)加载到这些字段中。 如果未选中该复选框,则用户可以输入新的详细信息。

我在选中复选框时运行以下子程序。为了获得字段值我正在使用Dlookup,但我认为这是低效的?因为它每次都在查询数据库/表。

Public Sub sameAsContact(frm As Form)

frm.riskAddress1 = DLookup("[add1]", "tblInsPersDet", "[ID] =" & frm.insuredId)
frm.riskAddress2 = DLookup("[add2]", "tblInsPersDet", "[ID] =" & frm.insuredId)
frm.riskAddress3 = DLookup("[add3]", "tblInsPersDet", "[ID] =" & frm.insuredId)
frm.riskAddress4 = DLookup("[add4]", "tblInsPersDet", "[ID] =" & frm.insuredId)
frm.riskAddress5 = DLookup("[add5]", "tblInsPersDet", "[ID] =" & frm.insuredId)
frm.cmbRiskCountry = DLookup("[country]", "tblInsPersDet", "[ID] =" & frm.insuredId)
frm.riskDstToProp = DLookup("[distToProp]", "tblInsPersDet", "[ID] =" & frm.insuredId)
frm.riskInsCompany = DLookup("[insCompany]", "tblInsPersDet", "[ID] =" & frm.insuredId)
frm.riskPolNo = DLookup("[polNo]", "tblInsPersDet", "[ID] =" & frm.insuredId)
frm.riskBldSi = DLookup("[bldSi]", "tblInsPersDet", "[ID] =" & frm.insuredId)
frm.riskContSi = DLookup("[contSi]", "tblInsPersDet", "[ID] =" & frm.insuredId)
frm.riskExcess = DLookup("[excess]", "tblInsPersDet", "[ID] =" & frm.insuredId)
frm.riskOgLinkMort = DLookup("[linkMort]", "tblInsPersDet", "[ID] =" & frm.insuredId)
frm.riskOgAddOn = DLookup("[addOn]", "tblInsPersDet", "[ID] =" & frm.insuredId)

End Sub

有没有办法查询数据库一次?任何人都可以给我一个指针来指示从所需记录中获取数据的更合适的方法。

提前感谢您的帮助 干杯 诺埃尔

1 个答案:

答案 0 :(得分:2)

您应该使用insuredId作为Link Master字段的子表单和ID作为Link Child字段。

编辑备注

我仍然相信你可以使用子表单。如果选中该复选框,则选择子表单的相关记录:

Me.MySubformControlName.Form.RecordSource="Select * From tblInsPersDet Where ID=" _
 & Me.txtinsuredId 

或者将值填入隐藏或可见字段,例如txtinsuredId。

如果未选中该复选框,则可以移至子表单中的新记录。

编辑重新注意#2

如果您必须使用类似于DlookUp的内容,请使用记录集:

 Set rs=CurrentDB.OpenRecordset("Select * From tblInsPersDet Where ID=" _
 & Me.txtinsuredId)

 For each fld in rs.Fields
    frm("txt" & fld.name)=fld
 Next

或者那里。