MS SQL, daten lesen/schreiben

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

danielgoehl
Beiträge: 2
Registriert: So, 09.04.2006 09:21

MS SQL, daten lesen/schreiben

Beitrag von danielgoehl »

Hallo,

ich habe schon viel gegoogelt aber noch keine wirklich verwertbaren informationen gefunde, also frag ich euch jetzt mal.

Ist es möglich aus Calc auf eine MS SQL SB zuzugreifen, sowohl schreib als auch lesezugriff?? Falls ja, hat jemand vieleicht ein kleines code schnipsel das mir weiterhelfen könnte, oder auch eine website auf der ich mich einlesen kann??

Auch über sites mit OO Basic doku würde ich mich freuen, habe nicht soviel gefunden . . . ehrlich gesagt bin ich der meinung, dass das OO Basic ziemlich schlecht dokumentiert ist.

Vielen Dank für eure Hilfe!!

Daniel
sascha11
***
Beiträge: 82
Registriert: Di, 10.01.2006 11:21

Beitrag von sascha11 »

OO Basic Doku gibts im Forum hier- Rubrik Basic und Java

die ist ganz in Ordnung dokumentiert- s. auch amt-wiesbaden.de und hier die Codebeispiele

Was meinst du mit Datenbank- die Excel Tabelle?
Wie du die mit SQL abfragen kannst? http://hsqldb.org/doc/guide/ch09.html
Das wäre ein Thema das auch für mich interessant ist....

Gruß,

Sascha
danielgoehl
Beiträge: 2
Registriert: So, 09.04.2006 09:21

Beitrag von danielgoehl »

Hi, danke schonmal für die Antwort.

Was ich machen möchte is folgendes. In einer MS SQL Datenbank liegen die Daten eines WaWi Systems. Ich habe nun eine Kalkulation geschrieben die es ermöglicht eine Produktkalkulation zu machen aufgrund der Daten des WaWi. Da nun überlegt wird auf OpenOffice zu migrieren muss sichergestellt sein das ich sowohl Daten aus dem WaWi lesen als auch wieder zurückschreiben kann!!

Vieleicht weiß ja jmd was.

Gruß Daniel
c.garfield
Beiträge: 3
Registriert: So, 23.04.2006 00:12
Wohnort: Castrop-Rauxel

MS SQL Verbindung

Beitrag von c.garfield »

Hallo danielgoehl,

leider kann ich Dir zur Zeit nicht helfen, ich stehe aber vor einem sehr ähnlichen Problem:

Ich greife zur Zeit mit Excel auf die Datenbanken unsere SQL-Server zu (VBA sei Dank!) und würde dies gern auf Calc portieren.

Leider finde ich auch keinen vernünftigen Ansatzpunkt für die Verbindung zum MS SQL-Server. Der Weg über eine Datenquelle öffnet mir zwar die Daten der Tabelle per ODBC, aber weiter bin ich noch nicht gekommen .

Dies ist die Auflistung meiner aktuellen Ziele, vielleicht können wir uns dabei gegenseitig helfen:
- Verbindung zum SQL-Server per BASIC aufbauen
- Daten per BASIC in Calc übernehmen
- geänderte Daten per BASIC zurückschreiben

Mit VBA (mittlerweile) ein Kinderspiel, aber dabei soll's ja nicht stehenbleiben.

Mit freundlichen Grüßen

Christian
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey ihr beiden,

ok, das Forum ist nicht gerade ideal, diese zu diskutieren - besser wäre das Base-Forum oder das Basic-Forum :wink:

Aber egal. Wenn Ihr über Basic zugreifen wollt, so braucht ihr zuerst eine Verbindung - dann könnt ihr SQL-Kommandos entsprechend übermiteln. Hier ist mal ein (natürlich funktionierendes) Code-Sniplet, das das Prinzip darstellt. Ich nutze allerding keine ODBC Verbindung, sondern eine JDBC - Verbindung (auch unter Windows XP).

Code: Alles auswählen

Sub getConnection

	dim mDBProperties(2) as New com.sun.star.beans.PropertyValue
	
	mDBProperties(0).name = "user"
	mDBProperties(0).value = "Thomas"
	mDBProperties(1).Name = "password"
	mDBProperties(1).value = "myPasswort"
	mDBProperties(2).Name = "JavaDriverClass"
	mDBProperties(2).value = "org.gjt.mm.mysql.Driver"
	
	oDriverManager = createUnoService("com.sun.star.sdbc.DriverManager")
	oConnection = oDriverManager.getConnectionWithInfo( _
	              "jdbc:mysql://192.168.1.143:3306/mainhausen", mDBProperties())
	              
	oStatement = oConnection.createStatement()
	REM  hier wird gelesen, und zwar die Zahl in Spalte 3
        'oResultSet = oStatement.executeQuery("SELECT * FROM cpm_preise")

	'Do while (oResultSet.next)
	'	msgbox oResultSet.getdouble(3)
	'loop
REM jetzt wird geschrieben - ein neuer Datensatz. Das Problem: Ihr
REM müsst dem SQL -Befehl den Dezimaltrenner als Punkt übergeben!
	dZahl = 3.2
	sZahl = cStr(dZahl)
	mid(sZahl, instr(sZahl, ","), 1, ".")
	msgbox sZahl
	oStatement.executeUpdate( "insert into cpm_preise( pr_pos1, pr_pos2) values ( '4.2', " & sZahl & ")")
		
	oConnection.close()	
	
End Sub
Ich hoffe, das hilft euch bei euren weiteren Betrachtungen :D

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
c.garfield
Beiträge: 3
Registriert: So, 23.04.2006 00:12
Wohnort: Castrop-Rauxel

Beitrag von c.garfield »

Hallo Toxitom,

danke für Deine Hilfe, allerdings verbindest Du damit auf einen mysql-Server.
Wir haben aber das Problem, das unsere Daten auf einem MS SQL-Server liegen.

Deshalb müsste der Weg eigentlich über ODBC oder über ADO laufen, oder?

Hättest Du auch dafür einen Vorschlag?

Gruss,
Christian
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Christian,
danke für Deine Hilfe, allerdings verbindest Du damit auf einen mysql-Server.
Wir haben aber das Problem, das unsere Daten auf einem MS SQL-Server liegen.
Tia, so schenll kann mann sich "verlesen". Sorry :oops:

Na egal, der Weg ist der gleiche. Dann gehst du eben über ODBC - die Verbindung muss dann ja in Windows schon definiert sein. Leider habe ich keinen MS SQL Server und kann das nicht testen, aber die ODBC Verbindung funktioniert nach dem Schema:

Code: Alles auswählen

...
dim mDBProperties(1) as New com.sun.star.beans.PropertyValue
   
   mDBProperties(0).name = "user"
   mDBProperties(0).value = "Thomas"
   mDBProperties(1).Name = "password"
   mDBProperties(1).value = "myPasswort" 
oDriverManager = createUnoService("com.sun.star.sdbc.DriverManager")
   oConnection = oDriverManager.getConnectionWithInfo( _
                 "sdbc:odbc:MeineODBCVerbindung", mDBProperties())
...
Wobei "MeineODBCVerbindung" den Name der bereits eingerichtetenODBC-Verbindung darstellt. So klappt es bei mir auf die MySQL Datenbank zuzugreifen - per ODBC.

Müsst ihr halt mal ausprobierern.

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
c.garfield
Beiträge: 3
Registriert: So, 23.04.2006 00:12
Wohnort: Castrop-Rauxel

Beitrag von c.garfield »

Hallo Thomas,

vielen Dank, damit kommt eine Verbindung zustande, ich kann die Daten lesen.

Wie bekomme ich den Inhalt das Resultsets nach Calc?

unter VBA:
"Selection.CopyFromRecordset v_rs"

Vielen Dank,
Christian
Antworten