SQL Abfrage

  • VB6

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von FirefighterNDS.

    SQL Abfrage

    Hallo Forum,

    ich bin jetzt echt am verzweifeln. Habe schon alle mein Bücher duchwälzt und auch schon "gegoogelt" aber bisher leider keine Lösung gefunden.

    Ich bin gerade dabei, ein Programm zur Datenbank Abfrage zu schreiben. Die Datenbank wurde mit Access erstellt, mein System ist Windoof XP und VB 6 SP 6.

    Nun mein Problem:

    Ich habe 4 DataCombos auf einem Frame, die ich mit den Daten von 4 Spalten aus der Access Datenbank gefüllt habe. Wenn ich in den Combos einen Eintrag anklicke, wird dieser in eine Variable geschrieben. Für die 4 Combos jeweils eine Variable. Wenn ich auf den Button "Suchen" klicke, wird ein neues Frame geladen, wo ich ein MSHFlexGrid zur Anzeige nutze. Mein Recordsource sieht so aus:

    With rss
    .ActiveConnection = con
    .CursorLocation = adUseClient
    .LockType = adLockOptimistic
    .Source = "SELECT ID, Ort, ..... FROM Kanal " & _
    "WHERE Ort = '" & Variable1 & "' AND " & _
    "abc = '" & Variable2 & "' AND cde = '" & Variable3 & "' AND efg = '" & Variable4 & "'"
    .Open
    End With

    Ich möchte jetzt z.B. nur die ersten beiden Combos auswählen, also haben Variable1 und Variable2 einen String, Variable3 und 4 haben einen LeerString.

    Wenn ich mir das Ergebnis anzeigen lassen will, wird natürlich nichts angezeigt, wegen der beiden LeerStrings.

    Wie kann ich das Problem am einfachsten lösen? Oder muss ich immer einen neuen Recordset schreiben, mit Select Case oder If, ElseIf? Das möchte ich gerade nicht, da es nicht bei den 4 Combos bleiben wird...

    Ich hoffe das Problem ist verständlich und ihr könnte mir helfen...

    Danke schon mal

    Gruß

    Daniel

    EDIT:

    Habe vergessen zu schreiben, das es auch sein kann, das ich z.B. nur Variable 3 und 4 haben möchte, oder 1 und 4... Geht das mit nur einem Recordset?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „FirefighterNDS“ ()

    Hi,

    meinst Du das in etwa so ???

    Quellcode

    1. Dim sqlStr as String
    2. ...
    3. sqlStr="SELECT * FROM Kanal WHERE "
    4. If Combo1.Text<>"" Then sqlStr=sqlStr & "Ort='" & Combo1.Text &"'"
    5. If Combo2.Text<>"" Then sqlStr=sqlStr & "abc='" & Combo2.Text &"'"
    6. If Combo3.Text<>"" Then sqlStr=sqlStr & "cde='" & Combo3.Text &"'"
    7. If Combo4.Text<>"" Then sqlStr=sqlStr & "efg='" & Combo4.Text &"'"
    8. ...
    9. rss.Source=sqlStr
    10. rss.Open
    11. ...



    bye ...

    LaMa5
    Die Wissenschaft wird nie ein besseres Kommunikationssystem in den Büros erfinden können als die Kaffeepause.
    (Autor: Earl Wilson, amerik. Schriftsteller)

    https://www.serviceteam-md.de
    Hi,

    danke für die schnelle Antwort!

    Wenn ich den Code so ausführe kommt eine Fehlermeldung:

    Laufzeitfehler '-2147217900 (80040e14)':
    Syntaxfehler (fehlernder Operator) in Abfrageausdruck ...

    Wenn ich auf Debuggen klicke, markiert er mir "rss.open"

    Meine Abfrage siehr so aus:

    Dim sqlStr As String
    sqlStr = "SELECT * FROM Kanal WHERE "
    If Funkr <> "" Then sqlStr = sqlStr & "Funkverkehrskreise = '" & Funkr & "'"
    If Bezirk <> "" Then sqlStr = sqlStr & "Bezirksregierung = '" & Bezirk & "'"
    If Ort <> "" Then sqlStr = sqlStr & "Ort = '" & Ort & "'"
    If Orga <> "" Then sqlStr = sqlStr & "Organisation = '" & Orga & "'"
    rss.Source = sqlStr
    rss.Open

    Aber ich habe mir den SELECT String dann mal anzeigen lassen. Soweit ist das ja ok, nur das wenn ich eine Combo leer lasse, diese Variable also ein Leerstring hat, steht in dem SELECT String der Wert des ersten Datensatz aus der Datenbank. Wenn ich aber eine Combo leer lasse, soll dieser Wert ignoriert werden!

    Beispiel:

    Combo1 ist die Spalte "Funkverkehrskreis" und die Variable "Funk"
    Combo2 ist die Spalte "Bezirksregierung" und die Variable "Bezirk"
    Combo3 ist die Spalte "Ort" und die Variable "Ort"
    Combo4 ist die Spalte "Organisation" und die Variable "Orga"

    Combo1 und 2 müssen einen Wert haben, sonst ist der Suchen Button inaktiv!

    Angenommen:

    Funk = a
    Bezirk = b
    Ort = ""
    Orga = ""

    dann soll mir das FlexGrid alle Daten mit den beiden Werten anzeigen und "Ort" und "Orga" sollen ignoriert werden.

    oder:

    Funk = a
    Bezirk = b
    Ort = ""
    Orga = d

    dann soll mir das FlexGrid alle Daten der drei Werte anzeigen, und "Ort" soll ignoriert werden.

    Ich möchte also mit den Combo3 und 4 das Ergebniss einschränken. Wobei es wie gesagt noch etliche Combos mehr werden.

    Ich hoffe das war ein wenig verständlicher...

    Gruß

    Daniel
    Hi,

    das mit dem Leerzeichen stimmt, ist mir gar nicht aufgefallen.

    Die Fehlermeldung besteht aber immer noch und das Problem, das wenn ich nur Variable 1 also "Funk" und Variable 2 also "Bezirk" setze, er die anderen Variablen mit den Daten des ersten Datensatz der Tabelle auffüllt...
    Hi,

    das mit der Fehlermeldung hat daran gelegen, das die "AND"s gefehlt haben.

    Quellcode

    1. Dim sqlStr As String
    2. sqlStr = "SELECT * FROM Kanal WHERE "
    3. If Funkverkehr <> "" Then sqlStr = sqlStr & "Funkverkehrskreise = '" & Funkverkehr & "' AND "
    4. If Bezirk <> "" Then sqlStr = sqlStr & "Bezirksregierung = '" & Bezirk & "' AND "
    5. If Orts <> "" Then sqlStr = sqlStr & "Ort = '" & Orts & "' AND "
    6. If Orga <> "" Then sqlStr = sqlStr & "Organisation = '" & Orga & "' AND "
    7. If Right(sqlStr, 4) = "AND " Then
    8. sqlStr = Left(sqlStr, Len(sqlStr) - 4)
    9. End If
    10. rss.Source = sqlStr
    11. rss.Open
    12. Text1.Text = sqlStr


    so sieht jetzt mein aktueller Code aus, es funktioniert alles!

    Das Problem mit den automatisch aufgefüllten Variablen lag bei mir!

    Danke für eure Hilfe! Echt super!

    Gruß

    Daniel

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „FirefighterNDS“ ()

    Hi,

    @FirefighterNDS
    Sorry für die fehlenden "AND"'s. Da muss ich wohl schon ganz schön blind gewesen sein. ;( ;(


    bye ...

    LaMa5.
    Die Wissenschaft wird nie ein besseres Kommunikationssystem in den Büros erfinden können als die Kaffeepause.
    (Autor: Earl Wilson, amerik. Schriftsteller)

    https://www.serviceteam-md.de
    Hi,

    ist ja nicht schlimm, ist mir ja selber aufgefallen.

    Du, bzw. ihr habt mir auf jeden fall sehr geholfen. Konnte den Code auch noch an anderer Stelle sehr gut gebrauchen, in etwas abgeänderter Form...

    Schönes WE noch!

    Gruß

    Daniel