Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: silentwolf am Oktober 04, 2015, 09:43:33

Titel: SQLString function ... Wo ist hier ein Fehler?
Beitrag von: silentwolf am Oktober 04, 2015, 09:43:33
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 :)
Titel: Re: SQLString function ... Wo ist hier ein Fehler?
Beitrag von: Josef P. am Oktober 04, 2015, 10:01:47
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
Titel: Re: SQLString function ... Wo ist hier ein Fehler?
Beitrag von: silentwolf am Oktober 04, 2015, 10:05:50
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  :-[
Titel: Re: SQLString function ... Wo ist hier ein Fehler?
Beitrag von: Josef P. am Oktober 04, 2015, 10:09:15
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. ;)
Titel: Re: SQLString function ... Wo ist hier ein Fehler?
Beitrag von: silentwolf am Oktober 04, 2015, 10:12:37
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)
Titel: Re: SQLString function ... Wo ist hier ein Fehler?
Beitrag von: Josef P. am Oktober 04, 2015, 10:16:26
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
Titel: Re: SQLString function ... Wo ist hier ein Fehler?
Beitrag von: silentwolf am Oktober 04, 2015, 10:22:55
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.. :-[
Titel: Re: SQLString function ... Wo ist hier ein Fehler?
Beitrag von: Josef P. am Oktober 04, 2015, 10:27:19
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
Titel: Re: SQLString function ... Wo ist hier ein Fehler?
Beitrag von: silentwolf am Oktober 04, 2015, 10:32:26
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!
Titel: Re: SQLString function ... Wo ist hier ein Fehler?
Beitrag von: Josef P. am Oktober 04, 2015, 10:36:54
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
Titel: Re: SQLString function ... Wo ist hier ein Fehler?
Beitrag von: MzKlMu am Oktober 04, 2015, 10:37:41
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.
Titel: Re: SQLString function ... Wo ist hier ein Fehler?
Beitrag von: silentwolf am Oktober 04, 2015, 10:41:29
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 :)
Titel: Re: SQLString function ... Wo ist hier ein Fehler?
Beitrag von: MzKlMu am Oktober 04, 2015, 10:50:20
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.
Titel: Re: SQLString function ... Wo ist hier ein Fehler?
Beitrag von: silentwolf am Oktober 04, 2015, 10:54:44
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