Seite 1 von 2
Bug im SQL-Generator
Verfasst: So, 04.05.2014 13:51
von WSO
Ich habe merkwürdige Effekte mit Abfrage, die mit der grafiscxhenOberlächer erstellt wurden und nicht mit der Option "SQL direkt ausführen" gespeichert wurden.
Beispiel:
So wir die Abfrage vom Formular gestartet, es hat sich ein "
WHERE" eingeschlichen, dass zu Abbruch führt:
Code: Alles auswählen
SELECT "tAuftrag"."auf_id", "tKunde"."kud_id", "tLeistung"."lei_text", "tAuftrag"."auf_preis", "tAuftrag"."auf_dauerauftrag", "tAuftrag"."auf_von", "tAuftrag"."auf_bis", "tAuftrag"."auf_abgeschlossen", "tAuftrag"."auf_datum" FROM { OJ "tAuftrag" LEFT OUTER JOIN "tKunde" ON "tAuftrag"."auf_kud_id" = "tKunde"."kud_id" LEFT OUTER JOIN "tLeistung" ON "tAuftrag"."auf_lei_id" = "tLeistung"."lei_id" } WHERE ORDER BY "tAuftrag"."auf_datum" ASC
Im Abfrageeditor sieht das noch so aus, ohne das "WHERE" und funktioniert:
Code: Alles auswählen
SELECT "tAuftrag"."auf_id", "tKunde"."kud_id", "tLeistung"."lei_text", "tAuftrag"."auf_preis", "tAuftrag"."auf_dauerauftrag", "tAuftrag"."auf_von", "tAuftrag"."auf_bis", "tAuftrag"."auf_abgeschlossen", "tAuftrag"."auf_datum" FROM { OJ "tAuftrag" LEFT OUTER JOIN "tKunde" ON "tAuftrag"."auf_kud_id" = "tKunde"."kud_id" LEFT OUTER JOIN "tLeistung" ON "tAuftrag"."auf_lei_id" = "tLeistung"."lei_id" } ORDER BY "tAuftrag"."auf_datum" ASC
Eine Where-Bedingung ist in der Grafischen Oberfläche nicht angegeben:

- Abfrage.png (101.45 KiB) 3044 mal betrachtet
Lösung:
"SQL-Kommando direkt ausführen" anklicken und dann die ASbfrage erneut speichern, dann geht's.
Re: Bug im SQL-Generator
Verfasst: So, 04.05.2014 20:51
von RobertG
Hallo WSO,
Du kannst gerne einen Bug melden. Dafür muss aber das von Dir geschilderte Verhalten mit einfachen Mitteln für andere reproduzierbar sein. Nur wenn bei einer Abfrage, bei der Du einmal eine Bedingung mit drin hattest und dann gelöscht hast, noch ein WHERE vorhanden ist, reicht dazu nicht. Erst wenn Du die Schritte dahin aufzeigen kannst, dann kann eine Bug-Meldung einen Sinn machen.
Die neueren LO-Versionen sind in der GUI sowieso etwas merkwürdig zu handhaben. Du musst z.B. das Feld, das Du gerade bearbeitet hast, auf jeden Fall vorher verlassen haben, damit es auch in einer Abfrage korrekt dargestellt wird. Sonst fehlen die zuletzt gemachten Änderungen.
Bugmeldungen geschehen dann hier:
https://bugs.freedesktop.org/,
da es sich nach dem Screenshot zu urteilen um eine LO-Version ab 4.1 handelt.
Gruß
Robert
Re: Bug im SQL-Generator
Verfasst: Mo, 05.05.2014 01:47
von WSO
Hi Robert,
will wirklich keine Diskussion lostreten, was ein bug sein kann oder nicht.
Bekomme nur das Phantom "Where" nicht mehr raus und die Abfrage somit nicht zum laufen.
Was ist dein Rat?
Die verschachtelten Abfragen komplett löschen und neu aufbauen?
Gibt es eigentlich Restriktionen hinsichtlich der Ebenenanzahl, wenn ich Abfragen in Grafikmodus verschachtele?
Würde mir schon gerne den Aufwand für die Erfassung längerer SQL-Statements mit der grafischen Oberfläche reduzieren.
Gruß und gute Nacht,
Wolfram
Re: Bug im SQL-Generator
Verfasst: Mo, 05.05.2014 11:00
von acco
Hallo Wolfram,
so wie das im Screenshot aussieht ist nach dem "where" ein Leerzeichen. Vielleicht ist im Formular, genauer im Formularfilter, ein Leerzeichen vorhanden (übriggeblieben). Normalerweise meckert dann Base beim abspeichern, aber es ist möglich. Beim Aufruf des Formulars kommt dann die Meldung "Fehler in SQL-Syntax". Vielleicht hilft Dir das?
Gruß
acco
Re: Bug im SQL-Generator
Verfasst: Mo, 05.05.2014 12:51
von WSO
Guten Morgen acco,
danke für die Antwort.
Das Problem mit dem "WHERE" in der Abfrage habe ich lösen können:
Ich habe die Abfragen in allen Ebenen gelöscht und neu gemacht (mit der grafischen Oberfläche).
Danach erschien das "Where" nicht mehr, die Abfrage läuft.
Aber, neues Problem :
Wenn ich versuche, eine Where-Klausel auf ein mit IFNULL ... definiertes Feld zu legen will,
bringt die grafische Oberfläche beim Auflösen des generierten Statements einen Fehler.
In SQL-Editor (native) funktioniert das gleiche (wie erwartet) einwandfrei.
Habe das hier auf das Wesentliche reduziert:
https://www.dropbox.com/s/z9d7mcl9xhg61 ... roblem.odb
Versuche mal in der Abfrage "qry_balancenotzero" für das Feld "balance" eine Bedingung (< 0) einzutragen,
die Abfrage lässt sich nicht mehr ausführen.
Im native SQL gibt es kein Problem mit der um die Bedingung ergänzte Abfrage:

- SQLnative.png (38.47 KiB) 3002 mal betrachtet
Habe mir erstmal damit geholfen Abfragen dieser Art native zu editieren, wird mit steigender Komplexität abr recht aufwendig
Ist die aktuelle Version der grafischen Editors nur mit Einschränkungen nutzbar,
oder habe ich wieder einen Anwendungfehler vor mir?
Danke für deine Mühe und sonnigen Gruss von den kanarischen Inseln,
Wolfram
Re: Bug im SQL-Generator
Verfasst: Mo, 05.05.2014 13:08
von acco
Hallo Wolfram,
WSO hat geschrieben:Versuche mal in der Abfrage "qry_balancenotzero" für das Feld "balance" eine Bedingung (< 0) einzutragen,
Das würde ich gerne, aber in der DB sind nur 3 Tabellen, keine Abfrage.
Gruß
acco
Re: Bug im SQL-Generator
Verfasst: Mo, 05.05.2014 14:11
von WSO
Re: Bug im SQL-Generator
Verfasst: Mo, 05.05.2014 14:34
von acco
Hallo Wolfram,
das funktioniert in der GUI nicht, warum weiß ich nicht. Wenn Du die Abfrage aber mit "in SQL-Ansicht bearbeiten" öffnest und die Where-Klausel
da anhängst, funktioniert es.
Wie Du siehst, war ich so frei die Klausel auf >0 zu ändern.
Gruß
acco
Re: Bug im SQL-Generator
Verfasst: Mo, 05.05.2014 16:33
von WSO
Ja danke,
so habe ich das Problem auch umgangen.
Dann hoffen wir mal, dass sich die GUI im nächsten Release vielleicht verbessert wird.
Gruss,
Wolfram
Re: Bug im SQL-Generator
Verfasst: Mo, 05.05.2014 16:37
von RobertG
Hallo Wolfram, hallo acco,
vielleicht habe ich da etwas nicht richtig verstanden - aber bei mir ist das Ganze in der Abfrage direkt über die Filtereigenschaften möglich.
Gruß
Robert
Re: Bug im SQL-Generator
Verfasst: Mo, 05.05.2014 17:28
von acco
Hallo Robert, hallo Wolfram,
ja, über den Standardfilter beim Aufruf der Abfrage funktioniert das auch bei mir.
Soweit ich Wolfram verstanden habe, geht es um die fest eingestellte Angabe des Kriteriums im GUI-Abfrage-Entwurf. Wenn ich da als Kriterium > 0 eingebe, läßt die Abfrage sich nicht ausführen: "Syntaxfehler in SQL-Ausdruck" kommt als Fehlermeldung.
Schalte ich die Design-Ansicht aus und bin im SQL-Fenster und gebe da ergänzend ein : .." where "balance" > 0" dann funktioniert es. Schalte ich die Design-Ansicht wieder aus, ist das Kriterium "> 0" richtig eingetragen, aber bei ausführen der Abfrage kommt wieder die Fehlermeldung. Versuche ich jetzt die Design-Ansicht wieder auszuschalten um im SQL-Fenster zu sein, wird das mit obiger Fehlermeldung verweigert.
Natürlich bleibt der Weg, die Abfrage "qry_balance" als Ansicht zu erstellen und diese Ansicht als Grundlage für die Abfrage "qry_balancenotzero" mit eingetragenem Kriterium "> 0" zu nehmen, das wird funktionieren. Ich weiß aber nicht, ob das in Wolframs Konzept paßt.
Gruß
acco
Re: Bug im SQL-Generator
Verfasst: Mo, 05.05.2014 18:46
von WSO
Ja acco stimmt genau.
Eine view will ich aber nicht aus der Abfrage machen.
Meine Tests mit views (in der V4.1) haben die Verwaltungsmöglichkeiten (GUI) der darunter liegen Tabellen so eingeschränkt, dass ich lieber die Abfragen native editiere.
Gruß,
Wolfram
Re: Bug im SQL-Generator
Verfasst: Mo, 05.05.2014 22:06
von RobertG
Hallo Wolfram, hallo acco,
die Abfrage greift auf eine andere Abfrage zu. Der erste Zugriff, den ich jetzt einmal probiert habe, ist, die andere Abfrage zu einer Ansicht zu machen. Dann klappt auch das Filtern im grafischen Modus. Sonst habt Ihr Recht: Das ganze wird mit einem SQL-Fehler nicht ausgeführt. Da gilt es jetzt zu suchen, was die grafische Benutzeroberfläche zum Wanken bringt.
Gruß
Robert
Re: Bug im SQL-Generator
Verfasst: Mo, 05.05.2014 23:18
von acco
Hallo Robert, hallo Wolfram,
WSO hat geschrieben:Aber, neues Problem :
Wenn ich versuche, eine Where-Klausel auf ein mit IFNULL ... definiertes Feld zu legen will,
bringt die grafische Oberfläche beim Auflösen des generierten Statements einen Fehler.
In SQL-Editor (native) funktioniert das gleiche (wie erwartet) einwandfrei.
Wenn die IFNULL-Bedingungen in der Abfrage
gelöscht werden, kann in der GUI das Kriterium "> 0" eingegeben werden. Allerdings ist dann das Abfrage-Ergebnis falsch, eben weil die Null-Werte nicht auf "0" gesetzt werden. Abhelfen könnte ein Defaultwert "0" in den leeren Tabellenspalten, aber vermutlich möchte Wolfram in seiner DB im Feld Debit oder Credit keine "0" stehen haben, wenn es (noch) keinen Vorgang (Rechnung) dazu gibt. Sonst hätte er das wohl so gemacht.
Gruß
acco
Re: Bug im SQL-Generator
Verfasst: Di, 06.05.2014 07:33
von RobertG
Hallo acco,
geht ja weniger darum, wie das von vornherein hätte vermieden werden können, sondern auf welche Eingabe in der ersten Abfrage die GUI der zweiten Abfrage allergisch reagiert. Und das hast Du jetzt gefunden. Damit lässt sich auch eine Bugmeldung formulieren.
Gruß
Robert