Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

SQLString function ... Wo ist hier ein Fehler?

Begonnen von silentwolf, Oktober 04, 2015, 09:43:33

⏪ vorheriges - nächstes ⏩

silentwolf

Hallo mal wieder ...
Ich versuche gerade einen SQLString zusammen zu basteln der aber leider so nicht funktioniert.
In einer Prozedur hier der Teil des Codes     With ObjektData
        .ActiveConnection = ObjekteConn
        .Source = GetSQLString
        .LockType = adLockReadOnly
        .CursorType = adOpenForwardOnly
        .Open

    End With

möchte ich als SQLString folgende Funktion benutzen.

Function GetSQLString() As String
   
    Dim strOrt As String
    Dim SQLString As String
   
    strOrt = Application.InputBox("Eingabe von Ort", Type:=2)
   
    SQLString = "SELECT Obj_id, Obj_Adresse, Obj_Name, Obj_Ort, Obj_Plz, Obj_B_Land, Obj_Kon_Id_f, Obj_Aktiv " & _
    "FROM tblObjekt " & _
    "WHERE Obj_Ort = strOrt " & _
    " ORDER BY Obj_Name ASC;"

    GetSQLString = SQLString
   
End Function


Ich bekomme keine Fehlermeldung? ..
In der Sub Prozedur wenn ich einen SQL String als Source verwende funktioniert es einwandfrei...
Aber wenn ich eben den SQLString verwende in der source dann führt der Code aus ohne Fehler aber es passiert nichts...

In der Prozedur soll ein weiters Datenblatt geöffnet werden mit dem Filter aus einer access Abfrage.

Hoffe ich bin erstens im richtigen Forum und zweitens jemand könnte mir sagen wo der Fehler begraben ist :(
Bitte!

Dankeschön!

Schönen Sonntag :)

Josef P.

Hallo!

Ein Tipp zum Finden des Fehlers:
SQLString = "SELECT Obj_id, Obj_Adresse, Obj_Name, Obj_Ort, Obj_Plz, Obj_B_Land, Obj_Kon_Id_f, Obj_Aktiv " & _
    "FROM tblObjekt " & _
    "WHERE Obj_Ort = strOrt " & _
    " ORDER BY Obj_Name ASC;"

    Debug.Print SQLString
    stop ' im Direktfenster den SQL-Ausdruck ansehen.

    GetSQLString = SQLString


Im Direktfenster steht nun:
SELECT Obj_id, Obj_Adresse, Obj_Name, Obj_Ort, Obj_Plz, Obj_B_Land, Obj_Kon_Id_f, Obj_Aktiv FROM tblObjekt WHERE Obj_Ort = strOrt  ORDER BY Obj_Name ASC;

Was fällt dir dabei auf? ;)

mfg
Josef

silentwolf

Hi Josef,

vielen Dank für Deine Antwort!
Leider bin ich in SQL mehr als schwach unterwegs muss mir immer alles zusammen klauben sozusagen ...

Also das FROM und WHERE und ORDER BY und ASC fehler sind oder wie??
....( aber mehr schon nicht leider  :-[

Josef P.

#3
Die Syntax des SQL-Ausdrucks stimmt (die Farben um From usw. kommen durch die Code-Formatierung).
Aber steht das in die Inputbox eingegebene Wort im SQL-Text?

Anm.: ich versuche, dass du den Fehler selbst entdeckst und ein "Aha-Effekt" entsteht.
.. dann passiert dir dieser Fehler vermutlich kein 2. Mal. ;)

silentwolf

Ja das mit dem Aha Effekt das glaub ich Dir gern ...
das wäre ja schön .. :)
Ich schau noch mal vielleicht gibt es den ja Heute mal als Sonntags Geschenk  8)

Josef P.

Dann grenze ich den Fehlerbereich etwas ein:

Stell dir einmal vor, du wärst ein Datenbanksystem und jemand gibt dir folgende SQL-Anweisung:
select .... from where Obj_Ort = strOrt
Nach welchem Ort musst du jetzt suchen?

Beachte:  du bist das Datenbanksystem und hast keinen Zugriff auf die Inhalte von VBA-Variaben.

mfg
Josef

silentwolf

Leider wird das nichts mit dem Geschenk..
Die Eingabe in die Inputbox ist ja als Variable in strOrt übergeben
und diese habe ich ja als WHERE Statement oder nicht?

Muss diese strOrt auch noch im SQLString sein? Oder wie?? Dort habe ich ja Obj_Ort
Na wäre ja schön wenn ich selbst drauf kommen könnte aber ich sehe hier keinen Weg das ich das schaffe...

Hier verstehe ich doch immer noch Bahnhof.. :-[

Josef P.

#7
Zitatund diese habe ich ja als WHERE Statement oder nicht?
Wie schon geschrieben: das Datenbanksystem hat keinen direkt Zugriff auf VBA-Variablen und kann nur den Text verarbeiten, den du ihm übergibst.
Du hast folgendes übergeben:
SELECT .... FROM WHERE Obj_Ort = strOrt
und nicht
SELECT .... FROM WHERE Obj_Ort = 'EinSuchbegriff'

strOrt ist für den SQL-Interpreter eine Anweisung bzw. ein Parameter, da der Ausdruck weder Text noch ein Datenfeld ist.

Die Frage ist also: wie setzt man Variableninhalte zu einem Text zusammen?

Zum Verständnis:
dim S1 as String
Dim S2 as String
Dim S3 as String

S1 = "Hallo"
S2 = "Du"

S3 = ???
' Was muss man nun machen, damit in S3 dieser Text steht: "Hallo Du!"
' Funktioniert:
S3 = "S1 S2!"
' oder vielleicht doch eher
S3 = S1 & " " & S2 & "!"


mfg
Josef

silentwolf

ah jetzt kam doch noch der Aha Effekt aber leider erst mit Deiner Hilfe!
Bin ich aber froh das Du es mir doch noch verraten hast :)
Ach noch eine kurze Frage aber die oder der Suchbegriff ist ja noch abhänging ob man es klein oder groß schreibt oder?
Muss man hier dann mit Lbound oder Ubound arbeiten?


Vielen Dank!

Josef P.

Ob Groß-/Kleinschreibung im Filterausdruck beachtet wird, hängt vom Datenbanksystem ab.
Access/Jet unterscheidet bei "Feld='Text'" oder bei "Feld like 'Text'" nicht zw Groß- und Kleinschreibung.

BTW:
Vielleicht hilft dir beim Zusammestellen von Kriterien-Texten dieser Text:
http://wiki.access-codelib.net/SQL-Text_f%C3%BCr_Filterbedingung

mfg
Josef

MzKlMu

Hallo,
Groß und Kleinschreibung spielt hier keine Rolle, ist aber im Klassenmodul mit
Option Compare Database(siehe Hilfe) einstellbar.
Und Lbound oder Ubound hat mit Groß und Kleinschreibung nichts zu tun. Das sind die unteren und oberen Grenzen eines Arrays.
Was Du meinst ist UCase und LCase, aber das brauchst Du nicht.
Gruß Klaus

silentwolf

Hallo Josef
Hallo Klaus!

Vielen Dank für Eure Hilfe!!
Also ich habe es nun schon verstanden das ich den strOrt also in einen string Umwandeln muss und das geht mit 'strOrt'
Oder ""strOrt""... Aber das musste ich erst realisieren.
Wie auch immer nun hab ich den SQLString geändert und der Code fügt mir eine neue Tabelle ein aber der Filter ist leer..
Also nur die Überschriften .. also dachte ich es kommt wegen der Groß und Kleinschreibung.. aber dem ist ja nicht so...
Jetzt gilt es wieder einen neuen Fehler zu beseitigen uff :)

MzKlMu

Hallo,
Du übergibst einfach nur den Text "strOrt" aber nicht den Inhalt der Variablen. Du musst deren Inhalt auswerten. Ich bin ziemlich sicher, dass Du das auch schon mal so gemacht hast (in anderem Zusammenhang).
SQLString = "SELECT Obj_id, Obj_Adresse, Obj_Name, Obj_Ort, Obj_Plz, Obj_B_Land, Obj_Kon_Id_f, Obj_Aktiv " & _
    "FROM tblObjekt " & _
    "WHERE Obj_Ort = '" & strOrt & "'" & _
    " ORDER BY Obj_Name ASC"


Wenn Du SQLString mit Debug.Print anzeigst, siehst Du den Unterschied.
Gruß Klaus

silentwolf

Hallo Klaus!
Ja so funktioniert es nun einwandfrei!
Ma vielen lieben Dank!
Ja das kann schon sein das ich es schon mal gemacht habe aber leider nicht oft und da gibts immer wieder mal probleme leider... aber ich werde mich bemühen :)

Schönen Sonntag noch!!

LG