SQL (Direktkommando) wird nicht ausgeführt

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

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

SQL (Direktkommando) wird nicht ausgeführt

Beitrag von WSO »

Hallo Forum,
ich habe eine sehr performante query (MySql) zur Bildung einer mitlaufenden Summe:

Code: Alles auswählen

SET @msumme:=0;
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
In MySql wird sie problemlos ausgeführt.
Als Direkt-Kommando über Base (4.3) macht der SET-Befehl Probleme (nicht ausführbar!)

Die "Mitlaufende Summe" mittels einer Unterabfrage (SUM ... WHERE DATUM =< X.DATUM, ...) zu bilden, führt bei meinem Daten zu extremen Antwortzeiten und ist leider keine gangbare Alternative.

Vielleicht kann man den SET durch ein übergeordnetes SELECT ersetzen, das habe ich leider nicht hinbekommen :(

Hat jemand eine Idee wie ich das Probelm lösen kann?
Vielen Dank und Gruss,
WSO
RobertG
********
Beiträge: 2034
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: SQL (Direktkommando) wird nicht ausgeführt

Beitrag von RobertG »

Hallo WSO,

der direkte SQL-befehl kann nur das ausführen, was der Treiber zulässt.
Wie verbindest Du MySQL mit Base?

Gruß

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

Re: SQL (Direktkommando) wird nicht ausgeführt

Beitrag von WSO »

Hallo Robert,
ich habe den Connector/J 5.1.34 von der MySql website eingebunden.
Bei der Datenbankverbindung habe ich "MySQL (JDBC) ausgewählt.
Gruss,
WSO
WSO
*****
Beiträge: 233
Registriert: Di, 22.04.2014 13:03

Re: SQL (Direktkommando) wird nicht ausgeführt

Beitrag von WSO »

Macht es Sinn, diesen Treiber zu verwenden?

com.mysql/com.mysql.jdbc_5.1.5.jar.zip( 649 k)

Den habe ich gerade hier:
http://www.java2s.com/Code/Jar/c/Downlo ... 515jar.htm
gefunden!

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

Re: SQL (Direktkommando) wird nicht ausgeführt

Beitrag von RobertG »

Hallo WSO,

vielleicht versuchst Du es besser einmal mit der direkten Verbindung?
Welche Officeversion für welches Betriebssystem verwendest Du?

Gruß

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

Re: SQL (Direktkommando) wird nicht ausgeführt

Beitrag von WSO »

Guten Morgen Robert,
ich arbeite unter Win 7 64 mit der aktuellen LO-Version.

Den Treiber "jdbc_5.1.5.jar" habe ich inzwischen getestet, er verhält sich in diesem Punkt identisch.

"Direkte Verbindung" sagt mir leider nichts.
Versuche ich gerne.
Wie wird das eingerichtet?
Gruss,
WSO
RobertG
********
Beiträge: 2034
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: SQL (Direktkommando) wird nicht ausgeführt

Beitrag von RobertG »

Hallo WSO,

den Connector für die direkte Verbindung bekommst Du hier:
http://extensions.libreoffice.org/exten ... office-4.x

Mache ein Kopie Deiner Datenbank und stelle nach der Installation der Extension die Verbindung unter Bearbeiten → Datenbank um.
Es kann sein, dass Du bei Abfragen nacharbeiten musst (zusätzliche Angabe des Datenbanknamens bei den Tabellenangaben ...). Deshalb zuerst einmal Dein gewünschtes Kommando austesten, bevor Du an anderer Stelle tätig wirst.

In der Regel sollte die Direktverbindung am besten funktionieren, da die Verbindung extra auf LO abgestimmt ist.

Siehe dazu auch das Kapitel "Datenbank erstellen" im Handbuch.

Gruß

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

Re: SQL (Direktkommando) wird nicht ausgeführt

Beitrag von WSO »

Hallo Robert,
danke für die schnelle Antwort.
Ich würde das gerne testen, aber leider wird auf dieser Seite kein Treiber zum download angeboten.
Gruss,
WSO
RobertG
********
Beiträge: 2034
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: SQL (Direktkommando) wird nicht ausgeführt

Beitrag von RobertG »

Hallo WSO,

irgendetwas scheint da mit der verlinkung nicht zu stimmen. Ich habe den Link einer anders aufgemachten Seite entnommen als der, zu der er jetzt führt. Hier der direkte Link zum Download der Windows-version des direkten Treibers für LO 4.2 und folgende:
http://extensions.libreoffice.org/exten ... or-ooo.oxt

Wenn Du bei der Sprache für die Extensions-Seite auf "Englisch" klickst, dann werden über die Suche und auch so die MySQL-Connectoren für Windows und Linux angezeigt. Scheint so, dass mein System sich von der Sprache her erst einmal nicht zuordnen lässt, so dass ich die englischsprachige Version der Seite von vornherein sehe. Ist aber auch merkwürdig, dass bei den unterschiedlichen Sprachwahlen unterschiedliche Extensions zur Verfügung stehen.

Gruß

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

Re: SQL (Direktkommando) wird nicht ausgeführt

Beitrag von WSO »

Hallo Robert,
danke für das update.
Habe jetzt über die Feiertage viel zu tun und werde den connector mit etwas mehr Ruhe erst im neuen Jahr testen.

Vielen herzlichen Dank für deine Hilfestellung in diesem Jahr.
Nur so konnte ich mich wirklich schnell in die neue Materie einarbeiten.
Frohe Weihnachten und einen guten Rutsch,
WSO
WSO
*****
Beiträge: 233
Registriert: Di, 22.04.2014 13:03

Set-Befehl mit native connector

Beitrag von WSO »

Hallo Zusammen,
ich habe jetzt den native connector getestet. Die Ergebnisse sind "durchwachsen":

PRO:
- bessere performance als mit dem connector J von Oracle
- keine Änderungen in den sourcen erforderlich

CON:
- der SET-Befehl wird leider auch nicht ausgeführt!

Wegen der besseren performance bleibe ich bei dem native connector.

Mein Problem mit dem nicht ausführbaren script ist aber leider nicht gelöst.
Das alternative script:

Code: Alles auswählen

SELECT 
	gel_kto, 
	gel_datum,
	gel_buchungstyp,
	betrag_logisch,
	betrag_logisch + COALESCE((SELECT SUM(betrag_logisch) 
FROM `vgeld_buchung_betraege_aktuellesjahr` b 
     WHERE b.gel_datum < a.gel_datum AND a.gel_kto = b.gel_kto),0) AS mitlaufendesumme
FROM `vgeld_buchung_betraege_aktuellesjahr` a 
ORDER BY gel_kto, gel_datum

funtioniert zwar, ist bei 5.000 Datensätzen (indiziert) aber extrem langsamer als das optimerte script mit dem SET-Befehl (25 sec. zu 2 sec.).
Mit zunehmenden Datenvolumen dürfte die response time progressiv steigen.

Als stored procedure lässt sich das Problem wohl auch nicht performant lösen:
Da eine procedue kein result set liefert, müsste man in der procedure alle Sätze in eine temp.-Tabelle kopieren und diese dann auslesen.

Vielleicht hat ja noch jemand eine zündende Idee,
Mit fällt nichts mehr ein.

Einen schönen Jahresausklang an alle,
WSO
RobertG
********
Beiträge: 2034
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: SQL (Direktkommando) wird nicht ausgeführt

Beitrag von RobertG »

Hallo WSO,

ich habe das jetzt einmal getestet, obwohl ich damit beisher nichts zu tun hatte:
Direkte Verbindung zu einer MariaDB hier auf einem OpenSUSE 12.3-Rechner mit LO 4.2.8.2.
Dann bin ich stur nach dem mir vorliegenden älteren MySQL-Buch vorgegangen und habe unter Extras → SQL eingegeben:

Code: Alles auswählen

SET @current_quarter = QUARTER(CURDATE())
Das soll dann immer das aktuelle Quartal ausgeben.
Dann habe ich eine Tabelle abgefragt und dabei den direkten SQL-Modus gewählt, da sonst die Ausführung nicht möglich ist (die GUI kennt @current_quarter nicht).
Ich habe die Abfrage erfogreich durchführen können und in allen Feldern nach den sonstigen Daten auch das aktuelle Quartal sehen können.

Ich habe anschließend das gleiche Verfahren wie Du angewandt:

Code: Alles auswählen

SET @msumme:=0
in Extras → SQL

Code: Alles auswählen

SELECT "MEDIENNR", (@msumme := @msumme + "MEDIENNR") AS "Summe" FROM "libretest"."ASB" AS "ASB"
als Abfrage im direkten SQL-Modus.
Mit der Geschwindigkeit hast Du vollkommen Recht. Das Ergebnis war nur mit sehr geringer Verzögerung da, während es sonst bei der mir vorliegenden Tabelle mit 9000 Datensätzen und einer entsprechenden korrelierenden Unterabfrage schon etwas läääänger dauerte.

Was genau funktioniert nicht?

Gruß

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

Re: SQL (Direktkommando) wird nicht ausgeführt

Beitrag von WSO »

Guten Morgen Robert,
wie so oft, Kleinigkeiten führen auf die richtige Spur ...
Ich hatte versucht den Set und das Select in einer Abfrage (SQL direct) zu verpacken.
Unter EXTRAS --> SQL geht das jetzt auch bei mir, nachdem ich das Semikolon hinter dem Set-Befehl entfernt, und eine Leerzeile zwischen SET und SELECT eingefügt habe.
In einer einzigen /color] Base-Abfrage geht das wohl nicht.
Ich habe daher den SET aus dem script entfernt und führe diesen vor Aufruf des Anzeigeformulars per execute aus:

Code: Alles auswählen

    stSql = "SET @mitlaufendesumme:=0"
    oSQL_Statement.execute(stSql)
Und siehe da:
Funktioniert super und ultra schnell!
Vielleicht findet ja diese Methode zur Berechnung einer mitlaufenden Summe Eingang in das nächste Base-Handbuch.
Noch schöne Feiertage,
WSO
RobertG
********
Beiträge: 2034
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: SQL (Direktkommando) wird nicht ausgeführt

Beitrag von RobertG »

Hallo WSO,

in dem Abfragemodul von Base können (leider) nur Abfragen ausgeführt werden. Es gibt auch einen Wunsch zu einem Enhancement. Wäre doch gut, wenn ohne viel Makroschreiberei auch andere Befehle ausgeführt werden.
SET ...
ist eben kein Abfragebefehl, sondern definiert eine Variable.

In das Handbuch kann ich so etwas nicht weiter aufnehmen. Ich habe direkt nach entsprechenden Möglichkeiten innerhalb der HSQLDB gesucht und eben nichts entsprechendes gefunden. Da das Handbuch nur die interne Datenbank und den Anschluss zu externen Datenbanken abhandelt, nicht aber die besonderen Funktionalitäten der externen Varaianten ist dafür bisher kein Platz.

Vielleicht wäre aber auch ein Kapitel zu den externen Datenbanken, für die Base mit nativen Treibern versorgt wird, auf Dauer sinnvoll. Für die nächste Veröffentlichung Ende Januar habe ich das aber auf keinen Fall auf dem Schirm.

Gruß

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

Re: SQL (Direktkommando) wird nicht ausgeführt

Beitrag von WSO »

Hi Robert,
ja das wäre ein gutes feature.
SQL ist so mächtig und hier in den interessanten Ebenen etwas umständlich zu nutzen.

Ich habe jetzt nochmal intensiv getestet.
Die "Lösung" hat noch ein gravierendes Problem.
In der Tabelle, die der Abfrage zugrunde liegt, sind Buchungen aller Konten und Buchungskreise.
Die laufende Summe soll natürlich nur für ein Konto gebildet werden.
Das lässt sich so aber nicht abbilden, da der Base-Filter bei dieser Abfrage nicht funktioniert.
Auch eine Verknüpfung in ein Unterformular über die Konto_id ging nicht. Das resultset beginnt immer mit den Sätzen für Konto=1.
Ich glaube, da muss ich an der Abfrage noch was schrauben ...
Gruss,
WSO
Antworten