Find data
Beskrivelse
Find data
Seek
Her følger en lille kodestump, der finder en bestemt post i kundekartoteket:
Public Sub Find()
Dim db As Database
Dim rs As Recordset
Set db = CurrentDb()
Set rs = db.OpenRecordset("Kunder")
rs.Index = "PrimaryKey"
rs.Seek "=", 13
If rs.NoMatch Then
MsgBox "Blev ikke fundet"
Else
MsgBox "Kunde nr. 13 hedder " & rs("Firma")
End If
rs.Close
Set rs = Nothing
End Sub Bemærk at seek metoden kun kan bruges på indekserede kolonner, hvilket betyder, at den kun kan bruges på table recordssets.
Find
Hvis man skal finde informationer i dynasets eller snapshots skal man i stedet bruge Find metoden:
- FindFirst: starter ved begyndelsen af recordsettet og finder den første forekomst af det søgte.
- FindLast: starter i bunden og søger baglæns
- FindNext: Starter ved den aktuelle post og finder næste forekomst
- FindPrevious: Starter ved den aktuelle post og finder den forrige
- NoMatch: Returnerer True, hvis det søgte ikke blev fundet
Det kunne se sådan her ud:
rs.FindFirst "KøbIalt >= 100000" Og selve strukturen kunne sættes sådan her op:
rs.FindFirst betingelse Do Until rs.NoMatch Match fundet - gør noget ved det!! rs.FindNext betingelse Loop
SQL
Endelig kan vi bruge en SQL sætning når vi danner vores recordset:
strSQL = "SELECT * FROM Kunder WHERE KøbIalt >= 100000"
Set rs = db.OpenRecordset(strSQL, dbOpenSnapshot)
Do Until rs.EOF
Debug.Print rs("Firma")
rs.MoveNext
Loop Øvelse
Opret en kopi af databasen fra forrige lektion og kald den "Find.mdb"
Prøv de forskellige metoder ovenfor.
- Lav en procedure der lister alle kunder med køber over 100.000,-, hvor du bruger find metoden
- Prøv at lave det samme med et SQL kald
Pak databasen sammen eller omdøb den og send den til mig.
Løsning
Du kan hente mit forslag til løsningen her.
Jeg har brygget lidt videre på koden til de enkelte eksempler, så den er kommet til at se sådan her ud:
Public Sub Find() Dim db As Database Dim rs As Recordset Set db = CurrentDb() Set rs = db.OpenRecordset("Kunder") rs.Index = "PrimaryKey" rs.Seek "=", 13 If rs.NoMatch Then MsgBox "Blev ikke fundet" Else MsgBox "Kunde nr. 13 hedder " & rs("Firma") End If rs.Close Set rs = Nothing End Sub Public Sub FindAndenKunde() Dim KundeNr KundeNr = InputBox("Kundenummer", "Find kunde") Dim db As Database Dim rs As Recordset Set db = CurrentDb() Set rs = db.OpenRecordset("Kunder") rs.Index = "PrimaryKey" rs.Seek "=", KundeNr If rs.NoMatch Then MsgBox "Blev ikke fundet" Else MsgBox "Kunde nr. " & KundeNr & " hedder " & rs("Firma") End If rs.Close Set rs = Nothing End Sub Public Sub SQLList() minbeløb = InputBox("Beløb", "List kunder med køb over") If IsNumeric(minbeløb) Then Dim db As Database Dim rs As Recordset Set db = CurrentDb() strSQL = "SELECT * FROM Kunder WHERE KøbIalt >= " & minbeløb Set rs = db.OpenRecordset(strSQL, dbOpenSnapshot) Do Until rs.EOF MsgBox rs("Firma") & " Køb ialt: " & Format(rs("KøbIalt"), "###,##0") & " kr." rs.MoveNext Loop rs.Close Set rs = Nothing End If End Sub Public Sub FindMetoden() minbeløb = InputBox("Beløb", "List kunder med køb over") If IsNumeric(minbeløb) Then Dim db As Database Dim rs As Recordset Set db = CurrentDb() Set rs = db.OpenRecordset("Kunder", dbOpenDynaset) rs.FindFirst "KøbIalt >= " & minbeløb Do Until rs.NoMatch MsgBox rs("Firma") & " Køb ialt: " & Format(rs("KøbIalt"), "###,##0") & " kr." rs.FindNext "KøbIalt >= " & minbeløb Loop rs.Close Set rs = Nothing End If End Sub Brug for hjælp til VBA, VSTO eller SQL?
Scient Data tilbyder professionel IT-konsulentbistand
Kontakt Scient Data →