Hallo zusammen,
aktuell versuche ich Datenbanken per ODBC DSNlos einzubinden. Dazu nutze ich das folgende Skript (Office Hilfe MS):
Function AttachDSNLessTable_ORACLE_alt(stLocalTableName As String, stRemoteTableName As String, stServer As String, Optional stUsername As String, Optional stPassword As String)
On Error GoTo AttachDSNLessTable_Err
Dim td As TableDef
Dim stConnect As String
For Each td In CurrentDb.TableDefs
If td.Name = stLocalTableName Then
CurrentDb.TableDefs.Delete stLocalTableName
End If
Next
If Len(stUsername) = 0 Then
'//Use trusted authentication if stUsername is not supplied.
stConnect = „ODBC;Driver={Microsoft ODBC for Oracle};Server=“ & stServer & „;“
Else
'//WARNING: This will save the username and the password with the linked table information.
stConnect = „Driver={Microsoft ODBC for Oracle};Server=“ & stServer & „;Uid=“ & stUsername & „; Pwd=“ & stPassword & „;“
End If
Set td = CurrentDb.CreateTableDef(stLocalTableName, dbAttachSavePWD, stRemoteTableName, stConnect)
CurrentDb.TableDefs.Append td
AttachDSNLessTable_ORACLE = True
Exit Function
AttachDSNLessTable_Err:
AttachDSNLessTable_ORACLE = False
MsgBox "AttachDSNLessTable encountered an unexpected error: " & Err.Description
End Function
Aufruf über:
Sub ODBCLLoseVerbindungUmstellen()
Dim strNeuerNameLokal As String
Dim strNameImDWH As String
Dim td As TableDef
For Each td In CurrentDb.TableDefs
If Left(td.Name, 7) = „PRÄFIX_“ Then
strName = Mid(td.Name, 8)
Debug.Print td.Name & " - Update erfolgreich?: " & DBTools.AttachDSNLessTable_ORACLE(td.Name, „PRÄFIX.“ & strName, Consts.SERVERNAME_str, Consts.BENUTZER_str, Consts.BENUTZER_PW_str)
End If
Next
Debug.Print „fertig.“
End Sub
Mehrere Nutzer haben Zugriffe auf unterschiedliche Tabellen. Die Tabellen von Nutzer A werden auch unproblematisch eingebunden. Nun kam ein neuer Nutzer B mit neuen Tabellen hinzu. Dort funktioniert es nicht mehr.
Fehlermeldung:
Jet Datenbankmodul konnte das Objekt „PRÄFIX.Tabellenname“ nicht finden.
Ich habe nun natürlich an Nutzernamen und Passwort gezweifelt. Jedoch folgender Code funktioniert:
Private Sub test()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim sqlstr As String
cn.ConnectionString = „Driver={Microsoft ODBC for Oracle};Server=“ & Consts.SERVERNAME_str & „;Uid=“ & Consts.BENUTZER_str & „wd=“ & Consts.BENUTZER_PW_str & „;“
cn.Open
Set rs.ActiveConnection = cn
sqlstr = "SELECT * " _
& „FROM TABELLE“
rs.Open sqlstr, , adOpenStatic, adLockBatchOptimistic
Debug.Print rs!Datum
End Sub
Also an den Konstanten und am Connectionstring scheint es nicht zu liegen.
Wo liegen weitere Mögliche Fehlerquellen? Gib es Tabellenberechtigungen in Oracle die das VBA SKript verhindern?
Vielen Dank
Holger