Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Access Abfrage mit Bedingung

Access Abfrage mit Bedingung
26.10.2021 16:47:11
Ronald
Grüßt Euch alle!
Ich möchte gerne alle Datensätze in eine Listbox laden. Nur wenn ein bestimmter Wert in einem Feld vorkommt, dann den ganzen Datensatz überspringen.
Ich habe das Gefühl, da fehlt nicht viel. Ich hab nur leider keine Idee. Vielleicht kann mir hier jemand helfen.
Mein Code sieht wie folgt aus. Die Darstellung des Codes für den DB-zugriff spare ich mir jetzt und zeige nur die Zuweisung zu den Listboxen:

Public Sub b_SQL_Abfrage_Listbox_PrivatKd()
strQuery = "SELECT * FROM tKunden ORDER BY fKdNummer ASC"
Set rs = cn.Execute(strQuery)
End Sub

Public Sub c_Handling_PrivDaten_fuer_Auswahl_holen()
Dim i As Integer
i = 1
Do While Not rs.EOF
frmAuswahl.lstAuswahlKundennummer_KV.AddItem rs.Fields("fKDNummer").Value
frmAuswahl.lstAuswahlNachname_KV.AddItem rs.Fields("fKdNachname").Value
frmAuswahl.lstAuswahlVorname_KV.AddItem rs.Fields("fKdVorname").Value
frmAuswahl.lstAuswahlOrt_KV.AddItem rs.Fields("fKdOrt").Value
rs.MoveNext
i = i + 1
Loop
End Sub
Angegenommen, es sind 50 Datensätze in der Tabelle und der Nachname "Müller" kommt 3x vor. Und ich möchte, daß dieser Name GAR NICHT vorkommt. Sollte ich da stattdessen bei der SELECT-Abfrage etwas anderes abfragen? Ist wahrscheinlich einfacher. Nur wie? Wäre froh, um jede Hilfe.
Danke im Voraus.
Gruß Ronald
PS: Wenn ich Quellcode in der Anfrage hervorheben möchte, wie mache ich das?
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Access Abfrage mit Bedingung
26.10.2021 17:09:21
ChrisL
Hi Ronald
ungetestet, etwa so...

strQuery = "SELECT * FROM tKunden WHERE fKdNachname  'Müller' ORDER BY fKdNummer ASC"
https://www.w3schools.com/sql/sql_where.asp
cu
Chris
AW: Access Abfrage mit Bedingung
26.10.2021 17:12:02
Ronald
Danke Chris, das probier ich aus.
Formeln hab ich instinktiv in pre-Klammern gesetzt. komischerweise hat es mir in der Vorschau den Code nicht separat angezeigt. Jetzt, wo Du geantwortet hast, jedoch schon. Seltsam. Aber gut zu wissen, daß ichs richtig gemacht habe.
Gruß Ronald
Anzeige
AW: Access Abfrage mit Bedingung
26.10.2021 17:14:13
ChrisL
ja die Vorschau entspricht nicht ganz der endgültigen Ansicht...
AW: Access Abfrage mit Bedingung
26.10.2021 17:38:01
Ronald
Kann ich eigentlich bei dieser Abfrage

strQuery = "SELECT * FROM tKunden WHERE fKdStatus  'Gelöscht' ORDER BY fKdNummer ASC"
Gleich noch einen Zähler mit einfummeln, der mir die Anzahl Datensätze insgesamt zählt (also inklusive derer, die er überspringt)
beziehungsweise beide? Die Übersprungenen und die Nichtübersprungenen? Wie auch immer :-)
Danke im Voraus und Gruß
Ronald
Anzeige
AW: Access Abfrage mit Bedingung
26.10.2021 18:48:40
Yal
Hallo Ronald,
Du kannst nur einen Zaehler herausgeben, wenn diese Teil der Datenbestand.
Alternativ könntest Du die Abfrage über Power Query anstossen, dort eine Index-Spalte einfügen (Zähler) und anschliessend die nicht gewünschte Datensätze rausfiltern. Die PW-Abfrage kannst Du per VBA ansprechen.
Dritte Möglichkeit wäre eine Function in Access einzubauen, die eine SQL-Abfrage als Parameter annimmt und eine Zählung herausgibt. Etwas umständlich.
VG
Yal
Anzeige
AW: Access Abfrage mit SELECT COUNT
27.10.2021 09:18:13
Ronald
Könnte man nicht auch auf diese Art zählen, wieviele Zeilen die DB hat?

strQuery1 = "SELECT COUNT (fKdNummer) FROM tKunden"
Set rs = cn.Execute(strQuery1)
MsgBox strQuery1
In diesem Falle sollte doch dann strQuery1 eine Zahl enthalten. Tut sie aber nicht.
Da ist einfach der zugewiesene String drin. Irgendwie scheine ich noch einen Denkfehler zu haben.
Ich hab das von hier:

https://www.datenbanken-verstehen.de/sql-funktionen/sql-count-funktion/

Wahrscheinlich liegts daran, daß es in VBA die Syntax noch etwas anders ist. Wäre toll,
wenn jemand eine Idee hätte.
Danke im Voraus.
Gruß Ronald
Anzeige
AW: Access Abfrage mit SELECT COUNT
27.10.2021 09:24:28
peterk
Hallo
Das Abfrageergebnis steht in "rs" ! (strQuery1 ist ja Dein SQL Kommando)
Peter
AW: Access Abfrage mit SELECT COUNT
27.10.2021 09:27:34
Ronald
Dann hätte ich statt

Msgbox strQuery1
einfach

Msgbox CStr(rs)
Aber auch da kommt "Typen unverträglch".
Anzeige
AW: Access Abfrage mit SELECT COUNT
27.10.2021 09:56:53
ChrisL
Hi
So...

Set rs = cn.Execute("SELECT COUNT(fKdNummer) AS Anzahl FROM tKunden")
MsgBox rs.Fields("Anzahl").Value
Da die Kriterien unterschiedlich sind (einmal SELECT mit Einschränkung 'gelöscht' und einmal ohne Einschränkung für Anzahl) braucht es zwei separate Abfragen. Wenn noch andere Auswertungen folgen könnte es sinnvoll sein die Daten ungefiltert zu selektieren und innerhalb Excel auszuwerten so dass du nicht mehrfach selektieren musst.
cu
Chris
Anzeige
AW: Access Abfrage mit SELECT COUNT
27.10.2021 10:03:54
Ronald
Funktioniert prächtig.
Vielen herzlichen Dank!
Wünsche noch einen schönen Tag.
Gruß Ronald
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Access Abfrage mit Bedingungen optimal nutzen


Schritt-für-Schritt-Anleitung

  1. Abfrage erstellen: Wenn Du eine Access Abfrage mit Bedingungen erstellen möchtest, beginne mit der SQL-Anweisung. Wenn Du beispielsweise alle Datensätze ohne den Nachnamen "Müller" abfragen möchtest, lautet der SQL-Befehl:

    strQuery = "SELECT * FROM tKunden WHERE fKdNachname <> 'Müller' ORDER BY fKdNummer ASC"
  2. Zähler einfügen: Um die Anzahl der Datensätze zu zählen, kannst Du eine separate Abfrage verwenden:

    Set rs = cn.Execute("SELECT COUNT(fKdNummer) AS Anzahl FROM tKunden")
    MsgBox rs.Fields("Anzahl").Value
  3. Daten in die Listbox laden: Nutze eine Schleife, um die Daten in eine Listbox zu laden, wobei Du die unerwünschten Datensätze überspringst.

    Do While Not rs.EOF
       If rs.Fields("fKdNachname").Value <> "Müller" Then
           frmAuswahl.lstAuswahlKundennummer_KV.AddItem rs.Fields("fKDNummer").Value
           frmAuswahl.lstAuswahlNachname_KV.AddItem rs.Fields("fKdNachname").Value
           frmAuswahl.lstAuswahlVorname_KV.AddItem rs.Fields("fKdVorname").Value
           frmAuswahl.lstAuswahlOrt_KV.AddItem rs.Fields("fKdOrt").Value
       End If
       rs.MoveNext
    Loop

Häufige Fehler und Lösungen

  • Fehler bei der SQL-Syntax: Stelle sicher, dass Du die richtige Syntax verwendest. Beispielsweise muss der Operator für "ungleich" als <> geschrieben werden.

  • Typen unverträglich: Wenn Du den Fehler "Typen unverträglich" erhältst, überprüfe, ob Du versuchst, den Wert eines Recordsets direkt anzuzeigen. Nutze stattdessen den richtigen Feldnamen:

    MsgBox rs.Fields("Anzahl").Value
  • Zähler gibt falsche Werte aus: Wenn der Zähler nicht korrekt funktioniert, überprüfe, ob Du ihn in der richtigen Abfrage platzierst. Unterschiedliche Abfragen erfordern separate SQL-Befehle.


Alternative Methoden

  • Power Query nutzen: Du kannst eine Abfrage über Power Query anstoßen, um eine Index-Spalte (Zähler) einzufügen und die unerwünschten Datensätze herauszufiltern.

  • Access-Funktionen verwenden: Erstelle eine benutzerdefinierte Funktion in Access, die eine SQL-Abfrage als Parameter annimmt und die Anzahl der Datensätze zurückgibt. Dies kann nützlich sein, wenn Du komplexere Berechnungen benötigst.


Praktische Beispiele

  1. Abfrage mit mehreren Bedingungen: Wenn Du in Deiner Abfrage auch den Status "Gelöscht" ausschließen möchtest, kannst Du dies so umsetzen:

    strQuery = "SELECT * FROM tKunden WHERE fKdNachname <> 'Müller' AND fKdStatus <> 'Gelöscht' ORDER BY fKdNummer ASC"
  2. Zähler für bestimmte Datensätze: Um die Summe bestimmter Datensätze zu berechnen, könntest Du folgende Abfrage verwenden:

    strQuerySum = "SELECT SUM(fBetrag) AS Gesamtbetrag FROM tKunden WHERE fKdStatus <> 'Gelöscht'"

Tipps für Profis

  • Nutze die Access Wenn-Funktion für komplexere Bedingungen in Deinen Abfragen. So kannst Du mehrere Bedingungen miteinander kombinieren.

  • Achte darauf, Deine Abfragen regelmäßig zu dokumentieren, um bei Änderungen den Überblick zu behalten.

  • Experimentiere mit Access Anfügeabfragen, um nur neue Datensätze in eine andere Tabelle zu übertragen.


FAQ: Häufige Fragen

1. Wie kann ich mehrere Bedingungen in einer Access Abfrage verknüpfen?
Du kannst mehrere Bedingungen mit AND oder OR in Deiner SQL-Abfrage verknüpfen, z.B. WHERE Bedingung1 AND Bedingung2.

2. Was sind die Unterschiede zwischen Auswahl- und Anfügeabfragen in Access?
Eine Auswahlabfrage zeigt Daten an, während eine Anfügeabfrage Daten in eine Tabelle einfügt.

3. Wie zähle ich die Anzahl der Datensätze, die bestimmten Bedingungen entsprechen?
Verwende die COUNT-Funktion in Deiner SQL-Abfrage, um die Anzahl der Datensätze zu zählen, die bestimmte Kriterien erfüllen.

4. Kann ich auf Textfeldbedingungen in Access zugreifen?
Ja, Du kannst Abfragen mit Bedingungen für Textfelder erstellen, z.B. WHERE fKdNachname LIKE 'Müller%'.

5. Wie kann ich sicherstellen, dass meine Abfragen effizient sind?
Überprüfe regelmäßig die Ausführungspläne Deiner Abfragen und stelle sicher, dass Du Indizes auf häufig verwendeten Feldern hast.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige