Hallo Wirgina
ein ähnliches Problem hatte ich wie folgt mit VBA gelöst:
- Zuerst weise ich die Daten von einem Formular, welches ungebunden ist einem Aray zu. Ich kann somit nur nach einem, oder nach mehreren Angaben suchen. Primär suche ich immer nach der Firma und wenn diese nicht vorhanden ist, nach dem namen.
Wurde ein Feld mit gleichem Inhalt entdekt, so vergleiche ich noch die restlichen angaben miteinander.
Das Kernstück dieser Abfrage in Access sind zwei code.
- die OpenRecordset Funktion
- die FindFirst / Find Next Funktion
Ein beispiel:
Public Sub Kunden() 'Durchsucht Tabelle, nach Vorhandenem Kunden
'Deklarationen
Dim rs As Variant
Dim i As Integer
'Abfrage nach Kundendaten öffnen.
Set rs = CurrentDb.OpenRecordset("SELECT Kunden_Nummer, Name, Firma, Strasse, Nummer, PLZ, Ort, Tel, Land " & „FROM Auftrag_Kunden ORDER BY Kunden_Nummer“) 'Öffnet die angegebene Datenbank
'Wichtig ist hierbei die Select anweisung. Ich wähle zuerst das Primärschlüsselfeld Kunden_Nummer aus. Danach sage ich dieser Anweisung, dass ich auch das Feld Namen, Firma, Strasse etc. auswählen möchte. (FROM) Von Wo sollen die Daten bezogen werden, aus welcher Tabelle? Order By = Nach welchem Feld soll die Abfrage sortiert werden, da sortiere ich logischerweise nach der KundenNummer. Weise das ganze einer Variable mit Set zu, damit Du später die With Schlaufe anwenden kannst. Jetzt weiter im Code:
Dim fFirst As Boolean 'fFirst = True FindFirst, else FindNext
fFirst = True
Do While True
With rs
If fFirst = True Then
.FindFirst ("" & Suchfeld(0) & " = ‚" & Angabe(0) & "‘")
'rs.FindFirst sucht den ersten Eintrag im Suchfeld(0) mit der Angabe(0). Suchfeld und angabe sind Aray Parameter, die Du in einem Modul wie folgst deklarierst: Beispiel: Public Suchfeld(10) As String. Analoges gilt für die Angabe(0). In dieser Beispieldeklaration stehen Dir 10 arrays zur verfügung, Suchfeld(0), suchfeld(1), Suchfeld(2)… Weiter im Code
fFirst = False
Else
.FindNext ("" & Suchfeld(0) & " = ‚" & Angabe(0) & "‘")
End If
If .NoMatch Then 'Beendet Loop-Schleife, wenn keine weiteren daten in der Tabelle gefunden werden
Form_Auftrag_Erfassung.lboxSuchresultat.AddItem („Keine weiteren Daten gefunden!“)
Exit Sub
Else
'Überprüft erstes Suchresultat nach Richtigkeit
Text2 = .Fields(Suchfeld(0)).Value
For i = 1 To Zahl
If Suchfeld(i) „“ Then Text2 = Text2 & „,“ & .Fields(Suchfeld(i))
Next i
'Weist erstes Resultat der lbox in FORM_Auftrag_Erfassung zu.
If Text1 = Text2 Then
Text2 = „“
Text2 = .Fields(„Kunden_Nummer“) & ", "
Text2 = Text2 & .Fields(„Firma“) & ", "
Text2 = Text2 & .Fields(„Name“) & ", "
Text2 = Text2 & .Fields(„Strasse“) & " "
Text2 = Text2 & .Fields(„Nummer“) & ", "
Text2 = Text2 & .Fields(„PLZ“) & ", "
Text2 = Text2 & .Fields(„Ort“) & ", "
Text2 = Text2 & .Fields(„Land“) & ", "
Text2 = Text2 & .Fields(„Tel“)
Form_Auftrag_Erfassung.lboxSuchresultat.AddItem (Text2)
End If
End If
End With
Loop
rs.Close
End Sub
'mit .Fields, lese oder weise Ich Daten einem Feld in einer Tabelle zu
MFG
Sebastian