Effektivisering af multiparameter opslag i Access fra Excel
Jeg har lavet en funktion, som fra Excel laver en 4 parameter opslag i en + 500.000 record tabel i Access. Funktionen returnerer resultatet af queryen. Det virker, men tager vel det bedste af 1-2 minutter at lave +1.400 opslag fra regnearket, hvis tabellen er indekseret. Det vil jeg gerne have at den kunne gøre hurtigere.Nedenstående er den tungeste af alle, da den åbner og lukker databasen hver gang. Det kan gøres bedre, men er der en smart måde, så man kan få lavet det hele i et hug, f.eks. ved hjælp af en array ? (Excel folk ville nok forneden have brugt Array og .value i stedet for string, men det virker og kan testes i VBA miljøet direkte)
Public Function GNSResLkUp(A As String, B As String, C As String, D As String)
' This function requires a reference to Microsoft ActiveX Data Object 2.x
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim SQLStr As String
Dim DbPath As String
If IsNull(A) Or IsNull(B) Or IsNull(C) Or IsNull(D) Then
GNSResLkUp = 0
Exit Function
End If
If D > 21 Then
D = 21
End If
DbPath = "C:\ opslag.mdb"
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DbPath
SQLStr = "SELECT gns FROM Data WHERE " & _
"A = '" & A & "' AND " & _
"B= '" & B & "' AND " & _
"C = '" & C & "' AND " & _
"D = " & D & " "
rs.Open SQLStr, cn
If rs.EOF Or rs.BOF Then
GNSResLkUp = 0
ElseIf IsNull(rs(0)) Then
GNSResLkUp = 0
Else
GNSResLkUp = Int(rs(0))
End If
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
' USE =GNSResLkUp(E16; H16; K16; U16)
End Function
