Parameter in Select gibt Fehlermeldung

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
Ferdinand
Beiträge: 4
Registriert: Di 14. Mai 2019, 19:42

Parameter in Select gibt Fehlermeldung

Beitrag von Ferdinand » Di 14. Mai 2019, 20:35

Hallo zusammen,

ich bin neu hier und arbeite schon länger mit Datenbanken und Programmierung, bin aber jetzt in LO Base "blutiger" Anfänger. Daher habe ich jetzt wohl auch ein Anfängerproblem, zu dem ich weder im Handbuch, in der Hilfe oder im Netz etwas gefunden habe.

Zum Üben habe ich eine kleine Datenbank erstellt (zuerst HSQLDB, dann nach Umstellung auf LO 6.1.5.2 in Firebird embedded migriert). Darin gibt es eine Tabelle "BeitragSoll" mit den Feldern "MitglNr", "JahrAb" und "Beitrag", die Tabelle ist mit Beispieldaten gefüllt.

Auf diese Tabelle greift nun eine Abfrage zu, die die Sätze mit einem bestimmen JahrAb zeigen soll:
SELECT * FROM "BeitragSoll" WHERE "JahrAb" = :Jahr;
Solange ich statt dem Parameter :Jahr eine fixe Jahreszahl eingebe, klappt es tadellos. Mit dem Parameter kommt auch zuerst erwartungsgemäß der Dialog zur Eingabe des Wertes, dann aber die Fehlermeldung:

firebird_sdbc error:
*Dynamic SQL Error
*SQL error code = -206
*Column unknown
*JAHR
*At line 1, column 47
caused by
'isc_dsql_prepare'

Was mache ich da falsch? Nebenbei: wo kann man eine Liste der error codes (hier -206) finden?

Ich habe noch die neueste stabile Version 6.1.6.3 von LO installiert, Fehler bleibt aber, Betriebssystem ist Win 10.

Schon jetzt herzlichen Dank für Eure Hilfe!

MfG
Ferdinand



RobertG
Beiträge: 1872
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Parameter in Select gibt Fehlermeldung

Beitrag von RobertG » Di 14. Mai 2019, 21:45

Hallo Ferdinand,

ich kann den Fehler so nicht nachvollziehen. Ich habe hier LO 6.2.3.2 und auch LO 6.1.5.2 unter OpenSUSE 15 getestet. Eine interne Firebird-Datenbank, eine Abfrage mit Parameter - der Dialog erscheint, ich mache eine Eingabe, das Ergebnis erscheint.

