Access-Abfrage (mehrere Spalten durchsuchen)
Hallo,
in meiner Datenbank ist eine Tabelle „Kaufabwicklung“ vorhanden. Sie enthält u. a. Spalten wie „VerkäuferName“ und „MonteurName“. Ich will, dass beim Starten meiner Abfrage ich nach dem Namen gefragt werde. Es soll in beiden Spalten gesucht werden und alle Kaufabwicklungen dieser Person ausgegeben werden.
Ich soll nur einmal gefragt werden und nicht 2 mal nacheinander. Z.B. (Geben Sie den Namen des Monteurs oder des Verkäufers).
Jemand eine Idee
Danke
Antwort schreiben
Antwort 1 von lleopard vom 17.10.2019, 13:20 Options
Hallo...
Über ne Abfrage wirst du das nicht hinbekommen... da müssen wir wohl VBA bemühen. ;-)
Ich hab dir das mal was gebastelt, absierend auf einer eigenen Tabelle. Das mußt du natürlich an deine Tabelle anpassen.
Was eigentlich wenn er den Namen in beiden Tabellen hat?
Und was wenn er keinen Eintrag findet?
Function NameAngeben() As String
On Error Resume Next
Dim Antwort, Erg, qDef As QueryDef
Dim chk1, chk2, ssql As String
Antwort = InputBox("Geben Sie den Namen ein, nach dem gesucht werden soll", "Kaufabwicklung")
If Antwort = 0 Then Exit Function
NameAngeben = Antwort
chk1 = DLookup("Satzart", "NTK40", "Satzart='" & NameAngeben & "'")
chk2 = DLookup("MASSNR", "NTK40", "MASSNR='" & NameAngeben & "'")
If IsEmpty(chk1) Or IsNull(chk1) Then chk1 = vbNullString
If IsEmpty(chk2) Or IsNull(chk2) Then chk2 = vbNullString
If chk1 <> vbNullString And chk2 <> vbNullString Then Erg = 1
If chk1 = vbNullString And chk2 <> vbNullString Then Erg = 2
If chk1 <> vbNullString And chk2 = vbNullString Then Erg = 3
If Erg = 1 Then ssql = "SELECT NTK40.SATZART, NTK40.MASSNR FROM NTK40 WHERE (((NTK40.SATZART)='" & Antwort & "')) OR (((NTK40.MASSNR)='" & Antwort & "'));"
If Erg = 2 Then ssql = "SELECT NTK40.SATZART, NTK40.MASSNR FROM NTK40 WHERE (((NTK40.MASSNR)='" & Antwort & "'));"
If Erg = 3 Then ssql = "SELECT NTK40.SATZART, NTK40.MASSNR FROM NTK40 WHERE (((NTK40.SATZART)='" & Antwort & "'));"
If IsEmpty(Erg) Or IsNull(Erg) Then Exit Function
CurrentDb.QueryDefs.Delete "Kaufabwicklung"
CurrentDb.CreateQueryDef "Kaufabwicklung", ssql
DoCmd.OpenQuery "Kaufabwicklung"
End Function
Mal sehen ob du damit klarkommst...
Die Funktion kannst du zB über ein Formular oder ein Makro starten...
Gruß leo
Antwort 2 von lleopard vom 17.10.2019, 13:21 Options
Nachtrag:
Schnell und schmutzig weggeschrieben... kann man natürlich auch über ne Select Case machen usw...
Aber so gehts auch ;-)
Antwort 3 von erik vom 17.10.2019, 16:02 Options
Hallo,
sicherlich lässt sich das über eine Abfrage lösen.
PARAMETERS NamePerson TEXT (255);
SELECT *
FROM Kaufabwicklung
WHERE VerkäuferName = [NamePerson]
OR MonteurName = [NamePerson];
Gruß
erik
Antwort 4 von stirlitz vom 18.10.2019, 11:22 Options
Vielen Dank für Eure Hilfe!
Ich habe beide Varianten ausprobiert. Beispiel von Leo habe ich an meine Datenbank angepasst, funktioniert sehr gut. Nur entschieden habe ich mich trotzdem für Eriks Variante, da die schon etwas einfacher ist und für meine Bedürfnisse völlig ausreicht.
Gruß
stirlitz