Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
SQL-String erzeugen: ... man muß sich bloß zu helfen wissen
zurück: Newbie Access Abfrage weiter: Variable Anzahl von Feldern im Bericht Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Tutorial Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
alf_2006
Access/Excel-Trainer; ABAP-Entwickler


Verfasst am:
13. Jul 2006, 14:38
Rufname:

SQL-String erzeugen: ... man muß sich bloß zu helfen wissen - SQL-String erzeugen: ... man muß sich bloß zu helfen wissen

Nach oben
       

In einigen Themen taucht ab und an die Frage auf, wie man den SQL-String für ein Recordset-Objekt oder die Bedingung für ein DLookUp schreibt, ohne das haufenweise Fehlermeldungen kommen. Ich mache es so:
  1. Abfrage erstellen, die genau das tut, was ich auch mit dem SQL-String erreichen will. Beispiel: Es sollen aus einer Tabelle Namen alle Datensätze ausgegeben werden (oder mit DLookUp herausgefunden werden, ob es solche gibt), die ein "r" im Feld "Nachname" enthalten. Mit dem Entwurfsassistenten die Felder (z.B. hier "Nachname" und "Vorname") auswählen und in diesem Falle unter Nachname das Kriterium
    Zitat:
    wie "*r*"
    eintragen.
  2. Auf die SQL-Ansicht umschalten. Die liefert uns folgenden SQL-Code:
    Code:
    SELECT Nachname, Vorname
    FROM   Namen
    WHERE  Nachname Like '*r*';
  3. Den SQL-Code in einen einfachen Texteditor kopieren und dort zunächst nur alle Anführungsstriche durch Hochkommata ersetzen.
  4. Den gesamten Code oder den Kriterienteil einer String-Variablen zuweisen, also:
    a. Recordset:
    Code:
        strSQL = "SELECT Nachname, Vorname
    FROM Namen
    WHERE (((Namen.Nachname) Like '*r*'));"
    b. DLookUp-Kriterienausdruck:
    Code:
    "Nachname Like '*r*'"
    (d.h. alles vor dem "Where" und das Schlüsselwort "where" sowie ggfs. überflüssige Klammern weg)
  5. Jetzt wird erstmal einiges rot. Für das Beispiel Recordset sieht das dann so aus, wobei die dritte Zeile komplett rot wird:
    Code:
        strSQL = "SELECT Nachname, Vorname"
    FROM Namen
    WHERE (((Namen.Nachname) Like '*r*'));"
  6. Am Ende der Zeile vor den Anführungsstrichen jeweils eine Leertaste, danach Leertaste + Listentrennzeichen ( _ ) eingeben, ab der Zweiten Zeile jeweils das Konkatenierungszeichen "&", Leertaste + Anführungsstriche ergibt dies:
    Code:
        strSQL = "SELECT Nachname, Vorname " & _
                   "FROM Namen " & _
                  "WHERE Nachname Like '*r*';"
  7. Nun einen Test mit Debug.Print machen:
    Code:
        Debug.Print strSQL
    Dort muß jetzt exakt das gleiche stehen, wie vor her in der SQL-Ansicht zur Abfrage. Um es zu vergleichen, kopiert man es am besten in den Text-Editor unter die Kopie vom SQL aus der Abfrage und macht vor "From" und "Where" die entsprechenden Zeilenumbrüche. Im Texteditor sieht das dann so aus:
    Code:
    SELECT Nachname, Vorname
    FROM Namen
    WHERE Nachname Like '*r*';

    SELECT Nachname, Vorname
    FROM Namen
    WHERE Nachname Like '*r*';
    Wie wir sehen, sind beide Strings exakt gleich.
  8. Jetzt kommt der schwierigste Teil, das Ersetzen des Strings - hier
    Code:
    ... Like '*r*' ...
    , in anderen Fällen
    Code:
    " ... = 'Meyer' ...
    durch eine Variable. Dazu muß diese erstmal definiert sein, bei mir z.B.
    Code:
        Dim kSubStrNachnam As String
    Nun folgende Schritte:
  9. SQL-String direkt hinter dem Hochkomma mit Anführungsstrichen unterbrechen:
    Code:
                  "WHERE Nachname Like '" *r*';"
  10. Hinter den Anführungsstriche folgendes eingeben: Leertaste, Verkettungszeichen &
  11. vor dem 2. Hochkomma eingeben: Leertaste, Verkettungszeichen, Leertaste, Anführungsstriche - das Zwischenergebnis sieht so aus:
    Code:
                   "WHERE Nachname Like '" & *r* & "';"
  12. Nun folgt der letzte Schritt: Wir ersetzen den Ausdruck zwischen den beiden &-Zeichen durch unsere Variable und weisen dieser Variablen den String zu, der vorher "hart" codiert war:
    Code:
        kSubStrNachnam = "*r*"
        strSQL = "SELECT Nachname, Vorname " & _
                   "FROM Namen " & _
                  "WHERE Nachname Like '" & kSubStrNachnam & "';"
        Debug.Print strSQL
  13. Ausführen mit debug.print muß im Direktfenster wieder exakt den gleichen String ergeben, wie vorher unser SQL.
Wenn das der Fall ist, ist das Ganze fertig. Wir löschen die debug.print-Zeile und ergänzen es nur noch um eine Sicherheitsabfrage, dann sieht das - etwas erweitert zu einem "vollgekapselten" Prozedur-Baustein - so aus:
Code:
Sub suche(kSubStrNachnam As String, rs1 As DAO.Recordset, _
          rueckgabeWert As Integer)         'rueckgabewert = 0 -> kein Erfolg,
                                   '= 1 -> genau ein Datensatz wurde gefunden,
                                                            '= 2 -> mehrere DS
    Dim strSQL As String
   
    If kSubStrNachnam <> "" Then
        strSQL = "SELECT Nachname, Vorname " & _
                   "FROM Namen " & _
                  "WHERE Nachname Like '" & kSubStrNachnam & "';"
        '... weitere Anweisungen z.B. "Set rs1 = CurrentDb.OpenRecordset..."
        Set rs1 = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)
        If rs1.BOF And rs1.EOF Then
            rueckgabeWert = 0
          Else
            rs1.MoveLast
            If rs1.RecordCount = 1 Then
                rueckgabeWert = 1
              Else
                rueckgabeWert = 2
            End If
            rs1.MoveFirst
        End If
      Else
        MsgBox "Eine Abfrage konnte nicht ausgeführt werden!", vbOKOnly, _
               "Fehler:"
        rueckgabeWert = 0
    End If
End Sub
Ruft man diese Prozedur z.B. - testweise - mit
Code:
Sub suche_aufruf()
    Dim zurueck As Integer
    Dim rs As DAO.Recordset
    Dim subStrVar As String
   
    subStrVar = "*r*"
    suche subStrVar, rs, zurueck
    If zurueck <> 0 Then
        If zurueck > 1 Then
            Debug.Print "Mehrere Datensätze gefunden, z.B.:"
          Else
            Debug.Print "Genau ein Datensatz gefunden:"
        End If
        Debug.Print rs![Nachname] & ", " & rs![Vorname]
      Else
        Debug.Print "Nichts gefunden!"
    End If
    rs.Close
    Set rs = Nothing
End Sub
auf, so gibt debug.print im Direktfenster folgendes Ergebnis aus:
Zitat:
Mehrere Datensätze gefunden, z.B.:
Werner, Helmut
Das ganze wirkt sehr langwierig, ist aber zuverlässig und verhindert die endlose Nerverei, wenn man meinte, es mal eben mit einer "intelligenten Zack-Zack-Methode" erledigen zu können!

a.

_________________
Bitte ggfs. Feedback, ob es funktioniert! Danke!
rita2008
Im Profil kannst Du frei den Rang ändern


Verfasst am:
13. Jul 2006, 16:04
Rufname:
Wohnort: Berlin


AW: SQL-String erzeugen: ... man muß sich bloß zu helfen wis - AW: SQL-String erzeugen: ... man muß sich bloß zu helfen wis

Nach oben
       

hallo Alf, das gehört doch eigentlich in die Rubrik "Tipps und Tricks"!
_________________
mfg Rita

Antworten bitte hier im Forum, nicht als private Nachricht. Danke
alf_2006
Access/Excel-Trainer; ABAP-Entwickler


Verfasst am:
13. Jul 2006, 16:06
Rufname:

