2.7k Aufrufe
Gefragt in Datenbanken von dquail Einsteiger_in (7 Punkte)
Hi.

Ich möchte eine Abrage auf eine Accessdatenbank durchführen. Dafür soll der User einen Begriff in ein Formularfeld eintippen, welcher als Suchkriterium verwendet wird. Im Prinzip recht simple:

SELECT Technik.Name, *
FROM Technik
WHERE Technik.Typ Like TESTFELD;


Nun ist es so, dass wenn man nicht den exakten Begriff, wie er in der Spalte Typ zu finden ist eingibt oder zumindest einen Platzhalter vor und nach den Begriff setzt, kein Datensatz gefunden wird. Platzhalter manuell im Formularfeld einzugeben ist aber unkomfortabel also will ich diese gleich mit in die Abfrage packen - ungefähr so:

SELECT Technik.Name, *
FROM Technik
WHERE Technik.Typ Like ('*') & TESTFELD & ('*');


das funktioniert auch. Aber ich könnte die Verkettung der Platzhalter und dem Formularfeld mit + realisieren:

SELECT Technik.Name, *
FROM Technik
WHERE Technik.Typ) Like ('*') + TESTFELD + ('*');


In diesem Fall ist es wahrscheinlich egal welche Variante ich nutze, aber mich würde mal inetressieren, ob das generell ein gängiger Weg ist das so zu lösen und wann man besser den einen Operanten oder den anderen nutzen sollte.

Würde mich über Feedback freuen.

Viele Grüße,

Quai.

4 Antworten

0 Punkte
Beantwortet von paul1 Experte (4.9k Punkte)
Hallo,

Habe mir die von Dir angeführten SQL-Anweisungen kurz angeschaut sowie getestet und festgestellt, dass es sich um 2 Parameterabfragen handelt, die bei öffnen der Anfrage bzw. Formular der Reihe nach zur Eingabe des Suchbegriffes auffordern, wobei Teile des Suchbegriffes genügen.

Wenn ich es richtig verstanden habe, sollte, wenn in einem Formular z.B. Teile des Suchbegriffes eingegeben werden mögliche Namen oder Bezeichnungen erscheinen, die auch übernommen werden können, da würde sich besser folgendes eignen:

>Abfrage
>Entwurfsansicht
>Spalte
>Kontextmenü
>Feldeigenschaften
>Nachschlagen
>Steuerelement anzeigen >Kombinationsfeld
>Herkunftstyp>Tabelle/Abfrage
>Datensatzherkunft >z.B.Tabelle1

Aus dieser Anfrage ein Formular erstellen und während der Eingabe (auch nur teilweise) sind im Kombinationsfeld die Inhalte auswählbar.


Gruß

Paul1
0 Punkte
Beantwortet von dquail Einsteiger_in (7 Punkte)
Hallo Paul1.

THX für's Feedback.

Die Idee, dass mögliche Inhalte während der Eingabe gefiltert auswählbar sind, finde ich einen sehr guten Ansatz und werde ich in die Umsetzung einfliessen lassen.

Ich habe bei meiner Beschreibung vergessen zu erwähnen, dass die Suche über die gesamte Tabelle ausgeführt wird, nicht nur über eine Spalte.

Also werden noch ein paar Anweisungen hinzukommen - am Ende wird es dann so aussehen:

SELECT Technik.Name, *
FROM Technik
WHERE Technik.Typ Like ('*')&SUCHE&('*') Or
Technik.Bezeichnung Like ('*')&SUCHE&('*') Or
Technik.Standort Like ('*')&SUCHE&('*') Or
Technik.Name Like ('*')&SUCHE&('*') Or
Technik.Funktion Like ('*')&SUCHE&('*') Or
Technik.Seriennr Like ('*')&SUCHE&('*') Or
Technik.Bemerkung Like ('*')&SUCHE&('*');

Es werden dann also alle Datensätz der Tabelle angezeigt, in denen der Suchbegriff vorkommt, egal in welcher Spalte.

Mir ging es vornehmlich um die Syntax der SQL Anweisung.

Viele Grüße.
0 Punkte
Beantwortet von paul1 Experte (4.9k Punkte)
Hallo,

Die SQL-Anweisung ist Dir samt ODER-Verknüpfung gelungen – gratuliere!

Habe es getestet die SQL-Ansicht sieht danach so aus:

SELECT Technik.Typ, Technik.Bezeichnung, Technik.Standort, Technik.Name, Technik.Funktion, Technik.Seriennr, Technik.Bemerkung
FROM Technik
WHERE (((Technik.Typ) Like ('*') & [SUCHE] & ('*'))) OR (((Technik.Bezeichnung) Like ('*') & [SUCHE] & ('*'))) OR (((Technik.Standort) Like ('*') & [SUCHE] & ('*'))) OR (((Technik.Name) Like ('*') & [SUCHE] & ('*'))) OR (((Technik.Funktion) Like ('*') & [SUCHE] & ('*'))) OR (((Technik.Seriennr) Like ('*') & [SUCHE] & ('*'))) OR (((Technik.Bemerkung) Like ('*') & [SUCHE] & ('*')));

Eine Möglichkeit mit dem gleichen Effekt ginge auch so, dass in der Entwurfsansicht der Abfrage in jeder Spalte unter Kriterien folgender Parameter eingegeben wird.

Wie ('*') & [SUCHE] & ('*')

und zwar immer eine Zeile (Kriterienzeile) unter der vorherigen Spalte damit eine Oder-Verknüpfung hergestellt werden kann.

Abgesehen davon freut es mich, dass die von mir empfohlene Eingabemöglichkeit im Formular mittels Kombinationsfeld in dem Arbeitsablauf Verwendung finden kann.

Gruß
Paul1
0 Punkte
Beantwortet von paul1 Experte (4.9k Punkte)
Hallo,

Zusatzinfo:

Die SQL-Anweisung ohne Klammern und Hochkomma:

SELECT Technik.Name, *
FROM Technik
WHERE Technik.Typ Like "*" & SUCHE & "*" Or Technik.Bezeichnung Like "*" & SUCHE & "*" Or Technik.Standort Like "*" & SUCHE & "*" Or Technik.Name Like "*" & SUCHE & "*" Or Technik.Funktion Like "*" & SUCHE & "*" Or Technik.Seriennr Like "*" & SUCHE & "*" Or Technik.Bemerkung Like "*" & SUCHE & "*";

und für die Entwurfsansicht:

Wie "*" & [SUCHE] & "*"

Gruß

Paul1

Access 2003
...