[gelöst] Makro zum Importieren einer Datenbanktabelle in Calc

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

kilix
****
Beiträge: 128
Registriert: So, 09.04.2023 11:27

[gelöst] Makro zum Importieren einer Datenbanktabelle in Calc

Beitrag von kilix »

Hallo,

ich arbeite zwar jetzt mit LO denke aber, dass dieses Thema für OO und LO gleich ist.
Ich habe eine Datenquelle zu einer SQLEXPRESS-Datenbank definiert und lese Tabellen aus der Datenbank in Calc-Tabellen ein. Es wäre schön, wenn man das mittels Makro machen kann. Leider hat es mit "aufzeichnen" nicht funktioniert (hab es ehrlich gesagt auch nicht erwartet aber probiert).
Kann mir wer dabei helfen oder eine Quelle nennen bei der ich nachsehen kann?
Zuletzt geändert von kilix am Sa, 28.10.2023 18:23, insgesamt 3-mal geändert.
Grüße
kilix
kilix
****
Beiträge: 128
Registriert: So, 09.04.2023 11:27

Re: Makro zum Importieren einer Datenbanktabelle in Calc

Beitrag von kilix »

Hallo,
ich konnte das Problem selbst lösen:
bei meinen früheren versuchen das Makro aufzuzeichnen habe ich die Datenquelle mit F4 geöffnet. Das funktionierte nicht. Nun habe ich es über das Menü - Ansicht - Datenquelle gemacht und das funktionierte!
Grüße
kilix
kilix
****
Beiträge: 128
Registriert: So, 09.04.2023 11:27

Re: Makro zum Importieren einer Datenbanktabelle in Calc

Beitrag von kilix »

Hallo,
die oben genannte Lösung funktioniert gut solange ich in der Abfrage kein Kriterium habe. Ich habe aber in der Abfrage ein Kriterium definiert. Im Makro öffnet sich auch das Kriterienfenster und wartet bis ich meine Eingabe gemacht und mit OK bestätigt habe. Allerdings wird dann nicht nach meiner Eingabe gefiltert.
Der manuelle Vorgang ist wie folgt:
1) Aufruf der Datenquelle mit Menü-Ansicht-Datenquelle: damit wird die früher verwendete Abfrage markiert
2) Frage nach der Eingabe des Kriteriums diese Frage beantworte ich mit Abbrechen (da sie später nochmals kommt)
3) ich markiere die Abfrage (im Explorerfenster) und ziehe sie mit der Maus in die Calc-Tabelle
4) dabei wird wieder nach der Eingabe des Kriteriums gefragt, nun mache ich die Eingabe
5) die gewünschte Selektion wird in die Calc-Tabelle übernommen.

Wenn ich diesen Vorgang aufzeichne werde ich nur einmal nach dem Kriterium gefragt aber danach nichts mehr gemacht. Ich nehme an, dass das Ziehen mit der Maus der Abfrage in die Calc-Tabelle nicht richtig aufgezeichnet wird. Wahrscheinlich dürfte ich nicht "ziehen" sondern müsste es mit "kopieren" und "einfügen". Allerdings erhalte ich dabei immer Fehlermeldungen, egal ob ich "kopieren" aus dem Menü oben oder dem DB-Menü nehme. Für "einfügen" habe ich keine alternativen Möglichkeiten gefunden.

Das aufgezeichnete Makro sieht so aus:

Code: Alles auswählen

sub DB_importieren
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ViewDataSourceBrowser"
args1(0).Value = true

dispatcher.executeDispatch(document, ".uno:ViewDataSourceBrowser", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ViewDataSourceBrowser"
args2(0).Value = true

dispatcher.executeDispatch(document, ".uno:ViewDataSourceBrowser", "", 0, args2())

rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ViewDataSourceBrowser"
args3(0).Value = false

dispatcher.executeDispatch(document, ".uno:ViewDataSourceBrowser", "", 0, args3())

rem ----------------------------------------------------------------------
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "ViewDataSourceBrowser"
args4(0).Value = false

dispatcher.executeDispatch(document, ".uno:ViewDataSourceBrowser", "", 0, args4())

end sub
Grüße
kilix
kilix
****
Beiträge: 128
Registriert: So, 09.04.2023 11:27

Re: Makro zum Importieren einer Datenbanktabelle in Calc

Beitrag von kilix »

@Admin
bitte verschieben sie diesen beitrag wenn er eher unter Makros und allgemeine Programmierung gehört, danke.

edit: Moderationsbemerkung: Thema verschoben
Grüße
kilix
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Makro zum Importieren einer Datenbanktabelle in Calc

Beitrag von mikeleb »

Hallo,
eine interessante Frage, für die ich hier fündig wurde:
http://de.openoffice.info/viewtopic.php?t=57964
Etwas abgewandelt:

Code: Alles auswählen

Sub Main

	Dim aImportDesc(2) as new com.sun.star.beans.PropertyValue
	aImportDesc(0).Name = "DatabaseName"
	aImportDesc(0).Value = "test_datenquelle"	'hier: Name der angemeldeten Datenquelle
	aImportDesc(1).Name = "SourceType"
	aImportDesc(1).Value = com.sun.star.sheet.DataImportMode.QUERY
	aImportDesc(2).Name = "SourceObject"
	aImportDesc(2).Value = "Abfrage1"	'hier: Name der Abfrage
	oBereich= thiscomponent.sheets(2).getCellRangeByName("A1")
	obereich.doImport(aImportDesc)

End Sub
Bei meinem Test kam der Dialog zur EIngabe des Kriterium und dann wurde die Daten in Tabelle3 ab Zelle A1 importiert.
Gruß,
mikeleb
kilix
****
Beiträge: 128
Registriert: So, 09.04.2023 11:27

Re: Makro zum Importieren einer Datenbanktabelle in Calc

Beitrag von kilix »

Hallo mikeleb,

vielen, vielen Dank! Dieses Makro macht exakt was ich wollte!

Danke!
Grüße
kilix
Antworten