Доброго времени суток!
Начальные данные: две таблицы (
tblPasport-(один-ко-многим)-
tblMetering) - Паспорта и измерения.
Необходимо: вывести n-ю запись таблицы измерения(название прибора и номер) указанного паспорта. Но именно в порядке сортировки
tblMetering.id ASC,
так как данные забиваются в определенной последовательности.
Делаю сие этой функцией:
Public Function sTypeDevice(i1 As Integer, i2 As Integer) As String
'Входные параметры: i1-код паспорта, i2-какую запись берем
Dim str As String
Dim rs As Object
Dim k As Integer
Dim myarr()
str = "SELECT nDevice,FactoryNum FROM tblMetering LEFT JOIN tblNameDevice ON tblMetering.[idNameDevice] = tblNameDevice.[id] Where idPasport=" & i1 & " Order By tblMetering.id ASC"
On Error GoTo 1: sTypeDevice = ""
Set rs = CurrentDb.OpenRecordset(str)
If rs.BOF Then
sTypeDevice = "": GoTo 1
End If
k = Nz(DCount("*", "tblMetering", "idPasport=" & i1), 0)
myarr = rs.GetRows(k)
sTypeDevice = Nz(myarr(0, i2 - 1), "") & ";" & Nz(myarr(1, i2 - 1), "")
1:
rs.Close
Set rs = Nothing
Exit Function
End Function
В запросе: sTypeDevice(tblPasport.id,1) as tdv1
Отображается как "КСД-3;202309". После чего функцией mid беру необходимое "поле" из выражения Mid([tdv1],1,InStr([tdv1],";")-1).
Только вот беда, на машине с 2Гб оперативы все это довольно таки долго вычисляется. Можно сказать зависает на пару секунд(3-4). Это если в запросе вычислять.
Используются данные для построения отчета.
Combobox-в нет, только вот вычисляемое поле.
Пробовал указывать выражение в поле, вместо вычисления, загружается отчет быстрее, а вот форме хоть и быстро открывается но данные выражения
отображаются не сразу(что естественно, так как это выражение в поле формы).
Посоветуйте как лучше выполнить задуманное, но чтобы "грузить" акс/машину поменьше. Спасибо! http://www.sql.ru/forum/1164768/optimizaciya-koda-zaprosa