AW: SQL-String erzeugen: ... man muß sich bloß zu helfen wis - AW: SQL-String erzeugen: ... man muß sich bloß zu helfen wis

Nach oben
       

Wo es "hingehört", weist du sicher besser als ich. Aber ich denke, es ist dort gut aufgehoben, wo es gebraucht wird - ich wollte es ursprünglich sogar als direkte Antwort auf eine Frage in einem anderen Thema posten.

Ich denke, die Moderatoren werden es "umhängen", wenn es hier fehl am Platze ist.

a.

_________________
Bitte ggfs. Feedback, ob es funktioniert! Danke!
Helge
Moderator Trotzdem kann i. nicht alles wissen


Verfasst am:
13. Jul 2006, 18:05
Rufname:
Wohnort: Hannover / Seelze

AW: SQL-String erzeugen: ... man muß sich bloß zu helfen wis - AW: SQL-String erzeugen: ... man muß sich bloß zu helfen wis

Nach oben
       

Hallo alf_2006, Very Happy

schöner Beitrag und Rita hat natürlich recht,
dass er in Tipps & Tricks besser aufgehoben ist,
drum habe ich ihn mal dort hin Verschoben.... Wink

Gruß Helge
Willi Wipp
Moderator


Verfasst am:
22. Jan 2008, 11:12
Rufname:
Wohnort: Raum Wiesbaden


AW: SQL-String erzeugen: ... man muß sich bloß zu helfen wis - AW: SQL-String erzeugen: ... man muß sich bloß zu helfen wis

Nach oben
       

Diskussion: SQL-String erzeugen: ... man muß sich bloß zu helfen... abgetrennt.
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Access Tabellen & Abfragen: Abfragen sortieren und Rangliste erzeugen 1 Frog65 803 21. Aug 2011, 18:52
Frog65 Abfragen sortieren und Rangliste erzeugen
Keine neuen Beiträge Access Tabellen & Abfragen: Kann keine mde mehr erzeugen 28 sk42 1609 16. Aug 2011, 13:31
KlausMz Kann keine mde mehr erzeugen
Keine neuen Beiträge Access Tabellen & Abfragen: Tabellen automatisch erzeugen lassen in Access 26 AndreaRiemeier 2350 10. Aug 2010, 18:40
AS55 Tabellen automatisch erzeugen lassen in Access
Keine neuen Beiträge Access Tabellen & Abfragen: Datensätze erzeugen 5 AnnaLuise 304 23. Dez 2009, 23:31
MiLie Datensätze erzeugen
Keine neuen Beiträge Access Tabellen & Abfragen: Minutenwerte erzeugen 2 peter_bauer 285 07. Jul 2009, 09:20
peter_bauer Minutenwerte erzeugen
Keine neuen Beiträge Access Tabellen & Abfragen: könnt ihr mir beim vbs helfen 1 Judith W. 403 06. März 2009, 22:19
MiLie könnt ihr mir beim vbs helfen
Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten. Access Tabellen & Abfragen: Datum vergleichen! Bitte helfen bin am verzweifeln! 1 RocknRoller1337 305 27. Feb 2009, 14:28
KlausMz Datum vergleichen! Bitte helfen bin am verzweifeln!
Keine neuen Beiträge Access Tabellen & Abfragen: Bestellungsverwaltung - Abfragefenster erzeugen?? 2 werner922 593 08. Sep 2007, 19:44
jens05 Bestellungsverwaltung - Abfragefenster erzeugen??
Keine neuen Beiträge Access Tabellen & Abfragen: SQL-string und deklarierung 2 Neuling84 497 05. Apr 2007, 09:07
Neuling84 SQL-string und deklarierung
Keine neuen Beiträge Access Formulare: Tabellen erzeugen und in Form einbinden 4 Alwin 709 08. Okt 2005, 17:24
Alwin Tabellen erzeugen und in Form einbinden
Keine neuen Beiträge Access Formulare: Automatisch Datensätze zu erzeugen, ist möglich? 1 Gast 795 06. Okt 2005, 20:19
jens05 Automatisch Datensätze zu erzeugen, ist möglich?
Keine neuen Beiträge Access Formulare: Steuerelemente zur Laufzeit erzeugen 1 Gast 700 01. Aug 2005, 08:17
stpimi Steuerelemente zur Laufzeit erzeugen
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: PHP Forum