Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

Oracle-Daten in Text-Datei schreiben





Frage

Hallo, ich habe eine Oracle 8i-Datenbank. Auf diese Datenbank selectiere ich nachfolgendes Statement: select spanr,sbestellnr,nlosgroesse from pa_kopf_we where npastatusnr = 1; Das SQL-Tool das ich hierfür benutze ist von SQLBase und heißt SQLTALK.EXE. Aus diesem select soll die Text-Datei "c:\temp\pastatus.txt" erzeugt werden. Die 3 Spalten sollen mit dem Zeichen ; getrennt ausgegeben werden. Existiert die Datei bei erneuter Ausgabe, sollen die "neuen" Daten angehängt werden. Diese Funktion möchte ich dann per "geplanter Task" ausführen lassen. Kann mir da jemand weiterhelfen? Gruß Werner

Antwort 1 von Ingolf Seidel

Hallo Werner:

Habe zwar nicht Deine Problemstellung, aber den Zugriff von extern auf Oracle-DBs realisiere ich (wenn auch aus anderen Gründen) via VB- oder JavaScript-Lösungen, die über DAO eine ODBC-Verknüpfung zur jeweiligen DB nutzen.

Vorteil: Aufbereitung der Ergebnisse via Scripting (einfach) und beliebige Weiterverarbeitung. Zudem könntest Du die Ausführung des entsprechenden Scripts als Task nach Belieben einrichten.

Gruss, Ingolf.

Antwort 2 von Werner

Hallo Ingolf,

diese Lösung hatte ich auch schon angedacht.
Habe in Sachen VB und JavaScript wenig Einblick.
Kannst Du mir in Sachen VB einen Einstieg geben?

Ich gehe übrigens auch per ODBC auf die Datenbank.

Gruß
Werner

Antwort 3 von Ingolf Seidel

Hallo Werner:

Ich werde Dir heute abend die entsprechenden Fragmente zur Verfügung stellen, so daß Du die Programmteile morgen abrufen kannst.
Ich hoffe, daß es für Dich OK ist.

Gruss, Ingolf.

Antwort 4 von Werner

Hallo Ingolf,
ist OK.
Vielen Dank im voraus.

Gruß
Werner


Antwort 5 von Ingolf Seidel

Guten Abend Werner:

Habe nun die Fragmente etwas anonymisiert, so daß ich sie Dir nachfolgend anbieten kann. Wie im Code vermerkt, findest Du z.B. unter www.msdn.com (Stichworte DAO, OpenRecordSet, ...) ziemlich viele Infos zum Umgang mit DAO und ODBC, aber leider kein einfaches Beispiel wie es denn geht (oder das Beispiel geht irgendwo in der Fülle der Informationen unter).

So, genug der Worte, der Code folgt, ich hoffe, es hilft Dir,
Gruß, Ingolf.

'#######################################################################################
' name : beispiel fuer vbscript und oracle
'#######################################################################################

' ...

' datenbankobjekte
Dim odbcConnect
Dim daoWorkSpace
Dim db
Dim dao36
Dim rs

' dao konstanten
' hinweis: weitere infos zu dao und den moeglichkeiten finden sich unter www.msdn.com
Const dbOpenDynaset = 2
Const dbSQLPassThrough = 64

'#######################################################################################
Sub initODBC()
' definition der odbc-verbindung.
'#######################################################################################

odbcConnect = "ODBC;DSN=<dsn-name>;Database=<oracle-instanz>;UID=<user-name>;PWD=<passwort>;"

End Sub

'#######################################################################################
Sub main()
' beispiel fuer den einstiegspunkt eines scripts. wuerde mit call main in einem eigenstaendigen
' vbscript aufgerufen.
'#######################################################################################

' ...

' odbc-verbindung definieren
Call initODBC

' datenbank-verbindung aufbauen
If initDB = False Then
MsgBox("Die Datenbankverbindung kann nicht aufgebaut werden." & vbCrLf & " Das Script wird beendet.")
Else
' ...
' datenbank und dao-workspace schliessen
db.close
daoWorkSpace.close
End If

End Sub

'#######################################################################################
Function initDB()
' aufbau der datenbankverbindung.
'#######################################################################################

' fehlercode
initDB = True

' dao kommunikation definieren
Set dao36 = CreateObject("DAO.DBEngine.36")
Set daoWorkSpace = dao36.CreateWorkspace("NewODBCWrk", "admin", dbUseODBC)
If Err.Number <> 0 Then
' fehlercode setzen
initDB = False
MsgBox("dao36.CreateWorkspace" & Err.Number & ":" & Err.Description)
Err.clear
End If

' datenbank verbindung aufbauen
Set db = daoWorkSpace.OpenDatabase("e5_ergotime", dbDriverNoPrompt, False, odbcConnect)
If Err.Number <> 0 Then
' fehlercode setzen
initDB = False
MsgBox("daoWorkSpace.OpenDatabase" & Err.Number & ":" & Err.Description)
Err.clear
End If

End Function

'#######################################################################################
Function sqlExecute(exportDB, sql, rs, mode)
' ausfuehren von sql via odbc
' mode = 0 ... read-operation
' mode = 1 ... write-operation
'#######################################################################################

' flag fuer erfolg = true oder misserfolg = false
sqlExecute = False

' MsgBox(sql)

Set rs = exportDB.OpenRecordset(sql, dbOpenDynaset, dbSQLPassThrough)

If mode = 0 Then
' bei read-operation true, wenn recordset geliefert wird
If Not rs.BOF Then
If Not rs.EOF Then
sqlExecute = True
End If
End If
Else
' bei write-operationen true setzen
sqlExecute = True
End If

End Function

'#######################################################################################
Function xyz(param1, param2)
' beispiele fuer schreiben (= insert) und lesen (= select) der oracle-db.
'#######################################################################################

Dim sql
Dim sqlReturn

' beispiel fuer insert
sql = "INSERT INTO XXX ("
sql = sql & "0" & ","
sql = sql & "'" & param1 & "'" & ","
sql = sql & "'" & param2 & "'" & ")"
sqlReturn = sqlExecute(db, sql, rs, 1)

' beispiel fuer select mit anschliessender auswertung des gelieferten recordsets rs
sql = "SELECT ZZZ FROM DUAL"
sqlReturn = sqlExecute(db, sql, rs, 0)

If sqlReturn = True Then
' hinweis: in rs.fields(...) stehen die rueckgabewerte des selects.
' die dimension (= anzahl der werte von fields) entspricht der
' anzahl der rueckgabewerte des selects.
setNewReport = rs.fields(0)
End If

' ...
' hinweis: die ergebnisse, die ueber selects aus der datenbank extrahiert werden,
' koennen dann z.b. in eine textdatei exportiert werden. zum umgang mit textdateien
' bei vbscript unter filesystemobject suchen. damit lassen sich einfach dateien
' erzeugen und mit writeln(...) auch schreiben.

End Function


Antwort 6 von Wener

Hallo Ingolf,

bin mit deiner Hilfe schon etwas weiter gekommen.
Ich habe aber mit der Funktion initDB
"Set db = daoWorkSpace.OpenDatabase("e5_ergotime", dbDriverNoPrompt, False, odbcConnect)"
noch Probleme.
An dieser Stelle bekomme ich einen Laufzeitfehler 3151 ODBC-Verbindung zu 'CAQ' fehlgeschlagen.

Kannst du mir helfen?

Gruß
Werner



Antwort 7 von Ingolf Seidel

Hallo Werner:

Wenn Deine die DSN Deiner ODBC-Verbindung den Namen XYZ hat, dann müßte "Set db = daoWorkSpace.OpenDatabase("XZY", dbDriverNoPrompt, False, odbcConnect)" funktionieren.
D.h. setze die DSN ein, die auch in "odbcConnect = "ODBC;DSN=<dsn-name>;Database=<oracle-instanz>;UID=<user-name>;PWD=<passwort>;" als dsn-name verwendet wurde.

Gruß und viel Erfolg,
Ingolf.


Antwort 8 von Werner

Hallo Ingolf,

suuuper!!!!
Es läuft.

Vielen Dank.

Gruß Werner

PS.: An das auslesen gehe ich die nächsten Tage!

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: