Ich habe folgendes Problem:
Ich habe eine Kunden Datenbank in Base (ca. 1200 Kunden) in der Übersicht ich habe es Kundenverwaltung genannt kann der Inhalt mittels einer Filter Tabelle und einer Parameter Abfrage gefiltert werden. Nun möchte ich den gefilterten Inhalt per Makro in Calc exportieren.
Beim Suchen habe ich Folgendes Makro gefunden:
Code: Alles auswählen
Sub ExportData
REM Speicherpfad
sPath = ""
REM Dateiname
sTitle = "Name_" & Date & ".ods"
REM Name der Abfrage, Tabelle oder SQL-Statement
'sQueryName = "meineTabelle"
sQueryName = "meineAbfrage"
'sQueryName = "SELECT * FROM ""meineTabelle"""
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.setFormulaArray(aData)
Dim args(0) as New com.sun.star.beans.PropertyValue
args(0).Name = "Overwrite"
args(0).Value = True
oDoc.StoreAsURL(sURL,args)
oDoc.close(False)
End Sub
Funktioniert super bei Statischen Abfragen aber sobald es Dynamisch werden soll gibt es Probleme.
Was ich bereits Versucht habe :
Code: Alles auswählen
Abfrage direkt Ansprechen und die Parameter mit liefern
oform = ThisComponent.drawpage.Forms.Filter
qTelefon = oform.getString(oform.findcolumn("F_Telefon"))
qFirma = oform.getString(oform.findcolumn("F_Firma"))
qName = oform.getString(oform.findcolumn("F_Name"))
sQueryName = "Parameterabfrage"
führt die Abfrage durch und exportiert aber alle Kunden also setzt er die Parameter auf Null
mein zweiter Ansatz war das SQL Statement hart in den Code zuschreiben also
Code: Alles auswählen
sQueryName = SELECT "Kunde_q"."ID" AS "MAINID", "Firmen"."Branche", "Firmen"."Firma", "Kunde_q"."Titel", "Kunde_q"."Name", "Kunde_q"."Vorname", "Kunde_q"."Email", "Kunde_q"."Ort", "Kunde_q"."Plz", "Kunde_q"."Anschrift","Kunde_q"."Firmennummer" FROM "Firmen", "Kunde_q" WHERE "Firmen"."Firmennummer" = "Kunde_q"."Firmennummer" AND ( LOWER ( "Telefon" ) LIKE LOWER ( '%' || :qTelefon || '%' ) AND LOWER ( "Firma" ) LIKE LOWER ( :qFirma || '%' ) AND LOWER ( "Name" ) LIKE LOWER ( :qName || '%' ) OR LOWER ( "Telefon" ) LIKE LOWER ( '%' || :qTelefon || '%' ) AND LOWER ( "Firma" ) LIKE LOWER ( :qFirma || '%' ) AND :qName IS NULL OR LOWER ( "Firma" ) LIKE LOWER ( :qFirma || '%' ) AND LOWER ( "Name" ) LIKE LOWER ( :qName || '%' ) AND :qTelefon IS NULL OR LOWER ( "Firma" ) LIKE LOWER ( :qFirma || '%' ) AND :qName IS NULL AND :qTelefon IS NULL OR LOWER ( "Telefon" ) LIKE LOWER ( '%' || :qTelefon || '%' ) AND LOWER ( "Name" ) LIKE LOWER ( :qName || '%' ) AND :qFirma IS NULL OR LOWER ( "Telefon" ) LIKE LOWER ( '%' || :qTelefon || '%' ) AND :qName IS NULL AND :qFirma IS NULL OR LOWER ( "Name" ) LIKE LOWER ( :qName || '%' ) AND :qTelefon IS NULL AND :qFirma IS NULL OR :qName IS NULL AND :qTelefon IS NULL AND :qFirma IS NULL )
Ich hoffe ihr versteht auf was ich hinaus möchte und könnt mir helfen
Danke im Voraus