Discussion:
Zugriff auf Oracle DB über VBA
(zu alt für eine Antwort)
Christina Doerfel
2008-04-16 13:54:02 UTC
Permalink
Hallo NG,
ich suche den korrekten Connection-String, um auf eine Oracle DB aus einer
Word-Vorlage zuzugreifen. Die Daten will ich dann in eine Textmarke lesen.
Die SQL Abfrage ist kein Problem, das krieg ich hin. Kann mir jemand einen
Tipp geben?
Vielen Dank und beste Grüsse
Christina
Susanne Wenzel
2008-04-17 05:34:47 UTC
Permalink
Hallo Christina,
Post by Christina Doerfel
ich suche den korrekten Connection-String, um auf eine Oracle DB aus einer
Word-Vorlage zuzugreifen. Die Daten will ich dann in eine Textmarke lesen.
Die SQL Abfrage ist kein Problem, das krieg ich hin. Kann mir jemand einen
Tipp geben?
versuchs mal mit meiner Lieblingsseite hierzu:
www.connectionstrings.com

HTH
Viele Grüße aus dem hohen flachen Norden Deutschlands
Susanne
--
Office XP, SP3, aktueller Patchstand
Windows 2000, SP4, aktueller Patchstand
KI-TRIPLE 2007
Christina Doerfel
2008-04-19 16:51:01 UTC
Permalink
Hallo Susanne,
danke, das werd ich tun.
Viele Gruesse
Christina
Post by Susanne Wenzel
Hallo Christina,
Post by Christina Doerfel
ich suche den korrekten Connection-String, um auf eine Oracle DB aus einer
Word-Vorlage zuzugreifen. Die Daten will ich dann in eine Textmarke lesen.
Die SQL Abfrage ist kein Problem, das krieg ich hin. Kann mir jemand einen
Tipp geben?
www.connectionstrings.com
HTH
Viele Grüße aus dem hohen flachen Norden Deutschlands
Susanne
--
Office XP, SP3, aktueller Patchstand
Windows 2000, SP4, aktueller Patchstand
KI-TRIPLE 2007
Juergen Grieb
2008-04-18 06:30:50 UTC
Permalink
Hallo Christina,

die Sache ist aus VBA nicht ganz so einfach und kann auf
unterschiedlichen Konfigurationen an diversen Sachen scheitern. Ich
habe bei meinen Versuchen etliche Fehlschläge erlitten. Nachfolgende
Funktion sollte (immer) funktionieren:

'********************************************************************************************
'*
openOracle
*
'*
*
'* Funktion: stellt eine Verbindung zur Oracle-DB
her *
'* Parameter: db: globales Datenbank-
Objekt *
'* Rückgabewerte: True: Verbindung wurde
hergestellt *
'* False: Herstellen der Verbindung ist
fehlgeschlagen *
'* Besonderheiten:
-
*
'********************************************************************************************

Public Function openOracle(db As Database) As Boolean
Const errSub = "openOracle"

Dim connect As Boolean
Dim ODBCString As String
Dim versuche As Integer
Dim ret As Variant
Dim rs As Recordset

On Error GoTo Abbruch

connect = False

ODBCString = "ODBC;" & _
"DRIVER={Oracle in OraHome10_2};" & _
"TLO=O;" & _
"PFC=10;" & _
"FWC=F;" & _
"CSR=F;" & _
"MDI=Me;" & _
"MTS=F;" & _
"BAM=IfAllSuccessful;" & _
"FRL=Lo;" & _
"GDE=F;" & _
"RST=T;" & _
"LOB=T;" & _
"FDL=10;" & _
"FRC=10;" & _
"QTO=T;" & _
"FEN=T;" & _
"APA=T;" & _
"NUM=US;" & _
"DBA=W;"

ODBCString = ODBCString & "DBQ=eigenerWert;" & _
"SERVER=eigenerWert;" & _
"UID=eigenerWert;" & _
"DATABASE=eigenerWert;" & _
"PWD=eigenerWert"

Do While Not connect
'ab dem 2. Versuch jeweils eine zusätzliche Sekunde warten
Call Sleep(1000 * versuche)

