Seite 1 von 1

GELÖST: Export Data geht nicht mit Queries

Verfasst: Sa, 12.07.2014 12:13
von WSO
Hallo Zusammen,
Ich vervende das oft zitierte Makro aus dem Base-Handbuch "ExportData" unter LO 4.2 mit Win 7 und Linux.
Das Makro bringt einen Fehler: (Message: Table not found in statement [SELECT * FROM "abfRec"].),
wenn ich es fuer eine Abfrage aufrufe.
Bei Export einer Tabelle oder View geht es einwandfrei.
Weiss jemand woran das liegt?
Vielen Dank vorab,
WSO

Code: Alles auswählen

 Sub ExportRechnung (oEvent AS OBJECT)

       REM Speicherpfad
       sPath = "D:"
       REM Dateiname
       sTitle = "Datenexport vom " & Date & ".ods"
       REM Name der Abfrage, Tabelle oder SQL-Statement
       'sQueryName = "Screening_Tabelle_1"
       'sQueryName = "Abfrage_Screening_Tabelle_1"
       sQueryName = "SELECT * FROM ""abfRec"""
      'sQueryName = "SELECT * FROM ""Abfrage_Screening_Tabelle_1"""
         
       sURL = ConvertToURL(sPath & "/" & sTitle)
       If FileExists(sURL) Then
          i = MsgBox(">" & sTitle & "<" & Chr(13) & "Datei existiert bereits." & _
                      Chr(13) & Chr(13) & "Überschreiben?",52,"Hinweis")
          If i <> 6 Then
             Exit Sub
          End If
       End If
       oCon = thisComponent.Parent.CurrentController.ActiveConnection
       If oCon.Tables.hasByName(sQueryName) Then
          oPrepStatement = oCon.prepareCommand(sQueryName,0)
       ElseIf oCon.Queries.hasByName(sQueryName) Then
          oPrepStatement = oCon.prepareCommand(sQueryName,1)
       Else
          oPrepStatement = oCon.prepareCommand(sQueryName,2)
       End If
       oResult = oPrepStatement.executeQuery
       aColumns = oPrepStatement.Columns.ElementNames
       oDoc = StarDesktop.loadComponentFromURL("private:factory/scalc","_blank", 0, Array())
       oSheet = oDoc.Sheets(0)
       nColumnCount = UBound(aColumns)
       Dim aLine(nColumnCount)
       Dim aData(0)
       aData(0) = aColumns
       nUpperBoundary = 0
       Do While oResult.Next
          nUpperBoundary = UBound(aData)+1
          ReDim Preserve aData(nUpperBoundary)
          ReDim aLine(nColumnCount)
          For i = 0 To nColumnCount
             aLine(i) = oResult.getString(i+1)
          Next i
          aData(nUpperBoundary) = aLine
       Loop
       oRange = oSheet.getCellRangeByPosition(0,0,nColumnCount,nUpperBoundary)
       oRange.setDataArray(aData)
       Dim args(0) as New com.sun.star.beans.PropertyValue
       Dim Dateiname
       args(0).Name = "Overwrite"
       args(0).Value = True
    'Dateiname = GetVariable(oDoc,"Screening_Tabelle_1")
    'URL = "C:\Users\user\Documents\"
    'sURL = ConvertToURL(URL + Dateiname)
    'oDoc.storeAsURL(sURL, arg())

    End Sub

Re: Export Data geht nicht mit Queries

Verfasst: Sa, 12.07.2014 12:39
von pmoegenb
Hallo WSO,
was passiert, wenn Du die Anführungszeichen weglässt, die anscheinend als Teil der DB-Tabelle angesehen werden ? Also z. B.:

Code: Alles auswählen

sQueryName = "SELECT * FROM abfRec"
Ich habe nun mehrere Threads von Dir verfolgt und Frage mich deshalb, weshalb Du nicht eine echte Entwicklungsumgebung verwendest, die nicht irgendein Runtime-Modul (z. B. OpenOffice) benötigt. Wenn Du dafür kein Geld ausgeben möchtest gibt es z. B.

- Microsoft Visual Studio Express 2013 für Windows Desktop
- Lazarus

Lazarus liefert gleich Zugriffskomponenten für OpenSource-Datenbanken wie z. B. SQLite, Firebird gleich mit.

Re: Export Data geht nicht mit Queries

Verfasst: Sa, 12.07.2014 13:39
von WSO
Hallo Peter,
danke für die Antwort, aber das hilft leider nicht.
Tabellen und Views werden einwandfrei verarbeitet.
Queries laufen auf den Fehler, egal ob mit oder ohne den Anführungszeichen.
Habe als workaround aus den benötigten queries views gemacht, die sonst eigentlich überflüssig wären.

Was die Entwicklunmgsumbegung angeht hast du sicher recht.
Bin halt ca.25 Jahre aus der Programmierung raus und taste mich so langsam in die "neuen Welten" rein.
LO erschien mir da erst mal am einfachsten.
Schaue mir VS und Lazurus demnächst an, mal sehen ...

Re: Export Data geht nicht mit Queries

Verfasst: Sa, 12.07.2014 13:55
von pmoegenb
Hallo WSO,
WSO hat geschrieben:Tabellen und Views werden einwandfrei verarbeitet.
das ist schon seltsam, ein View ist auch nicht anderes als eine SQL-Abfrage.
WSO hat geschrieben:Bin halt ca.25 Jahre aus der Programmierung raus und taste mich so langsam in die "neuen Welten" rein. LO erschien mir da erst mal am einfachsten.
LO ist nur auf den ersten Blick einfacher.

Ich persönlich benutze z. B. den großen Bruder von Lazarus namens Delphi der aber richtig Geld kostet. Beide verwenden Objekt-Pascal als Sprache. Beim ersten Anblick von Lazarus wirst Du über den Leistungsumfang erschlagen sein. Beim 2. und 3. Blick wirst Du sagen, was habe ich mir bisher mit LO angetan.

Re: Export Data geht nicht mit Queries

Verfasst: Sa, 12.07.2014 14:46
von WSO
Hi Peter,
danke soweit. Werde meine nicht ganz triviale Anwendung erst mal mit LO und Postgre fertigstellen.
Vielleicht darf ich mich dann bei ersten Gehversuchen mit Lazarus mal wieder bei die melden.
Grussw,
WSO

Re: Export Data geht nicht mit Queries

Verfasst: Sa, 12.07.2014 19:21
von RobertG
Hallo WSO,

kannst Du mir einmal schreiben, wo das im Handbuch stehen soll? Ich finde nur ein Kapitel, bei dem es darum geht, den kompletten Inhalt der Datenbank (Tabellen,Beziehungen,Views) mit einem Rutsch als SQL-Code zu exportieren. Davon hast Du aber nichts, wenn Du das nicht für eine externe HSQLDB nutzen willst. Die Kommandos werden sich vermutlich doch zu PostgreSQL irgendwo unterscheiden.

Beim Exportieren von Daten müsste Dir klar sein: Einen View kennt die HSQLDB mit Namen. Eine Abfrage kennt sie nicht. Gegebenenfalls musst Du den SQL-Code der Abfrage mitschicken.

Gruß

Robert

Re: Export Data geht nicht mit Queries

Verfasst: Sa, 12.07.2014 20:27
von WSO
Hallo Robert,
entschuldige, du hast natürlich recht: das Beispiel stammt aus den "Tiefen" des Forums
und nicht aus dem Handbuch! Habe das bei meiner inzwischen breiten Quellensammlung verwechselt.

Das Makro ist nur in der HSQL-Version eingebaut.
Warumk es nur nicht mit Queries funktioniert ist mit trotzdem unklar.
Sowohl die Views, als auch die Abfragen haben Alias-Namen auf den Feldern.
Ich vermute den Fehler inzwischen hier:

Code: Alles auswählen

oCon = thisComponent.Parent.CurrentController.ActiveConnection
       If [color=#FF0000]oCon.Tables[/color].hasByName(sQueryName) Then
          oPrepStatement = oCon.prepareCommand(sQueryName,0)
       ElseIf oCon.Queries.hasByName(sQueryName) Then
          oPrepStatement = oCon.prepareCommand(sQueryName,1)
       Else
          oPrepStatement = oCon.prepareCommand(sQueryName,2)
       End If
und "bohre" da noch mal tiefer rein.
Gruss,
WSO

Re: Export Data geht nicht mit Queries

Verfasst: Mo, 14.07.2014 19:01
von WSO
Bin da nicht wirklich weitergekommen (man muss nicht alles verstehen, ...).
Als workaround habe ich zusätzliche views angelegt, die die Inhalte der entsprechenden Abragen wiederspiegeln.
Somit funktioniert das Makro auch für beliebige Sichten auf die Datenbank. :D

Re: Export Data geht nicht mit Queries

Verfasst: Di, 15.07.2014 07:16
von DPunch
Servus

Code: Alles auswählen

sQueryName = "SELECT * FROM ""abfRec"""
Für eine namentlich gespeicherte Abfrage einfach nur den entsprechenden Namen angeben, kein SQL-Statement.

Code: Alles auswählen

sQueryName = "abfRec"

Re: Export Data geht nicht mit Queries

Verfasst: Di, 15.07.2014 12:59
von WSO
Hallo DPunch,
super, da wahl mal wieder ein Baum zuviel im Wald, ...
Dank und Gruss,
WSO