Makro für BaseDaten in Calc verarbeiten u. Bericht erstellen
Verfasst: Mo, 04.07.2011 12:19
Hallo,
ich bin Anfänger und neu im Forum und will ein Makro schreiben. Ich habe einen Export Code (siehe unten von Mitglied DPunch). Für die ganze Datenbank. In meinem Fall soll nur jeweils der aktuelle Datensatz geholt werden. Zusammengefasst: Makro öffnet aktuellen Datensatz speichert und überschreibt einen Calc File und ruft einen Bericht oder eine Abfrage auf.
Wer weiß was hierzu. Vorteil ist, daß man im komfortablen Base Formular Daten erheben kann, im gewohnten Calc verarbeiten und mit dem komfortablen Base Bericht oder der Abfrage die Ergebnisse darstellen kann. Das wäre eine gute Lösung für die einfachste Anwendung mit Base und Calc. 1. Datenerfassung 2. Datenverarbeitung 3. Ergebnisdarstellung
So ein Makro wäre doch Spitze und vielfältig einsetzbar. Wenn wir das hier hinkriegen, könnten das viele verwenden. Bei uns läuft OpenOffice 3.3.0.
Der am Ende des Makros auskommentierte Bereich funktioniert noch nicht.
Im Detail:
Das Makro soll folgendes ausführen.
1. Ich habe ein Formular das schreibt Roh-Daten in eine Base Tabelle. Läuft schon.
2. In diese Tabelle soll eine Schaltfläche mit einem Makro. Schaltfläche schon eingebaut.
3. Bei Klick auf Schaltfläche soll nur ein Datensatz (immer der aktuell geöffnete) aus Base in eine Calc Datei(A) exportiert werden. (Läuft schon über alle Datensätze mit Deinem Code. Vielen Dank. Aber brauche ich nur für nur einen Datensatz.
4. Also diese exportierte Calc Tabelle mit dem einen Datensatz öffnet sich und soll nun abgespeichert werden an einem definierten Ort und mit immer dem gleichen Namen. Die Calc Datei(A) darf immer wieder überschrieben werden.
5. Diese abgespeicherte Rohdatentabelle (A) ist mit einer Calc Datei (B) verknüpft, die Berechnungen durchführt. Die Ergebnisse der Berechnungen in der Calc Datei (B) sollen nun vom Makro über den Aufruf eines Base Berichtes oder einer Abfrage ausgelesen werden und geöffnet werden, so daß derjenige, der die Schaltfläche betätigt diesen Bericht sieht. Der Bericht oder die Abfrage braucht nicht gespeichert werden.
7. Alle Schritte bis zum Öffnen des Berichtes sollten versteckt ablaufen. Erst der Bericht soll wieder sichtbar werden. ev. mit oDoc.lockControllers und oDoc.unlockControllers
Calc Datei (B) muß nicht geöffnet werden sondern es müssen nur die Ergebnisfelder als Bericht oder Abfrage ausgelesen werden. Da die Calc Datei (A) ja immer den aktuellen Datensatz enthält ist ja der Base Bericht immer aktuell.
Da wir mit Calc besser umgehen können und unsere benötigten Berechnungen darin ausführen, wollten wir unsere Berechnungen nicht in Basic übersetzen. Obwohl das ja eventuell gehen soll: Für uns zu kompliziert.Mit einem Makro das das obige kann, können wir komfortabel Daten in eine Datenbank eingeben und komfortabel per Klick (eben für unsere nichversierten Anwender) einen Ergebnisbericht an die Oberfläche holen.
Moderation,4: CODE tags gesetzt
ich bin Anfänger und neu im Forum und will ein Makro schreiben. Ich habe einen Export Code (siehe unten von Mitglied DPunch). Für die ganze Datenbank. In meinem Fall soll nur jeweils der aktuelle Datensatz geholt werden. Zusammengefasst: Makro öffnet aktuellen Datensatz speichert und überschreibt einen Calc File und ruft einen Bericht oder eine Abfrage auf.
Wer weiß was hierzu. Vorteil ist, daß man im komfortablen Base Formular Daten erheben kann, im gewohnten Calc verarbeiten und mit dem komfortablen Base Bericht oder der Abfrage die Ergebnisse darstellen kann. Das wäre eine gute Lösung für die einfachste Anwendung mit Base und Calc. 1. Datenerfassung 2. Datenverarbeitung 3. Ergebnisdarstellung
So ein Makro wäre doch Spitze und vielfältig einsetzbar. Wenn wir das hier hinkriegen, könnten das viele verwenden. Bei uns läuft OpenOffice 3.3.0.
Der am Ende des Makros auskommentierte Bereich funktioniert noch nicht.
Im Detail:
Das Makro soll folgendes ausführen.
1. Ich habe ein Formular das schreibt Roh-Daten in eine Base Tabelle. Läuft schon.
2. In diese Tabelle soll eine Schaltfläche mit einem Makro. Schaltfläche schon eingebaut.
3. Bei Klick auf Schaltfläche soll nur ein Datensatz (immer der aktuell geöffnete) aus Base in eine Calc Datei(A) exportiert werden. (Läuft schon über alle Datensätze mit Deinem Code. Vielen Dank. Aber brauche ich nur für nur einen Datensatz.
4. Also diese exportierte Calc Tabelle mit dem einen Datensatz öffnet sich und soll nun abgespeichert werden an einem definierten Ort und mit immer dem gleichen Namen. Die Calc Datei(A) darf immer wieder überschrieben werden.
5. Diese abgespeicherte Rohdatentabelle (A) ist mit einer Calc Datei (B) verknüpft, die Berechnungen durchführt. Die Ergebnisse der Berechnungen in der Calc Datei (B) sollen nun vom Makro über den Aufruf eines Base Berichtes oder einer Abfrage ausgelesen werden und geöffnet werden, so daß derjenige, der die Schaltfläche betätigt diesen Bericht sieht. Der Bericht oder die Abfrage braucht nicht gespeichert werden.
7. Alle Schritte bis zum Öffnen des Berichtes sollten versteckt ablaufen. Erst der Bericht soll wieder sichtbar werden. ev. mit oDoc.lockControllers und oDoc.unlockControllers
Calc Datei (B) muß nicht geöffnet werden sondern es müssen nur die Ergebnisfelder als Bericht oder Abfrage ausgelesen werden. Da die Calc Datei (A) ja immer den aktuellen Datensatz enthält ist ja der Base Bericht immer aktuell.
Da wir mit Calc besser umgehen können und unsere benötigten Berechnungen darin ausführen, wollten wir unsere Berechnungen nicht in Basic übersetzen. Obwohl das ja eventuell gehen soll: Für uns zu kompliziert.Mit einem Makro das das obige kann, können wir komfortabel Daten in eine Datenbank eingeben und komfortabel per Klick (eben für unsere nichversierten Anwender) einen Ergebnisbericht an die Oberfläche holen.
Code: Alles auswählen
Sub ExportData
REM Speicherpfad
sPath = "C:"
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 ""Screening_Tabelle_1"""
'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
Moderation,4: CODE tags gesetzt