Basic: SQL-Aktualisierungsabfragen ausführen lassen, ODBC

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Basic: SQL-Aktualisierungsabfragen ausführen lassen, ODBC

von Mihilist » Di, 24.10.2006 10:34

Wenn du in Base/einem Base-Formular arbeitest hat dein Dokument schon eine Verbindung. Die bekommst du mit

Code: Alles auswählen

ThisComponent.Drawpage.Forms.getByName(sMyFormName).ActiveConnection
Und damit kannst du dann etwa ein Update machen:

Code: Alles auswählen

ThisComponent.Drawpage.Forms.getByName(sMyFormName).ActiveConnection.CreateStatement.executeUpdate(sMyUpdate)
Grüßle
Thomas

von egerlach » Mo, 23.10.2006 00:41

gelöst!!!!!

http://groups.google.de/group/de.comp.o ... b277386b0e
sub DBRead
on error goto errDBRead
Dim oDrMan As Object
Dim oConn As Object
Dim oStat As Object
Dim oRes As Object
Dim oSheet As Object
Dim oTab As Object
Dim n As Integer
Dim dbInfoData(1) As New com.sun.star.beans.PropertyValue

' Object mit DriverManager erstellen
oDrMan = CreateUnoService("com.sun.star.sdbc.DriverManager")
' Login Timeout auf 10 Sek. festlegen
oDrMan.setLoginTimeout(10)

' username und password fuer die DB
dbInfoData(0).Name="user"
dbInfoData(0).Value="root"
dbInfoData(1).Name="password"
dbInfoData(1).Value="Joerg"

' Verbindung zum MySQL - Server über ODBC herstellen
' Auchtung: myodbc muß vorher bekannt sein ( odbc.ini )
oConn = oDrMan.getConnectionWithInfo("sdbc:odbc:myodbc",dbInfoData())

' Verbindung zum Adabas D Sever sieht so aus,
' wobei mich die 2 '::' im String "sdbc:adabas::MYDB" wundern.
' oConn = oDrMan.getConnectionWithInfo("sdbc:adabas::MYDB",dbInfoData())

' Ueberpruefen ob die Verbindung zustande gekommen ist
if(oConn.isClosed()) then
msgbox "Connection Error"
exit Sub
endif

' Ein Statement für die Verbindung erstellen
oStat = oConn.createStatement()

' SQL Query absenden
oRes = oStat.executeQuery("select * from computer_type")

' Damit Daten in ein Tabellenblatt geschieben werden koennen
oSheets = ThisComponent.Sheets
oTab = oSheets.getByName("Tabelle2")

' Alle gefundenen Ergebnisse der SQL-Query abarbeiten
n = 1
While oRes.next()
' Wert in Zelle Bn schreiben
oCell = oTab.getCellByPosition(1,n)
n = n+1
oCell.String = oRes.GetString(2)
Wend

' Sub beenden
exitDBRead:
exit Sub

' Fehler ist aufgetreten
errDBRead:
msgbox error$
resume exitDBRead:

End Sub


statt einem executeQuery dann ein executeUpdate:
oStat.executeUpdate("update table1 setz rf=2")

fertig.
Gruss
eckard

Basic: SQL-Aktualisierungsabfragen ausführen lassen, ODBC

von egerlach » So, 22.10.2006 21:05

Hat hier jmd schon mal per ODBC SQL-Statements durchgereicht? Ich meine Aktualisierungsabfragen (z.B. update table1 set rf=0).

Wie lautet die Syntax? Ich meine 1 Beispiel. (Klar, es steht alles in der API-Doku von OO, da ich aber nicht erstens faul bin und zweites nicht mit OO ins Bett gehe (sondern mit meiner Freundin) hier die Bitte an die Gemeinde nach einem ersten Beispiel. Tiefergehendes werde ich mir daraufhin in der Doku suchen.

Übrigens: die Tabellen, die ich manipulieren will, sind schon per ODBC eingebunden. Wenn es also möglich ist eine per ODBC eingebundene Tabelle so zu behandeln wie eine lokale von OO, dann reicht mir (erstmal) auch ein Beispiel für einen solchen Code.

Gruss
Eckard

Nachtrag: habe unter http://www.wienandt.de/seiten/dbklein.htm -> odbc.zip eine "odbc.odb" gefunden mit Code:

DIM's ...
[...]
sURL = "sdbc:odbc:myODBC_Source"
'Aufruf des entsprechenden Service und zuweisen auf Variable
oVerbinder = CreateUnoService("com.sun.star.sdbc.DriverManager")
oConnection = oVerbinder.getConnection(sURL)
'Einstellen der Variable oStatement für den zu sendenden SQL-String an Datenbank
oStatement = oConnection.CreateStatement()
[...]

was auch funktioniert, wenn das nicht die Username und Passwort-Abfrage meiner ODBC-Datenquelle wäre. Es wird beim Versuch der Erstellung einer Verbindung bemägelt, daß ein Username und PAsswort erforderlich ist. :-(

Daraufhin habe ich unter http://docs.sun.com/app/docs/doc/819-13 ... =de&a=view
-> Datenbankzugriff eine Version gefunden wie auf eine lokale, nicht ODBC-Datenquelle zugegriffen werden kann:

Dim DatabaseContext
As Object Dim DataSource
As Object Dim Connection
As Object Dim InteractionHandler
as Object

DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
DataSource = DatabaseContext.getByName("Customers")

If Not DataSource.IsPasswordRequired
Then Connection = DataSource.GetConnection
("","")
Else InteractionHandler = createUnoService("com.sun.star.sdb.InteractionHandler")
Connection = DataSource.ConnectWithCompletion(InteractionHandler)
End If

Leider gelingt mir es nicht die beiden Verfahren miteinander zu verheiraten. Habe schon viele Kombinationen probiert. Kann das jmd hier?

Gruss
Eckard

Nach oben