On Error Resume Next
Set db = DBEngine(0).OpenDatabase("", dbDriverNoPrompt, False,
ODBCString)
If Err.Number <> 0 Then
versuche = versuche + 1
ret = SysCmd(acSysCmdSetStatus, "Verbindung zur Oracle-Datenbank
wird hergestellt ... " & versuche + 1 & ". Versuch")
Else
connect = True
End If

If versuche > 3 Then Exit Do
Loop

On Error GoTo Abbruch

openOracle = connect

ExitFunction:
On Error Resume Next 'ab hier interessieren Fehler nicht mehr,
daher einfach weitermachen
ret = SysCmd(3)
Exit Function
Abbruch:
Call ErrorHandler(errModul, errSub)
Resume ExitFunction 'Gehe zum Aufräumen
End Function

Gruß Jürgen
Christina Doerfel
2008-04-19 16:11:01 UTC
Permalink
Hallo Juergen,
vielen Dank fuer deine Hilfe. Ich werd's ausprobieren. Weisst du, ob man das
auch ueber ein OLE DB Objekt hinkriegen koennte?
Dann muesste keine ODBC Datenquelle eingerichtet werden.
Viele Gruesse
Christina
Post by Susanne Wenzel
Hallo Christina,
die Sache ist aus VBA nicht ganz so einfach und kann auf
unterschiedlichen Konfigurationen an diversen Sachen scheitern. Ich
habe bei meinen Versuchen etliche Fehlschläge erlitten. Nachfolgende
'********************************************************************************************
'*
openOracle
*
'*
*
'* Funktion: stellt eine Verbindung zur Oracle-DB
her *
'* Parameter: db: globales Datenbank-
Objekt *
'* Rückgabewerte: True: Verbindung wurde
hergestellt *
'* False: Herstellen der Verbindung ist
fehlgeschlagen *
-
*
'********************************************************************************************
Public Function openOracle(db As Database) As Boolean
Const errSub = "openOracle"
Dim connect As Boolean
Dim ODBCString As String
Dim versuche As Integer
Dim ret As Variant
Dim rs As Recordset
On Error GoTo Abbruch
connect = False
ODBCString = "ODBC;" & _
"DRIVER={Oracle in OraHome10_2};" & _
"TLO=O;" & _
"PFC=10;" & _
"FWC=F;" & _
"CSR=F;" & _
"MDI=Me;" & _
"MTS=F;" & _
"BAM=IfAllSuccessful;" & _
"FRL=Lo;" & _
"GDE=F;" & _
"RST=T;" & _
"LOB=T;" & _
"FDL=10;" & _
"FRC=10;" & _
"QTO=T;" & _
"FEN=T;" & _
"APA=T;" & _
"NUM=US;" & _
"DBA=W;"
ODBCString = ODBCString & "DBQ=eigenerWert;" & _
"SERVER=eigenerWert;" & _
"UID=eigenerWert;" & _
"DATABASE=eigenerWert;" & _
"PWD=eigenerWert"
Do While Not connect
'ab dem 2. Versuch jeweils eine zusätzliche Sekunde warten
Call Sleep(1000 * versuche)
On Error Resume Next
Set db = DBEngine(0).OpenDatabase("", dbDriverNoPrompt, False,
ODBCString)
If Err.Number <> 0 Then
versuche = versuche + 1
ret = SysCmd(acSysCmdSetStatus, "Verbindung zur Oracle-Datenbank
wird hergestellt ... " & versuche + 1 & ". Versuch")
Else
connect = True
End If
If versuche > 3 Then Exit Do
Loop
On Error GoTo Abbruch
openOracle = connect
On Error Resume Next 'ab hier interessieren Fehler nicht mehr,
daher einfach weitermachen
ret = SysCmd(3)
Exit Function
Call ErrorHandler(errModul, errSub)
Resume ExitFunction 'Gehe zum Aufräumen
End Function
Gruß Jürgen
Juergen Grieb
2008-04-21 05:03:52 UTC
Permalink
On 19 Apr., 18:11, Christina Doerfel
Post by Christina Doerfel
Hallo Juergen,
vielen Dank fuer deine Hilfe. Ich werd's ausprobieren. Weisst du, ob man das
auch ueber ein OLE DB Objekt hinkriegen koennte?
Dann muesste keine ODBC Datenquelle eingerichtet werden.
Hallo Christine,

musst Du nicht, das ist eben der "Trick" an der ganzen Geschichte. Ich
habe keinen Zugriff auf die Rechner, wo meine Anwendungen laufen,
daher wollte ich ohne große Installation auskommen. openOracle enthält
alles, was nötig ist.

Mit

Set r = db.OpenRecordset("SELECT * FROM BLA" , dbOpenSnapshot,
dbSQLPassThrough)

bekommst Du ein Recordset mit den Ergebnissen Deiner Abfrage.

Set r = db.OpenRecordset("DELETE * FROM BLA" , dbOpenDynaset,
dbSQLPassThrough)

Kannst Du benutzen, um schreibend auf die DB zuzugreifen.

Gruß Jürgen
Christina Doerfel
2008-04-24 07:23:00 UTC
Permalink
Hallo Jürgen,
vielen Dank nochmal.
Beste Gruesse
Christina
Post by Juergen Grieb
On 19 Apr., 18:11, Christina Doerfel
Post by Christina Doerfel
Hallo Juergen,
vielen Dank fuer deine Hilfe. Ich werd's ausprobieren. Weisst du, ob man das
auch ueber ein OLE DB Objekt hinkriegen koennte?
Dann muesste keine ODBC Datenquelle eingerichtet werden.
Hallo Christine,
musst Du nicht, das ist eben der "Trick" an der ganzen Geschichte. Ich
habe keinen Zugriff auf die Rechner, wo meine Anwendungen laufen,
daher wollte ich ohne große Installation auskommen. openOracle enthält
alles, was nötig ist.
Mit
Set r = db.OpenRecordset("SELECT * FROM BLA" , dbOpenSnapshot,
dbSQLPassThrough)
bekommst Du ein Recordset mit den Ergebnissen Deiner Abfrage.
Set r = db.OpenRecordset("DELETE * FROM BLA" , dbOpenDynaset,
dbSQLPassThrough)
Kannst Du benutzen, um schreibend auf die DB zuzugreifen.
Gruß Jürgen
Loading...