Tabelle aus mysql automatisch in Calc einlesen

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

Moderator: Moderatoren

Reginald
****
Beiträge: 114
Registriert: Fr, 23.07.2010 23:58

Tabelle aus mysql automatisch in Calc einlesen

Beitrag von Reginald »

Hallo zusammen,

ich habe eine mySQL Datenbank auf einem Server X, auf die ich per ODBC-Verbindung (mit Base) zugreifen kann.

Nun möchte ich aus der Datenbank namens "Kundendatenbank" die Tabelle "Kunden" einfach einmal in ein Calc-Dokument reinschreiben, und zwar per Macro von Calc aus. Drag & Drop etc. kenne ich, aber ich will es automatisieren.

Auf http://www.dannenhoefer.de habe ich das hier gefunden. Ist schon einmal der erste Schritt:

Code: Alles auswählen

oContext = createUnoService("com.sun.star.sdb.DatabaseContext")
     DatenQuellen=oContext.getElementNames()
     sNameDB=DatenQuellen(0)
     oQuelle=oContext.GetByName(sNameDB)
     sLogin=""    
     sPassword="" 
     oConnection=oQuelle.getconnection(sLogin,sPassword)
Aber wie geht es dann weiter?

Eigentlich habe ich noch etwas ganz anderes vor, aber der Ansatz, die ganze Tabelle auszulesen, würde mir schon einmal helfen. Von da aus kann ich mich dann durchwurschteln ...

Im Endeffekt will ich das hier lösen: Ich habe eine Kundentabelle in Calc, wo sehr viele Spalten stehen und auch die Kunden ID, also der Schlüssel, der auch in der mysql-DB steht. Bestimmte Parameter, z. B. Anschrift des Kunden, möchte ich immer in der Datenbank pflegen, aber auch in der Calc-Tabelle sehen. Wenn ich das Calc-Dokument öffne, sollen also immer automatisch bestimmte Spalten aus mysql ausgelesen werden und damit mein Dokument upgedated werden.

Hat jemand schlaue Ideen oder ähnliche Projekte?


Grüße
Reginald
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Tabelle aus mysql automatisch in Calc einlesen

Beitrag von DPunch »

Aloha

Etwas ähnliches hatte Hier schonmal jemand gesucht.
Reginald
****
Beiträge: 114
Registriert: Fr, 23.07.2010 23:58

Re: Tabelle aus mysql automatisch in Calc einlesen

Beitrag von Reginald »

Hi DPunch,

danke danke. Den Ansatz hatte ich auch schon gesehen, aber er geht von einer anderen Richtung aus: Von Base nach Calc, nach die Daten von Calc aus aus der mysql DB ziehen ...

Ich habe mal einige Zeit weitergesucht und micht beschäftigt, aber bin noch nicht ganz schlau geworden.

Den Code, den ich oben von Dannenhoefer angegeben habe: Da steht ja gar nicht der Datenbank-Name und der Datenbank-Server.

Andere Beispiele / Ansätze, die ich im Netz gefunden habe: Nun ja, das gleiche Problem. Es ist nie der Server angegeben. Oder gehen die auf einen lokalen ODBC-Datenquelle?

Grüße
Reginald
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Tabelle aus mysql automatisch in Calc einlesen

Beitrag von DPunch »

Aloha
Reginald hat geschrieben:Den Ansatz hatte ich auch schon gesehen, aber er geht von einer anderen Richtung aus: Von Base nach Calc, nach die Daten von Calc aus aus der mysql DB ziehen ...
Ich verstehe nicht ganz - wie greifst Du denn momentan auf Deine MySQL-Datenbank zu?
Hast Du keine Verbindung über Base hergestellt?

Prinzipiell kannst Du zwar auch ohne Base an die DB ran, aber z.B. JDBC-Treiber o.Ä. wirst Du wohl installieren müssen.
Mit JDBC würde das dann in etwa so aussehen:

Code: Alles auswählen

	sHost = "localhost"
	sPort = "3306"
	sDatabase = "meineDatenbank"
	sLogin = "user"
	sPassword = "password"
	
	sURL = "sdbc:mysql:jdbc:" & sHost & ":" & sPort & "/" & sDatabase & "?user=" & sLogin & "&password=" & sPassword
	
	oDriverManager = CreateUnoService("com.sun.star.sdbc.DriverManager")
	oConnection = oDriverManager.getConnectionWithInfo(sURL, Array())
	oStatement = oConnection.createStatement
	oResult = oStatement.executeQuery("SELECT * FROM `meineTabelle`")
	If oResult.Next Then
		MsgBox oResult.getString(1) & Chr(13) & oResult.getString(2)
	End If
Reginald
****
Beiträge: 114
Registriert: Fr, 23.07.2010 23:58

Re: Tabelle aus mysql automatisch in Calc einlesen

Beitrag von Reginald »

Hallo DPunch,

vielen Dank!!

Ich habe den mysql odbc Treiber installiert und greife von Base mittels diesem auf die Datenbank zu, d.h. ich habe eine Applikation, die in Base existiert, mit der ich viel arbeite.

Daneben arbeiten wir aber genauso viel mit Calc und ich will eben auch via Calc auf die mysql-DB zugreifen. Wenn ich jetzt von Calc via Base auf die mysql gehe - hm, dann doch lieber gleich von Calc auf mysql gehen, weil es direkt ist ...

Deiner Antwort entnehme ich, dass ich wohl einen ODBC-Treiber brauche. Der ist ja wegen der Base-Applikation ohnehin installiert, also insofern kein Problem.

Dürfte ich dich fragen, wie der Code mit ODBC statt mit JDBC aussieht, denn ODBC ist ja wie gesagt installiert. JDBC (noch) nicht ...

Vielen Dank!!!!!!

Viele Grüße
Reginald
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Tabelle aus mysql automatisch in Calc einlesen

Beitrag von DPunch »

Aloha
Reginald hat geschrieben:Daneben arbeiten wir aber genauso viel mit Calc und ich will eben auch via Calc auf die mysql-DB zugreifen. Wenn ich jetzt von Calc via Base auf die mysql gehe - hm, dann doch lieber gleich von Calc auf mysql gehen, weil es direkt ist ...
Ehhm - Base stellt bei einer externen DB im Endeffekt auch nur die Verbindungsdetails zur Verfügung - sprich Base erspart Dir das Zusammensetzen des Connection-Strings. Diese Schnittstelle kannst Du bedenkenlos benutzen.
Reginald hat geschrieben:Dürfte ich dich fragen, wie der Code mit ODBC statt mit JDBC aussieht, denn ODBC ist ja wie gesagt installiert.
Kann ich Dir aus dem Stehgreif jetzt nicht sagen und testen kann ich es auch nicht, aber Du könntest mal probieren, ob vielleicht schon das Austauschen von "jdbc" durch "odbc" in

Code: Alles auswählen

sURL = "sdbc:mysql:jdbc:" & sHost & ":" & sPort & "/" & sDatabase & "?user=" & sLogin & "&password=" & sPassword
ausreicht.
Antworten