2010-07-22 4 views
1

Может кто-нибудь, возможно, дать мне несколько указаний относительно соответствующего метода для использования здесь.Попытка улучшить производительность, удалив DLookUp - Access 2007

-Edit

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

Есть ли способ запросить базу данных один раз? Может кто-нибудь, пожалуйста, дайте мне указатель относительно более подходящего метода для получения данных из требуемой записи.

Заранее спасибо за любую помощь Приветствия Noel

+0

В качестве любопытства, почему вы задаете все свои вопросы в wiki сообщества? – Fionnuala

+0

не так ли? Разве это не позволяет людям отредактировать вопрос? – noelmcg

+0

Это не обычная вещь, и это означает, что вы не пользуетесь голосами за хороший вопрос, но это зависит от вас. – Fionnuala

ответ

2

Вы должны использовать подчиненный, которая имеет insuredId как основное поле и ID в поле Ссылки ребенка.

EDIT снова примечание

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

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

Или заполнить значение в скрытое или видимое поле под названием, скажем, txtinsuredId.

Если флажок не установлен, вы можете перейти к новой записи в подформе.

EDIT снова примечание # 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 

или там Авиомодели.

+0

Привет, Рему, я отредактировал свой вопрос, так как не думаю, что я был совершенно ясен относительно того, что делает флажок. Я не думаю, что могу использовать подформу в этом случае? – noelmcg

+0

Я все еще считаю, что подформация - это необходимое вам решение. – Fionnuala

+0

Теперь я вижу, как это решение будет работать.Временные ограничения могут затруднить реализацию, поскольку, насколько я вижу, мне нужно будет перестроить базу данных по тому, как я ее организовал в настоящее время. Но я, конечно, вижу, как это будет эффективно. – noelmcg

Смежные вопросы