Попытка улучшить производительность, удалив DLookUp - Access 2007 - PullRequest
1 голос
/ 22 июля 2010

Кто-нибудь может дать мне несколько советов относительно подходящего метода для использования здесь.

-Edit

У меня есть поля в форме, которые относятся к «адресу риска» пользователя, и у меня есть флажок, который обновляет значения в этих полях, которые, если выбрано, загружают «контактные» данные (из таблицы 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 Ответ

2 голосов
/ 22 июля 2010

Вы должны использовать подчиненную форму, которая застрахована в качестве поля Master Link, а ID - в качестве дочернего поля Link.

РЕДАКТИРОВАТЬ примечание

Я все еще верю, что вы можете использовать подчиненную форму. Если флажок установлен, либо выберите соответствующую запись для подчиненной формы:

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

или около того.

...