Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Filter: Rückfrage bei falschem Feldnamen umgehen

Begonnen von hajott, Juni 30, 2023, 11:37:51

⏪ vorheriges - nächstes ⏩

hajott

Hallo zusammen,

in meiner Datenbank gibt der Anwender an einer Stelle einen Filterausdruck ein (SQL-WHERE), dies kann man ja bequem an den Filter übergeben. Der Anwender hat auch die entsprechende Grundkenntnisse, um eine SQL-Query zusammenzubauen, die ggf. aus der Kombination von verschiedenen Feldern besteht.

Ich möchte allerdings, dass er bei "Tippfehlern" entsprechend benachrichtigt wird. Wenn er zum Beispiel schreibt
LEFFT(Referenznummer,3) = 'ABC' AND Status = "X"
bekomme ich bei Übergabe an den Filter einen Fehler zurück, weil der SQL-Ausdruck wegen dem Tippfehler "LEFFT" ungültig ist. Gleiches gilt bei Aufbaufehlern, sei es ein fehlender Parameter oder eine fehlende Klammer. Als Fehlercodes sind mir bisher 3075 und 3709 untergekommen. Das kann man gut abfangen.

Leider (in diesem Fall) geht das System bei einem unbekannten Feldnamen  aber davon aus, dass es eine Parametereingabe ist. Wenn sich der Anwender also beim Feldnamen vertippt (z.B. "Refereznummer") dann gibt es statt der gewünschten Fehlermeldung das Eingabefenster - selbst unter Application.Echo  True.

Kann man das irgendwie umgehen und auch falsche Bezeichner als SQL-Fehler werten?

Vielen Dank

Hans-Jürgen

markusxy

Zitat von: hajott am Juni 30, 2023, 11:37:51Kann man das irgendwie umgehen und auch falsche Bezeichner als SQL-Fehler werten?

Nein, der ganze Ansatz ist problematisch.
Die vermutlich einzige Lösung ist ein Filter Formular, damit der User mit SQL nichts zu tun hat und umgeht damit die gesamten Fehlerquellen.


hajott

VIelen Dank für die Antwort.

Wie gesagt, die Anwender kennen sich mit SQL aus und finden es auch gut, dass sie da einfach eine WHERE-Anweisung eingeben können. Es handelt sich aber um verschiedene Kriterien, die miteinander vermengt werden können, auch das spricht für SQL.

Vielleicht kennt jemand noch einen Weg?

Viele Grüße

Hans-Jürgen

markusxy

Zitat von: hajott am Juni 30, 2023, 12:47:27Es handelt sich aber um verschiedene Kriterien, die miteinander vermengt werden können, auch das spricht für SQL.

Du scheinst nicht zu verstehen.
Das Filter Formular erzeugt den SQL Code und nicht der User.
Somit sind Fehler ausgeschlossen - das Thema kann aber komplex werden.

ebs17

ZitatWie gesagt, die Anwender kennen sich mit SQL aus
Was das Thema zeigt ...

Mit freundlichem Glück Auf!

Eberhard

hajott

Hallo zusammen,

okay, ich habe mich unglücklich ausgedrückt, vielleicht noch ein paar Sätze zum Verständnis.

Zur Pflege einer umfangreichen Datenbank habe ich eine Art "Dashboard" aus verschiedenen UFOs. Dort können die Benutzer die Daten bei Bedarf verändern. Da diese Pflege der Datenbank nur durch Administratoren erfolgt, nicht durch Endanwender, wissen die auch, was sie tun.

Dazu gehört es auch einen oder mehrere Datensätze zu selektieren, um sie anzusehen und ggf. zu editieren. Dafür will ich ein Multifunktions-Erfassungsfeld schaffen, was es dem Administrator einfach macht, also
1.) Entweder gibt er eine Referenznummer ein -> das Programm erkennt das, schreibt "Referenznummer = '" davor und gibt das an den Filter ab
2.) Er kann auch die Referenznummer in einer gängigen Kurzform eingeben, das Programm erkennt und ergänzt das
3.) Wenn er aber irgendwelche anderen Daten ansehen will, soll er direkt in diesem Feld auch das, was er sucht, als SQL eingeben können. Und da will ich die vertippten Feldnamen abfangen.

Viele Grüße

Hans-Jürgen

ebs17

#6
LEFFT ... war nun kein Feldname.

Hast Du Dein Anliegen selber richtig erfasst?

Richtig helfen kann man dem User, wenn man ihm eine Auswahl aus nur Richtigem anbietet und er keine eigenkreativen Eingaben vornehmen kann. In einer Abfrage wäre da die ausschließliche und fachlich überzeugende Verwendung des Ausdrucksgenerators denkbar. Aber eigentlich führt kein Weg an einer programmierten Lösung mit einem Formular wie bereits angesprochen vorbei.
Mit freundlichem Glück Auf!

Eberhard

hajott

#7
vielen Dank für eure Zeit - ich sehe den Fehler bei mir, weil ich es wohl nicht ausreichend erklären konnte. LEFFT war ein Beispiel für einen Tippfehler, den man konventionell abfangen kann.

markusxy

Zitat von: hajott am Juni 30, 2023, 13:44:57Und da will ich die vertippten Feldnamen abfangen.

Es gibt grundsätzlich nur zwei Möglichkeiten:
Die erste hast du ja schon mehrfach vernommen. Der User selbst schreibt keinen Code, sondern bekommt ein Formular und das Formular erzeugt den Code.

Der andere Ansatz:
Du prüfst den SQL Code auf Richtigkeit.
Und zu deinem Beispiel mit Left -> das ist ja eine Funktion und kein Feldname.
Das zeigt schon, du müsstest quasi auf jede Funktion welche es gibt prüfen.
Dafür liefert VBA aber keine sinnvollen Möglichkeiten.

Ansonsten: Du lässt den User wie bisher anlaufen, und er lernt eben was dazu.





hajott

@markussy:

Danke, ich hatte das ernsthaft überlegt, den Code auf Richtigkeit zu überprüfen, aber das wäre Wahnsinn. Ich bin jetzt den Weg gegangen, den du auch vorgeschlagen hast: Wenn der Anwender sich beim Feldnamen vertippt, bekommt er eben dieses Eingabefenster. Das kennt er ja auch, wenn er sich im SQL-Editor vertippt. Er muss dann halt "irgendwas" eingeben, damit er das Fenster wegbekommt und läuft unweigerlich in den Error bei Übergabe an den Filter.