Variable aus String

Hallo,

ich habe eine Abfrage über SQL.
katSQL = " SELECT Gemarkung.Gemarkung_ID, Gemarkung.Nummer, Gemarkung.Name, Flur.Flur_ID, Flur.Flurnummer, Flur.Gemarkung_ID"
katSQL = katSQL & " FROM Gemarkung INNER JOIN Flur ON Gemarkung.Gemarkung_ID = Flur.Gemarkung_ID"

Bisher habe ich dann die Werte immer in einer Listbox anzeigen lassen.
Me![lst_Gem_Flur].RowSource = katSQL
Me![lst_Gem_Flur].ColumnCount = 6
Me![lst_Gem_Flur].ColumnWidths = "0cm; 2,5cm; 2cm; 0cm; 1cm; 0cm "

Dieses Mal möchte ich den Selektierten Werten eine Variable zuweisen.
Im String steht der Geamrkung.Name und dem will ich eine Variable zuweisen.
Variable = Gemarkung.Name

Wie geht das? Was muss ich tuen?
Bitte um Hilfe.
Danke enrico

Hallo,

Also wenn ich dich richtig verstehe:
Du hast deine Liste gefuellt mit dem SQL-Statement.
Der Anwender waehlt irgenwas aus.
Du wills diese Auswahl in einer Variablen speichern, allerdings nicht die gebundene Spalte sondern eine Andere.

Wenn dem so ist, dann ist das nichr so schwierig:

myVar = Me![lst_Gem_Flur].Column(3)

Tschau
Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

HAllo Peter,

du hast mich falsch verstanden.
SO wie du es beschrieben hast, habe ich das bisher gemacht.

Jetzt habe ich ein SQL Statement aus zwei Tabellen.

katSQL = " SELECT Gemarkung.Gemarkung_ID, Gemarkung.Name, Flur.Flur_ID, Flur.Flurnummer, Flur.Gemarkung_ID"
katSQL = katSQL & " FROM Gemarkung INNER JOIN Flur ON Gemarkung.Gemarkung_ID = Flur.Gemarkung_ID"

Nun, wähle ich über Kombi-Felder noch Einschränkungen aus auf den kompletten SQL.

If Me!kom_Gem 0 Then
grp1 = Me![kom_Gem].Column(0)
If Me!kom_Flur 0 Then
grp2 = Me![kom_Flur].Column(0)
katSQL = katSQL & " WHERE (Flur.Gemarkung_ID) = " & grp1
katSQL = katSQL + " AND " & " (Flur.Flur_ID) = " & grp2
Else
katSQL = katSQL & " WHERE (Gemarkung.Gemarkung_ID) = " & grp1
katSQL = katSQL & " ORDER BY Flur.Flurnummer"
End If
Else
End If

Bisher habe ich mir dann den SQL String anzeigen lassen im Listenfeld.

Me![lst_Flur_ID].RowSource = katSQL
Me![lst_Flur_ID].ColumnCount = 5
Me![lst_Flur_ID].ColumnWidths = "0cm; 0cm; 1cm; 0cm; 0cm "

Diesmal möchte ich nicht im Listenfeld anzeigen, sondern den String weiterverwenden.
HAbe nun eine neue SQL um DAten hinzuzufügen.
Aber für Selektierung brauche ich Einschränkungskriterien.

strSQL = " SELECT ALK.Nachname, ALK.Vorname, ALK.Gemarkung, ALK.Flur, ALK.Zaehler, ALK.Nenner, ALK.FlaecheALK, ALK.Stand_ALK, ALK.GB_Blatt"
strSQL = strSQL & " FROM ALK"
strSQL = strSQL & " WHERE (((ALK.Nachname)=‚bahro‘) AND ((ALK.Vorname)=‚roland‘) AND ((ALK.Gemarkung)=‚pohlitz‘) AND ((ALK.Flur)=1) AND ((ALK.GB_Blatt)=67))"

Bei WHERE sind in dem Code dierekte Namen oder ZAhlen ausgewählt.
Doch ich hätte an dieser Stelle gern Variablen aus dem oberen SQL Statement, katSQL.

Wie erhalte ich diese?

DAnke Enrico

Hallo Enrico,

so ganz habe ich dein Problem immer noch nicht verstanden, was ich nicht verstehe: sind fuer den 2.Fall die Auswahlboxen nicht mehr gueltig?

Was haellst du davon die Werte, die du brauchst in Global definierten Variablen zwischenzuspeichern?

Was spricht dagegen die entsprechenden Variablen in einem Modul global zu definieren.
z.B Global g_Flur_ID As Long

Wenn du das 1. SQL-Statement zusammensetzt, weist du den Variblen die Werte zu, und dann kannst du jederzeit darauf zugreifen.
Eleganter waere natuerlich eine passende Struktur zu definieren…

Fuer aehnlich Faelle, habe ich auch eine Variante benutzt, bei der ich die Bedingung des SQL-Strings separat in einer Globalen Varibale speichere ( ohne WHERE), die ich dann hernehme um z.B. Berichte beim Aufruf zu filtern.

Tschau
Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Peter,

Die globalen Variablen definiere ich doch am Anfang meines Codes?

Option Compare Database
Option Explicit
Dim grp1 As String, grp2 As String
Dim FLSTName As String, FLSTVorname As String, FLSTGemarkung As String, FLSTFlur As String
Dim FLSTGBBlatt As String

Nun Habe ich in der Funktion am Ende die Spalten aus dem String, die ich benötige, Variablen zugewiesen.

Function Auswahlkataster()
’ Datenherkunft wird dynamisch zusammengesetzt
Dim katSQL As String

On Error GoTo myError

katSQL = " SELECT Gemarkung.Gemarkung_ID, Gemarkung.Name, Flur.Flur_ID, Flur.Flurnummer, Flur.Gemarkung_ID"
katSQL = katSQL & " FROM Gemarkung INNER JOIN Flur ON Gemarkung.Gemarkung_ID = Flur.Gemarkung_ID"
’ …dann die Einschränkungen
If Me!kom_Gem 0 Then ’ wenn im Kombifeld Gemarkung ein Eintrag selektiert wurde
grp1 = Me![kom_Gem].Column(0)
If Me!kom_Flur 0 Then ’ wenn im Kombifeld Flur ein Eintrag selektiert wurde
grp2 = Me![kom_Flur].Column(0)
katSQL = katSQL & " WHERE (Flur.Gemarkung_ID) = " & grp1
katSQL = katSQL + " AND " & " (Flur.Flur_ID) = " & grp2
Else
katSQL = katSQL & " WHERE (Gemarkung.Gemarkung_ID) = " & grp1
katSQL = katSQL & " ORDER BY Flur.Flurnummer"
End If
Else
End If

Me![lst_Flur_ID].RowSource = katSQL
Me![lst_Flur_ID].ColumnCount = 5
Me![lst_Flur_ID].ColumnWidths = "0cm;0cm;1cm;0cm;0cm "

FLSTGemarkung = Me![lst_Flur_ID].Column(1)
FLSTFlur = Me![lst_Flur_ID].Column(3)

my_err_Exit:
Exit Function

myError:
MsgBox Err.Number & " " & Err.Description
Resume my_err_Exit
End Function

Wenn ich nun im Formular auswähle, erscheint „Unzulässige Verwendung von NULL“.
DAs hatte ich bisher immer, wenn ich eine Spalte im Listenfeld einer Variablen übergebe und sie nicht markiere.

Wie kann ich die Spalten aus dem String in Variablen übergeben, ohne sie anzuzeigen oder zu markieren?

Weißt was ich meine?

dank enrico

Hallo,

habe 5 Variablen zugewiesen aus zwei Strings, gbSQL und katSQL.
DAdurch das ich die Strings ausgebe in Listenfeldern.

katSQL = " SELECT Gemarkung.Gemarkung_ID, Gemarkung.Name, Flur.Flur_ID, Flur.Flurnummer, Flur.Gemarkung_ID"
katSQL = katSQL & " FROM Gemarkung INNER JOIN Flur ON Gemarkung.Gemarkung_ID = Flur.Gemarkung_ID"
Me![lst_GemFlur].RowSource = katSQL
Me![lst_GemFlur].ColumnCount = 5
Me![lst_GemFlur].ColumnWidths = "0cm; 2cm; 0cm; 1cm; 0cm "

gbSQL = " SELECT Eigentümer.Eigentümer_ID, Eigentümer.Name, Eigentümer.Vorname, Grundbuchblatt.Grundbuch_ID, [Grundbuchblatt.GB-Nummer], Flurstück.Zaehler, Flurstück.Flur_ID"
gbSQL = gbSQL & " FROM (Grundbuchblatt INNER JOIN Flurstück ON Grundbuchblatt.Grundbuch_ID = Flurstück.Grundbuch_ID) INNER JOIN (Eigentümer INNER JOIN [Grundbuch-Eigentümer] ON Eigentümer.Eigentümer_ID = [Grundbuch-Eigentümer].Eigentümer_ID) ON Grundbuchblatt.Grundbuch_ID = [Grundbuch-Eigentümer].Grundbuch_ID"
Me![lst_EG_GB].RowSource = gbSQL
Me![lst_EG_GB].ColumnCount = 7
Me![lst_EG_GB].ColumnWidths = "0cm; 2cm; 2cm; 0cm; 1cm; 0cm; 0cm "
Im Formular werden nun die selektierten DAten in den listenfeldern angezeigt.
Ich markiere die entsprechende Zeile mit den Daten, die als Kriterium für die unten stehende select anweisung dienen soll.

Private Sub Flurstück_Click()
Dim strSQL As String
Dim FLSTName As String, FLSTVorname As String, FLSTGemarkung As String, FLSTFlur As String
Dim FLSTGBBlatt As String
On Error GoTo Err_Flurstück_Click

FLSTName = Me![lst_EG_GB].Column(1)
FLSTVorname = Me![lst_EG_GB].Column(2)
FLSTGBBlatt = Me![lst_EG_GB].Column(4)
FLSTGemarkung = Me![lst_GemFlur].Column(1)
FLSTFlur = Me![lst_GemFlur].Column(3)

strSQL = " SELECT ALK.Nachname, ALK.Vorname, ALK.Gemarkung, ALK.Flur, ALK.Zaehler, ALK.Nenner, ALK.FlaecheALK, ALK.Stand_ALK, ALK.GB_Blatt"
strSQL = strSQL & " FROM ALK"
strSQL = strSQL & " WHERE (ALK.Nachname)= " & FLSTName
'strSQL = strSQL + " AND " & " (ALK.Vorname) = " & FLSTVorname
'strSQL = strSQL + " AND " & " (ALK.Gemarkung) = " & FLSTGemarkung
'strSQL = strSQL + " AND " & " (ALK.Flur) = " & FLSTFlur
'strSQL = strSQL + " AND " & " (ALK.GB_Blatt) = " & FLSTGBBlatt

Me![lst_FLST].RowSource = strSQL
Me![lst_FLST].ColumnCount = 9
Me![lst_FLST].ColumnWidths = " 2cm; 2cm; 2cm; 1cm; 1cm; 1cm; 1,5cm; 1,5cm; 1cm "

Exit_Flurstück_Click:
Exit Sub

Err_Flurstück_Click:
MsgBox Err.Description
Resume Exit_Flurstück_Click

End Sub

Doch funktioniert es nicht.
und zwar, will access ein parameterwert eingeben, an der stelle wo die Variable FLSTName genommen werden soll.
Ich versteh die Welt nicht mehr.

Kann mir jemand helfen und sagen wo mein fehler liegt.

vielen dank

Hallo,

ein fehler,der mir an in dem SQL aufgefallen ist:
FLSTName ist wohl als Text-Feld in der Tabelle definiert?
dann muss der Wert in der Bedingung in ’ eingeschlossen werden und lass die runden Klammern weg, die sind ueberfluessig.

strSQL = strSQL & " WHERE ALK.Nachname = ‚" & FLSTName & "‘"

auserdem ist as " & " im folgenden ueberfluessig
strSQL = strSQL + " AND " & " (ALK.Vorname) = " & FLSTVorname
sondern

strSQL = strSQL + " AND ALK.Vorname = ‚" & FLSTVorname & "‘"

Noch einen Tipp um Fehler in SQL besser zu lokaliesieren:

Halte die Routine in Debugger an der Stelle
Me![lst_EG_GB].RowSource = gbSQL
an.

Nimm den Wert von gbSQL ins Clipbiard und erstelle mit dem SQLString eine Abfrage in Access, denn dort sind die Fehlermeldungen aussagekraeftiger als aus dem VBA heraus.

Tschau
Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]