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 :)
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
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 :-[
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. ;)
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)
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
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.. :-[
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
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!
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
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.
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 :)
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.
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