Eine Fehlermeldung erscheint dann, wenn ich auf die direkte Ausführung von SQL-Code gehe (umgeschaltet von der Design-Ansicht auf SQL-Ansicht und dort "SQL-Kommando direkt ausführen". Dann erscheint aber auch kein Dialog. Der Code wird an der GUI vorbei zur Datenbank geschickt, die eben mit der Notierung von Parametern gar nichts anfangen kann.

Eine Liste der Error-Codes würde Dir nichts bringen. Da erscheinen unter Base sowieso nur wenige Codes, die alle damit enden
...*At line 1, column 47
caused by
'isc_dsql_prepare'

Offensichtlich bemängelt die Meldung ja eine unbekannte Spalte "JAHR", was ja davon zeugt, dass der Code bei Dir direkt geschickt wird und nicht durch die GUI vorher mit dem Inhalt versehen wird.

Da müssen wir einmal auf einen Test von Win-10-Nutzern hoffen. Könnte ja ein spezifischer Bug sein.

Gruß

Robert

Ferdinand
Beiträge: 4
Registriert: Di 14. Mai 2019, 19:42

Re: Parameter in Select gibt Fehlermeldung

Beitrag von Ferdinand » Di 14. Mai 2019, 22:56

Hallo Robert,

vielen Dank für die Antwort. Die Sache mit "SQL ... direkt ausführen" hatte ich schon irgendwo gefunden, dann erscheint aber das Dialogfenster erst gar nicht - genau wie Du geschrieben hast. Dass in der Fehlermeldung eine Spalte JAHR bemängelt wird, ist mir total schleierhaft. Diese Buchstabenfolge taucht in der ganzen Datenbank nirgends auf, eben nur hier als Parameter. Ich habe auch schon andere Bezeichnungen versucht, z. B. :Jprm, dann bemängelt er eben eine "column JPRM".

Kann man irgendwo sehen, was die GUI nach Eingabe des Wertes aus der Select macht und an Firebird übergibt?

Gruß
Ferdinand

RobertG
Beiträge: 1872
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Parameter in Select gibt Fehlermeldung

Beitrag von RobertG » Mi 15. Mai 2019, 16:07

Hallo Ferdinand,

ich wüsste nicht, an welcher Stelle der SQL-Befehl abfangbar ist. Kannst Du für den Bug ein Beispiel hier zur Verfügung stellen, dass andere das nachstellen können?

Als Lösung würde ich Dir vorschlagen:
Nutze eine Tabelle, die nur eine Zeile abspeichern soll (Primärschlüssel kann also Ja/Nein sein). Packe in diese Tabelle das Feld "Jahr" (Zahlenfeld, SmallInteger). Fülle die erste Zeile der Tabelle mit ID = TRUE und dem gewünschten Wert für das "Jahr". Den Wert für diese Tabelle kannst Du problemlos in Formularen schreiben und dann durch eine Aktualisierung eines anderen Formulars abspeichern. Dieses andere Formular zeigt dann das Abfrageergebnis an:

Code: Alles auswählen

SELECT * FROM "BeitragSoll" WHERE "JahrAb" = (SELECT "Jahr" FROM "Filter" WHERE ID = TRUE)
... wobei ich die Tabelle jetzt "Filter" genannt habe.

Ich nutze nur dieses Verfahren, nie die Parameter, da ich selten Abfragen direkt nutze. Als Arbeitsoberfläche dient mir das Formular.

Gruß

Robert

F3K Total
Beiträge: 1807
Registriert: So 10. Apr 2011, 10:10

Re: Parameter in Select gibt Fehlermeldung

Beitrag von F3K Total » Mi 15. Mai 2019, 18:01

Hallo,
habe in angehängter Datei gerade problemlos eine Parameterabfrage nach dem Jahr unter Windows 7 durchgeführt. Erstellt mit LibreOffice 6.2.3
Gruß R
Dateianhänge
TEST_JAHR.zip
nur entpacken
(3.14 KiB) 7-mal heruntergeladen

Ferdinand
Beiträge: 4
Registriert: Di 14. Mai 2019, 19:42

Re: Parameter in Select gibt Fehlermeldung

Beitrag von Ferdinand » Mo 20. Mai 2019, 18:04

Hallo Robert und F3K,

vielen Dank für die Tipps. Ich habe alles nachvollzogen, die Sache mit dem Filter-Unterselect funktioniert problemlos. Auch die Test-DB habe ich bei mir probiert, auch das geht wunderbar. Das zeigt zumindest, dass meine LO-Installation in Ordnung sein dürfte.

Bei der Suche nach Unterschieden zwischen der Tabelle in F3Ks Test und meiner habe ich nur gefunden, dass die beiden Schlüsselfelder unterschiedliche Felddefinitionen haben: im Test beide integer, bei mir char(5) und smallinteger. Also habe ich die Testtabelle bei mir nachgebaut - Fehler. Es ist echt frustierend.

Wie von Robert vorgeschlagen schicke ich hier eine Kopie der schuldigen DB mit, in dieser Kopie habe ich alles gelöscht, was nicht zum Problem gehört. Der Fehler ist leider erhalten geblieben.

Gruß
Ferdinand
Dateianhänge
Buggy.zip
(17.77 KiB) 4-mal heruntergeladen

F3K Total
Beiträge: 1807
Registriert: So 10. Apr 2011, 10:10

Re: Parameter in Select gibt Fehlermeldung

Beitrag von F3K Total » Di 21. Mai 2019, 16:51

Moin, habe deine Datei Buggy.odb mit verschiedenen LO Versionen unter Windows 7 getestet
6.3.2 ... Fehlermeldung
6.1.5 ... Fehlermeldung
6.0.7 ... funktioniert
Dann habe ich meine Datei, erstellt mit LO 6.3.2 versucht:
6.3.2 ... funktioniert
6.1.5 ... funktioniert
6.0.7 ... funktioniert
Danach habe ich im meiner Datei die Integer-Jahresspalte in eine neue Tabelle mit Smallinteger Jahresspalte kopiert, funktioniert auch, an der Smallinteger liegt es nicht.
Ich bin nicht ganz im Bilde welche Änderungen inzwischen eingeflossen sind, kann es sein, dass du die Datei mit LO 6.0.7 oder früher erstellt hast? Da war Firebird vermutlich noch "buggiger" :lol:

Gruß R

rasonprof
Beiträge: 4
Registriert: Sa 7. Jul 2018, 12:36

Re: Parameter in Select gibt Fehlermeldung

Beitrag von rasonprof » Di 21. Mai 2019, 17:56

Hallo zusammen,

F3K, meinst Du eventuell Version 6.2.3, Version 6.3 ist ja erst alpha?,

Es scheint ein Problem der Datenbank in Verbindung mit Firebird zu. Sobald man sie neu in LO erstellt funktioniert sie. Ich habe versucht die Tabelle von Ferdinand in eine neue Firebird DB zu kopieren. Es kommt eine Fehlermeldung und die Tabelle wird ohne Inhalt erstellt. Füllt man diese Tabelle wieder mit Inhalt, funktioniert auch die Abfrage. Als zweites habe ich versucht die Tabelle in eine MariaDB Datenbank zu kopieren. Hier meckert das System nur an, dass danach kein Primärschlüssel vorhanden ist. Die Tabelle wird aber vollständig erzeugt. Der bzw. die Primärschlüssel lassen sich nachträglich erstellen und die Abfrage funktioniert einwandfrei.

Wie F3K schon angemerkt hat, an den Feldtypen liegt es nicht. Ich habe, wie F3K, unter Firebird einige Varianten ohne Probleme durchgespielt.

Meiner Ansicht nach sollte Ferdinand sich eine MariaDB unter Windows installieren. So wie Robert es unter Linux laufen hat. Ich habe die MariaDB unter Win 10 laufen. Es funktioniert bisher einwandfrei.

Testumgebung; HP ZBook G2; WIN 10 Prof; Libreoffice 6.2.4.2 und 6.3 alpha; MariaDB 10.3.15 mit MariaDB java client 2.4.1

Mit freundlichen Grüßen

Jens

F3K Total
Beiträge: 1807
Registriert: So 10. Apr 2011, 10:10

Re: Parameter in Select gibt Fehlermeldung

Beitrag von F3K Total » Di 21. Mai 2019, 18:02

Jepp, 6.2.3 - Tippfehler ... und auch mit der eingebetteten HSQL-DB, oder einer herausgelösten, kein Problem ...

Ferdinand
Beiträge: 4
Registriert: Di 14. Mai 2019, 19:42

Re: Parameter in Select gibt Fehlermeldung

Beitrag von Ferdinand » Mi 22. Mai 2019, 21:32

Hallo zusammen,

in welcher Version genau ich die Datei erstellt habe, weiß ich nicht mehr, ich installiere eine neuere LO-Version immer über die alte drüber. Es war aber auf jeden Fall eine, bei der Firebird noch nicht empfohlen wurde, daher entstand die Datei zuerst in HSQLDB. Als ich dann gelesen habe, dass ab 6.1.5 auch FB verwendbar ist, habe ich die neue Version geholt und die Datei migriert.

Ich vermute stark, dass sich der Fehler bei dieser Migration eingeschlichen hat. Darin bestärken mich sowohl die Versionstests von F3K als auch der Kopietest von rasonprof. Daher habe diese migrierte Datei begraben und die DB völlig neu erstellt, diesmal in LO 6.1.6.3 und Firebird. Die Daten hatte ich aus Calc-Tabellen mittels c&p, genauso wie beim ersten Mal. Das ging nicht so problemlos wie beim der HSQLDB, sondern hakte ein bisschen (Primärschlüssel ließen sich nicht erzeugen, wenn die Definition und Daten zusammen importieren wollte, aber Tabellenstruktur manuell erstellen und dann Daten anhängen hat geklappt).

Und: hurra, auch die Parameterabfrage klappt jetzt problemlos!

Noch zur MariaDB: mein Ziel ist eigentlich, auf die DB später mit einem Lazarus-Programm zuzugreifen (ich bin über Delphi zu Lazarus gekommen) und zwar so, dass die Lazarus-exe und die Firebird-Datei z. B. auf einem Stick genügen, ohne dass man eine DB auf dem Rechner installieren muss.

Damit ist m. E. das Thema soweit erledigt, ich danke Euch allen ganz herzlich für die Unterstützung!!! :D

Gruß
Ferdindand



Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste