Formularfilter geht nicht

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

WSO
*****
Beiträge: 233
Registriert: Di, 22.04.2014 13:03

Formularfilter geht nicht

Beitrag von WSO »

Guten Morgen Forum,
ich habe nach intensiven Test folgende "Merkwürdigkeit" gefunden:

Formularbasierte Filter funtionieren nicht bei queries, die sich nur als SQL-Direktkommando ausführen lassen!?

Hintergrund: viewtopic.php?f=8&t=65124#p251472
Die im obigen thread behandelte Abfrage:

Code: Alles auswählen

SELECT
   q1.konto,
   q1.datum,
   q1.typ,
   q1.betrag,
   (@msumme := @msumme + q1.betrag) AS mtitlaufendesumme
FROM
   (SELECT
       gel_kto AS konto,
       gel_datum AS datum,
       gel_buchungstyp AS typ,
       betrag_logisch AS betrag
    FROM  `vgeld_buchung_betraege_aktuellesjahr`
    ORDER  BY konto ASC, datum ASC) AS q1
kann wegen der Nutzung der SQL-Uservariable "@msumme" nur als Direktkommando ausgeführt werden.
Nutze ich sie als Datenquelle in einem Formular, sind in den Formulareigenschaften die Felder für Sort und Filter gesperrt.
Konsequenterweise wird ein per makro gesetzter Filter ignoriert.
Das Systemverhalten ist unabhängig davon, ob ich als Datenquelle eine Abfrage, oder einen SQL-Befehl verwende.

Entferne ich aus der Abfrage die Zeile:

Code: Alles auswählen

(@msumme := @msumme + q1.betrag) AS mtitlaufendesumme
ist die Filterfunktion wieder verfügbar.

Ich weiß nicht, ob bug oder feature, aber ich brauche einen workaraound.

Kann ich beim Aufruf des Formulars das SQL_Kommado der Datenquelle per Makro austauschen?
Ein zusätzliche Zeile:

Code: Alles auswählen

WHERE konto = n 
würde das gewünschte Resultat bringen.
Falls ja, wir komme ich da ran?

Vielleicht denke ich auch mal wieder zu kompliziert, komme so langsam in den Modus "Tunnelblick".
Und so freut sich auch überandere Ideen
WSO
RobertG
********
Beiträge: 2057
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Formularfilter geht nicht

Beitrag von RobertG »

Hallo WSO,

nur kurz: Eine Filterung funktioniert bereits in der Abfrage nicht. Gehe auf eine beliebige Abfrage, auch mit einer internen HSQLDB-Datenbank. Editiere die Abfrage und schalte auf "SQL-Kommando direkt ausführen". Die Filter sind anschließend ausgegraut.
Wenn Base die Abfrage nicht versteht, dann kann es logischerweise auch keinen Filter dazu zu der Datenbank schicken. Es könnte ja sein, dass dadurch die in direktem SQL funktionierende Abfrage völlig ramponiert wird.
Da Du sowieso nichts in so eine Abfrage einsetzen kannst:
Ist es nicht möglich, daraus eine Ansicht zu erstellen? Die wird nämlich von der Datenbank wie eine Tabelle geliefert und kann entsprechend auch gefiltert werden.

Gruß

Robert
WSO
*****
Beiträge: 233
Registriert: Di, 22.04.2014 13:03

Re: Formularfilter geht nicht

Beitrag von WSO »

Hallo Robert,
geht leider nicht, das habe ich als ersten Lösungsweg versucht.
Views dürfen (in MySql) keine User-Variablen enthalten.
User-Variablen kann man zwar in procedures verwenden, procedures liefern aber kein resultset.

Die Anwendung ist für single user Betrieb.
Kann man vielleicht per makro eine Base-Abfrage manipulieren, die das Formular nutzt?

Gruss,
WSO
RobertG
********
Beiträge: 2057
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Formularfilter geht nicht

Beitrag von RobertG »

Hallo WSO,

wie wäre es denn mit einer temporären Tabelle? Du schreibst das Ergebnis der Abfrage in eine temporäre Tabelle und greifst darauf mit dem Formular zu.

Code: Alles auswählen

CREATE TEMPORARY TABLE IF NOT EXISTS `tmpTab` AS SELECT ... FROM `Tabelle`
Gruß

Robert
WSO
*****
Beiträge: 233
Registriert: Di, 22.04.2014 13:03

Re: Formularfilter geht nicht

Beitrag von WSO »

Hallo Robert,
ja das ginge, nutze diese Methode als procedure für meine Stücklistenauflösung.
Die Tabelle um die es hier geht hat ein erwartetes Datenvolumen von ca. 15.000 Sätzen.
Denke, da bekomme ich durch die inserts wieder ein Performanceproblem.

Ich versuche es gerade die subquery durch eine zweite view zu ersetzen und den set mittels build in procedure in der view zu ersetzen.
Könnte ein Weg sein, doch noch zu der gewünschten view zu kommen. Ist aber ziemlich tricky und ich muss erst mal den Kopf wieder frei bekommen.

Wartet jetzt auch noch meine "normale" Arbeit auf mich.
Gruss,
WSO
Antworten