kikimiki
Goto Top

vbs - Oracle DB to xls

Hallo,

dank der Hilfe im Forum hier hab ich eine vbs welche mir ein SQL-Statement auf unserer MYSQL DB ausführt und das Ergebnis in xls importiert. Ist das auch für eine Oracle DB möglich?
Hier der von mir benutzte Code:

Option Explicit

'---- CursorTypeEnum Values ----  
Const adOpenForwardOnly = 0
' Const adOpenKeyset = 1  
' Const adOpenDynamic = 2  
' Const adOpenStatic = 3  

'---- LockTypeEnum Values ----  
Const adLockReadOnly = 1
' Const adLockPessimistic = 2  
' Const adLockOptimistic = 3  
' Const adLockBatchOptimistic = 4  

'---- CursorLocationEnum Values ----  
' Const adUseServer = 2  
Const adUseClient = 3

'---- ConnectModeEnum Values ----  
' Const adModeUnknown = 0  
Const adModeRead = 1
' Const adModeWrite = 2  
' Const adModeReadWrite = 3  
' Const adModeShareDenyRead = 4  
' Const adModeShareDenyWrite = 8  
' Const adModeShareExclusive = &Hc  
' Const adModeShareDenyNone = &H10  
' Const adModeRecursive = &H400000  
Dim objExcel, objWb, SkriptPfad
Dim objSheet
Dim Conn, RS
Dim rowCount, i, headerSet
Dim x 'Zähler für Statusbar  


MsgBox "Mit dem OK-Button wird der Import gestartet."& vbCrLf & "Je nach SQL-Statement kann der Import mehrere Minuten dauern!" ,64, "Info"  


x = 0 'Anfangswert für Zähler - Anzahl importierter Datensätze  


rowCount = 1

SkriptPfad = WScript.ScriptFullName 'Pfadermittlung  
SkriptPfad = Left(SkriptPfad, Len(SkriptPfad) - Len(WScript.ScriptName))  'Pfadermittlung  


Set objExcel = CreateObject("Excel.Application")   
Set objWb = objExcel.Workbooks.Open(SkriptPfad & "Report.xls")'öffnet die angegebene xls  



objExcel.Visible = False 'die geöffnete xls ist während dem Import nicht sichtbar  
objExcel.Sheets("Datenbasis").Select 'wählt die angegebene Mappe der zuvor geöffneten xls  
objExcel.Range("Datenbasis!$1:$65536").ClearContents 'löscht alle Inhalte von angegebener Mappe  

'Angabe des Tabellenblattes  
Set objSheet = objExcel.ActiveWorkbook.WorkSheets("Datenbasis") 'Import in angegebenes Tabellenblatt  

Set Conn = CreateObject("ADODB.Connection")  
Conn.Provider = "MSDASQL"  
Conn.Mode = adModeRead
Conn.CursorLocation = adUseClient
Conn.Open "DRIVER={MySQL ODBC 5.1 Driver};" & _  
          "SERVER=100.10.19.173;UID=read_user;PWD=geheim;Port=3310;database=kunden_db"  
         

Set RS = CreateObject("ADODB.Recordset")  
RS.CursorLocation = adUseClient
'verwendete SQL-Anweisung  
RS.Source = "SELECT * from Kundentabelle;"  
Set RS.ActiveConnection = Conn
RS.CursorType = adOpenForwardOnly
RS.LockType = adLockReadOnly
RS.Open          

Do While Not RS.EOF
'objExcel.StatusBar = x & " Datensätze aus Kundendatenbank importiert" 'Text für Statusbar 'macht nur Sinn bei objExcel.Visible = True  
'Die Spalenüberschriften einfügen Bezug aus dem SQL-Statement  
	If( headerSet = 0 ) Then
		For i = 0 to RS.Fields.Count - 1
		  objSheet.Cells(rowCount, i+1).Value = RS.Fields.Item(i).Name
		Next
		headerSet = 1
    End If
'Die dazugehörigen Werte einfügen  
	For i = 0 to RS.Fields.Count -1 
	  objSheet.Cells(rowCount+1, i+1).Value = RS.Fields.Item(i).Value
	Next
    rowCount = rowCount + 1
	RS.MoveNext
	
x = x + 1
Loop
'objExcel.Statusbar = False 'Statusbar bereinigen 'macht nur Sinn bei objExcel.Visible = True  


objExcel.Sheets("Kunden").Select 'wählt die angegebene Mappe der zuvor geöffneten xls  
objExcel.Cells(12, 5) = Date & " / " & Time & " Uhr"   
objExcel.Cells(13, 5) = x & " Datensätze"  


RS.Close
Set RS = Nothing

Conn.Close
Set Conn = Nothing


objExcel.Visible = False 

objExcel.ActiveWorkBook.Save 
objExcel.Quit

Content-Key: 129559

Url: https://administrator.de/contentid/129559

Printed on: April 25, 2024 at 22:04 o'clock

Member: Biber
Biber Nov 17, 2009 at 12:13:01 (UTC)
Goto Top
Moin KikiMiki,

natürlich ist es möglich.

Benötigst du das denn auf einem Rechner, auf dem ein (=irgendein) Oracle-Client installiert ist oder liegt nur der Original-MS-Oracle-Dünnbrett-Treiber vor?

Grüße
Biber
Member: KikiMiki
KikiMiki Nov 17, 2009 at 12:17:52 (UTC)
Goto Top
Hi Biber
Bin jetzt nicht so der Proooofi face-smile
Über Toad for Oracle greif ich auch unsere DB...

Hilft dir das weiter?
Member: Biber
Biber Nov 17, 2009 at 12:39:01 (UTC)
Goto Top
Moin KikiMiki,

wenn TOAD installiert ist, dann gibt es wahrscheinlich auch eine richtig einstellte tnsnames.ora.
Aus dieser kannst du dann die Feinheiten abtippen.

Das grobe Raster für Egal-welchen-Oracle-Zugriff findest du ansonsten auf Connectionstrings.

Grüße
Biber
Member: KikiMiki
KikiMiki Nov 17, 2009 at 13:02:31 (UTC)
Goto Top
Hi Biber

bezogen auf meinen geposteten Code, welche Passagen muss ich ändern?
Ist der Aufbau der gleiche und nur die Verbindungsparameter müssen geändert werden?
Member: Biber
Biber Nov 17, 2009 at 13:41:17 (UTC)
Goto Top
Moin KikiMiki,

es sollte mit der gleichen Mimik funktionieren, lediglich die Zeilen 61-65 sollten mit den Daten der Oracle-Connection gefüllt werden.

Da es (soweit es ersichtlich) nur um Lesezugriffe geht, ist kein größerer Änderungsaufwand ableitbar.

Grüße
Biber
Member: Bacaaardi
Bacaaardi Nov 17, 2009 at 14:05:23 (UTC)
Goto Top
Hallo,

irgendwie check ich das nicht


Conn.Provider = "MSDASQL"   
Conn.Mode = adModeRead 
Conn.CursorLocation = adUseClient 
Conn.Open "DRIVER={MySQL ODBC 5.1 Driver};" & _   
          "SERVER=100.10.19.173;UID=read_user;PWD=geheim;Port=3310;database=kunden_db"   

Kann ich exakt die gleiche Syntax nehmen?
Nur Server, UID, PWD,POrt und databese mit den entsprechenden Werten ersetzten?
Brauch ich keine zusätzlichen Werte, heißt auch alles Gleich z.B. UID oder UserID?

Bei Conn.Provider was muss da stehen wenn es eine Oracle DB ist?

Damit mein Skript über die MySQL überhaupt lief musste ich mysql-connector-odbc-5.1.5-win32.msi installieren
Brauch ich auch was für dei Oracle DB?