VB Programm Zugriff auf Oracle 11g DB Verfasst am: 28.01.2010, 12:38
Hallo,
wir haben jahrelang ein VB Programm auf einem NT Server betrieben, welches auf eine Oracle 7.3 DB zugegriffen hat. Da der Server jetzt schlapp machte haben wir aufgerüstet und haben jetzt einen Server mit Windows Server 2008 und Oracle 11g zu laufen. Leider ist der Programmierer, welcher das Programm damals schrieb nicht mehr im Haus und keiner von uns hat Ahnung von VB. Das Programm wurde in VB 6 geschrieben.
Situation:
Server ist komplett eingerichtet und auch die Oracle DB läuft einwandfrei. Wenn man unser VB Programm öffnet kommt ein Fenster wo man die Login Daten für die DB eingeben muss. An dieser Stelle scheitert es leider. Das Programm meldet, dass es keine Verbindung zur DB bekommt.
Dieses Problem habe ich zumindest damit lösen können, dass ich den Teil
Code:
conORCL.Open "PROVIDER=MSDAORA; DATA SOURCE=ORADB", UserIdent, UserPwd
durch
Code:
Dim ConnString as string
ConnString = "Provider=MSDAORA.1 ; Password=myPassword; User ID=myUser ; Data Source = ORCL; Persist Security Info=True"
Dim objConn as new ADODB.Connection
objConn.open ConnString
ersetzt habe. Damit klappte zumindest erstmal der DB Zugriff, aber danach danach scheiterte es leider an den Zeilen ab
Code:
'Öffnen Recordset Stammdaten FORSTAMT]
dort meldet er dann immer "Fehler öffnen..."
Ich weiß, es ist sehr viel Code, aber ich hoffe Ihr könnte mir dennoch helfen.
Vielen Dank schonmal im Vorraus!!
OK, erstmal der Code:
Code:
Option Explicit
Private Function CheckError() As Boolean 'Fehltertest
CheckError = False
If InitError > 0 Then
WorkShow Work, "Go", True
INFO.Caption = "Es sind Fehler aufgetreten!" & Chr(13) & "(siehe Programmbeschreibung)"
ProgressBar.Visible = False
CheckError = True
End If
End Function
Private Sub Form_Activate() 'Aktivieren Form
On Error Resume Next
InitError = 0
Refresh
WorkShow Work, "Stop", True
'Öffnen Datenbank
Set conORCL = New ADODB.Connection
conORCL.ConnectionTimeout = 15
conORCL.CursorLocation = adUseClient
ProgressBar.Value = 1: Err.Clear
If TypDatenbank = 1 Then
Label1.Caption = "Öffnen ORACLE Datenbank": Work1.Caption = "öffnen...": Label1.Refresh: Work1.Refresh
OWNER = "VFLUSER."
conORCL.Open "PROVIDER=MSDAORA; DATA SOURCE=VFLDB", UserIdent, UserPwd
Else
Label1.Caption = "Öffnen lokale ACCESS Datenbank": Work1.Caption = "öffnen...": Label1.Refresh: Work1.Refresh
OWNER = "VFLUSER_"
conORCL.Open "PROVIDER=Microsoft.JET.OLEDB.4.0; DATA SOURCE=" & App.Path & "\VFLDBS.MDB", "Admin"
End If
If Err Then
Work1.Caption = "Fehler Öffnen Datenbank [" & Err.Number & "]"
InitError = InitError + 1: Err.Clear
Else
Work1.Caption = "Datenbank geöffnet"
End If
If UserIdent = "VFLUSER" Then 'Administrator
UserName = "Administrator"
UserPriv = "11111111111111111111111111111111111111111111111111" & _
"11111111111111111111111111111111111111111111111111" & _
"11111111111111111111111111111111111111111111111111" & _
"11111111111111111111111111111111111111111111111111" '200
Work2.Caption = "Nutzer Adminidstrator"
Else 'Nutzer
Set DAT = New ADODB.Recordset
DAT.Open "SELECT * FROM " & OWNER & "USERS WHERE USERID = '" & UserIdent & "'", conORCL
UserName = DAT!USERLANG.Value
UserPriv = DAT!PRIVILEG.Value
If Err Then
Work2.Caption = "Fehler Öffnen [" & Err.Number & "]"
InitError = InitError + 1: Err.Clear
Else
Work2.Caption = "Nutzer OK"
If DAT.RecordCount = 0 Then
Work2.Caption = "Ungültiger Nutzer"
InitError = InitError + 1: Err.Clear
End If
End If
DAT.Close: Set DAT = Nothing
End If
If CheckError Then Exit Sub
'Öffnen Recordset Stammdaten FORSTAMT
ProgressBar.Value = 3: Err.Clear
Label3.Caption = "Öffnen Stammdaten Forstämter": Work3.Caption = "öffnen...": Refresh
Set FOA = New ADODB.Recordset
FOA.Open "SELECT * FROM " & OWNER & "FORSTAMT ORDER BY FOANUMMER", _
conORCL, adOpenDynamic, adLockOptimistic, adCmdText
If Err Or FOA.RecordCount <= 0 Then
Work3.Caption = "Fehler Öffnen [" & Err.Number & "]"
InitError = InitError + 1: Err.Clear
Else
Work3.Caption = "Tabelle geöffnet"
End If
If CheckError Then Exit Sub
'Öffnen Recordset Stammdaten REVIER
ProgressBar.Value = 4: Err.Clear
Label4.Caption = "Öffnen Stammdaten Reviere": Work4.Caption = "öffnen...": Refresh
Set REV = New ADODB.Recordset
REV.Open "SELECT * FROM " & OWNER & "REVIER ORDER BY VERSUCH", _
conORCL, adOpenDynamic, adLockOptimistic, adCmdText
If Err Or REV.RecordCount <= 0 Then
Work4.Caption = "Fehler Öffnen [" & Err.Number & "]"
InitError = InitError + 1: Err.Clear
Else
Work4.Caption = "Tabelle geöffnet"
End If
If CheckError Then Exit Sub
'Öffnen Recordset Stammdaten PARZELLE
ProgressBar.Value = 5: Err.Clear
Label5.Caption = "Öffnen Stammdaten Parzellen": Work5.Caption = "öffnen...": Refresh
Set PAZ = New ADODB.Recordset
PAZ.Open "SELECT * FROM " & OWNER & "PARZELLE ORDER BY ID", _
conORCL, adOpenDynamic, adLockOptimistic, adCmdText
If Err Or PAZ.RecordCount <= 0 Then
Work5.Caption = "Fehler Öffnen [" & Err.Number & "]"
InitError = InitError + 1: Err.Clear
Else
Work5.Caption = "Tabelle geöffnet"
End If
If CheckError Then Exit Sub
'Änderung Datumsformat
ProgressBar.Value = 6: Err.Clear
Label6.Caption = "Ändern Datumsformat [TT.MM.JJJJ]": Work6.Caption = "ändern...": Refresh
If TypDatenbank = 1 Then conORCL.Execute "ALTER SESSION SET NLS_DATE_FORMAT = 'DD.MM.YYYY'"
If Err Then
Work6.Caption = "Fehler Befehlsausführung [" & Err.Number & "]"
InitError = InitError + 1: Err.Clear
Else
Work6.Caption = "Datumsformat geändert"
End If
If CheckError Then Exit Sub
'Öffnen Recordset Schlüssel KEY
ProgressBar.Value = 7: Err.Clear
Label7.Caption = "Öffnen Stammdaten Schlüssel": Work7.Caption = "öffnen...": Refresh
Set KEY = New ADODB.Recordset
KEY.Open "SELECT * FROM " & OWNER & "KEYS ORDER BY KEYTYP,KEYKURZ,KEYTEXT", _
conORCL, adOpenDynamic, adLockOptimistic, adCmdText
If Err Or KEY.RecordCount <= 0 Then
Work7.Caption = "Fehler Öffnen [" & Err.Number & "]"
InitError = InitError + 1: Err.Clear
Else
Work7.Caption = "Tabelle geöffnet"
End If
If CheckError Then Exit Sub
'Laden Farbpalette
ProgressBar.Value = 8: Err.Clear
Label8.Caption = "Laden Farbpalette": Work8.Caption = "laden...": Refresh
Set DAT = New ADODB.Recordset
DAT.Open "SELECT * FROM " & OWNER & "COLORS ORDER BY NR", conORCL
If Err Or DAT.RecordCount < 50 Then
Work8.Caption = "Fehler Laden [" & Err.Number & "]"
InitError = InitError + 1: Err.Clear
Else
Work8.Caption = "Farbpalette geladen"
'Farben an Vektor zuweisen
Erase Color: ReDim Color(50)
Do While Not DAT.EOF
Color(DAT!NR.Value) = DAT!COLORCODE.Value
DAT.MoveNext
Loop
End If
DAT.Close: Set DAT = Nothing
'Laden Stichtag
ProgressBar.Value = 9: Err.Clear
Label9.Caption = "Laden Stichtag": Work9.Caption = "laden...": Refresh
Set DAT = New ADODB.Recordset
DAT.Open OWNER & "STICHTAG", conORCL
If Err Or DAT.RecordCount < 1 Then
Work9.Caption = "Fehler Laden [" & Err.Number & "]"
InitError = InitError + 1: Err.Clear
Else
Work9.Caption = "Stichtag " & Format$(DAT!Tag.Value, "00") & "." & Format$(DAT!MONAT.Value, "00") & ". geladen"
'Stichtag zuweisen
Stichtag_Tag = DAT!Tag.Value
Stichtag_Monat = DAT!MONAT.Value
End If
DAT.Close: Set DAT = Nothing
If Not CheckError Then INFO.Caption = "Alle Module sind Fehlerfrei abgelaufen!"
ProgressBar.Visible = False
WorkShow Work, "Go", True
End Sub
Private Sub cmdOK_Click() 'Schalter OK
Unload Me
End Sub