Suche in Access über 3 Tabellen

Bountyhunter

Grünschnabel
Hallo,
ich habe ein kleines Problem mit einer Suchfunktion und bin leider schon was aus Access und VB raus.
Kurz zum Aufbau der DB:

Stationen
"ID Stationsnummer" "Standort" "Konzentrator"

Straßenbereiche
"ID_Str_bereich" "ID_Straße" "von" "bis" " HA" "ID_Station" "ID_VSchrank" "Zur Station" "Gerade" "Ungerade"


Straßenliste

"Auto-ID" "Straße"

Meine Suche in SQL sieht so aus:
Code:
SELECT Straßenliste.Straße, Straßenbereiche.ID_Str_bereich, Straßenbereiche
[Zur Station], Stationen.Stationsnummer
FROM (Stationen INNER JOIN Straßenbereiche ON Stationen.Stationsnummer = Straßenbereiche.ID_Station)
INNER JOIN Straßenliste ON Straßenbereiche.ID_Straße = Straßenliste.[Auto-ID]
LIKE "*" & ( txtSuchfeld);


Hat vllt jemand eine Idee, warum die nicht klappt?

Danke

Gruß
Michael
 
der letzte Teil sollte immer in den WEHRE-Teil, nicht in den FROM-Teil des SQLs

Hab dein SQL mal ergänzt. Alle mit >< markeirten stellen fehlen bei dir. Suchfeld musst du natürlich durch ein Feld ergänzen.

SQL:
SELECT 
	Straßenliste.Straße, 
	Straßenbereiche.ID_Str_bereich, 
	Straßenbereiche.[Zur Station], 
	Stationen.Stationsnummer
FROM 
	Stationen 
	INNER JOIN Straßenbereiche 
		ON Stationen.Stationsnummer = Straßenbereiche.ID_Station
	INNER JOIN Straßenliste 
		ON Straßenbereiche.ID_Straße = Straßenliste.[Auto-ID]
>WHERE<
	>Suchfeld< LIKE '"*" & ( txtSuchfeld);

Den Teil "*" & ( txtSuchfeld); finde ich auch etwas merkwürdig. Ist das als Abfrage gespeichert uder ist das im VB? Im VB müsste es etwa so aussehen, damit im endreultet das ganze in ' '.
Visual Basic:
dim sql as String
sql = "SELECT .... .. LIKE '*" & txtSuchfeld & "';"
 
Zuletzt bearbeitet von einem Moderator:
@yaslaw
Kleiner Nachtrag.

Einen hast du übersehen - die jetzigen Zeilen 4 & 5 in deiner sqlcode-Vorlage sind EINE Zeile "Straßenbreite.[Zur Station],".

Und evtl. wäre das LIKE besser als "LIKE '*" & txtSuchfeld & "*';" zu formulieren (also beliebige Zeichenfolge vor UND nach dem Suchstring).

Grüße
Biber
 
Zuletzt bearbeitet:
Erstmal vielen Dank für Eure Tipps

@Yaslaw


"LIKE '*" & txtSuchfeld & "*';"

Grüße
Biber

Wenn ich das so eintrage bekomme ich immer die Meldung "Zeichen nach Ende von SQL Anweisung gefunden"
Auch wenn ich die Anweisung so schreibe:
SQL:
 "LIKE '*" & txtSuchfeld & "*';

2. Frage: Habt Ihr eine Idee, warum wenn ich die Abfrage starte die Spalten leer bleiben.
SQL:
SELECT Straßenbereiche_2.ID_Str_bereich, 
Straßenliste.Straße, Straßenbereiche_2.ID_Station,
Station_2.Stationsnummer,
Straßenbereiche_2.[Zur Station]
FROM
Station_2
INNER JOIN
(Straßenliste
INNER JOIN Straßenbereiche_2 
ON Straßenliste.[Auto-ID] = Straßenbereiche_2.ID_Straße)
ON Station_2.Stationsnummer = Straßenbereiche_2.ID_Station;
WHERE
Straßenbereiche_2
 "LIKE '*" & txtSuchfeld & "*';

Das wäre die Anweisung für das txtSuchfeld in VB
Code:
Private Sub txtSuchfeld_AfterUpdate()
DoCmd.Requery "lstAuswahl"
End Sub

Sehe derzeit den Wald vor lauter Bäumen nicht mehr und meine Access Zeit ist schon was her.
Vielen Dank Euch schon mal

Gruß
Michael
 
Zuletzt bearbeitet von einem Moderator:
Moin Bountyhounter,

sorry, ich hatte natürlich auch nicht getestet, sondern nur ungeprüft hier reingetippselt.

Jedenfalls fehlt schlicht und einfach eines der doppelten Anführungszeichen

FALSCH: -> "LIKE '*" & txtSuchfeld & "*';
RCHTIGER:-> "LIKE '*" & txtSuchfeld & "*'";
Anders formuliert: es werden ja drei Textstrings zusammengebraten, und zwar
Text "'*" plus Text txtsuchfeld plus Text "*'" zu einer LIKE-Klausel [LIKE '*{inhaltVontxtSuchfeld}*']

Wesentlicher als diese LIKE-Anmerkung sind aber yaslaws Hinweise.

Grüße
Biber
 
in VBA von Access müsste es etw so aussehen. Ich glaube es ist .RecordSource mit dem du die Quelle der Listenauswahl hinzufügen kannst.

Visual Basic:
Private Sub txtSuchfeld_AfterUpdate()
	lstAuswahl.RecordSource = "	SELECT " & _
									"Straßenbereiche_2.ID_Str_bereich, " & _
									"Straßenliste.Straße, Straßenbereiche_2.ID_Station, " & _
									"Station_2.Stationsnummer, " & _
									"Straßenbereiche_2.[Zur Station] " & _
								"FROM " & _
									"Station_2 " & _
									"INNER JOIN ( " & _
										"Straßenliste " & _
										"INNER JOIN Straßenbereiche_2 " & _
											"ON Straßenliste.[Auto-ID] = Straßenbereiche_2.ID_Straße " & _
										") " & _
										"ON Station_2.Stationsnummer = Straßenbereiche_2.ID_Station; " & _
								"WHERE " & _
									"Straßenbereiche_2 LIKE '*" & txtSuchfeld & "*';"
	DoCmd.Requery lstAuswahl
End Sub

Sollte das SQL aber direkt dem Control hinterlegt sein und du nur ein Requery machen willst, dass musst du auf das Formular verweisen.
SQL:
 ... WHERE Straßenbereiche_2 LIKE '*' & Forms!MyForm!txtSuchfeld;
 
Zuletzt bearbeitet von einem Moderator:
Danke, glaube aber da sitzt der Wurm drin.............
Jetzt sagt VB " Fehler beim Kompilieren: Methode oder Datenobjekt nicht gefunden.
Code:
   "Straßenbereiche_2 LIKE '*" & txtSuchfeld & "*';"

Das Datenobjekt ist ok und die Methode würde ich sagen stimmt auch.
Was denkt Ihr, soll sich lieber mal die ganze Datenbank neu schreiben?
Gruß
Michael
 
Zuletzt bearbeitet:
Neu schreiben bringt nix.

Dein Requery ist ev. falsch.
Visual Basic:
lstAuswahl.Recordset = "mein Schönes groses Sql"
Call lstAuswahl.Requery
 
Hallo nochmal,
ich komme leider nicht weiter.....
Ich habe jetzt mal die Datenbank mit Testdaten hochgeladen, mit der Bitte einmal drüber zu schauen.
Vielen Dank
Gruß
Michael
 

Anhänge

  • Datenbank2.zip
    16,8 KB · Aufrufe: 28
item: Im Query musst du myForm durch den Namen deines Formulares auswechseln
Code:
Like '*' & [Forms]![Formular1]![txtSuchfeld]

item: Du hast keine brauchbaren Testdaten. Ich habe zum testen mal das Feld ID_Strasse in Strassenbereiche_2 ausgefüllt

item: After_Update-Event ist nicht mehr mit der Funktion verbunden.
öffne das Formular in der Entwurfsansicht -> clicke auf das Suchfeld -> geh in den Property Sheet auf den Tab 'Events' -> clicke beim Event auf das Dropdown und wähle '[Event Procedure]' aus.
 

Neue Beiträge

Zurück