AccessOracleAdo




'Codice da inserire in un Modulo

Option Explicit
Public Enum RSMethod
VIEW_RECORD = 0
EDIT_RECORD = 1
EXEC_SQL = 2
NEW_RECORD = 3
End Enum
Function dbConnection(strDatabaseType As String, strDBService _
As String, Optional strUserID As String, _
Optional strPassword As String) As ADODB.Connection

Dim objDB As New ADODB.Connection
Dim strConnectionString As String
If strDatabaseType = "ORACLE" Then
'Definisce la stringa di connessine al DB Oracle

strConnectionString = _
"Driver={Microsoft ODBC Driver For Oracle};ConnectString=" & _
strDBService & ";UID=" & strUserID & ";PWD=" & strPassword & ";"
ElseIf strDatabaseType = "MSACCESS" Then
'Definisce la stringa di connessione a Microsoft Access

strConnectionString = "DBQ=" & strDBService
strConnectionString = _
"DRIVER={Microsoft Access Driver (*.mdb)}; " & strConnectionString
End If

With objDB
.Mode = adModeReadWrite 'modalita di connessione ???
.ConnectionTimeout = 10 'Indica il tempo di attesa per stabilire
'la connessione prima di terminare i tentativi e generare un errore.

.CommandTimeout = 5 ' secondi timeout per eseguire qualsiasi comando
.CursorLocation = adUseClient ' tipo di cursore ???
.Open strConnectionString ' apre la connessione al database

End With

Set dbConnection = objDB
End Function

Function CreateRecordSet(ByRef dbConn As ADODB.Connection, _
ByRef rs As ADODB.Recordset, ByVal method As RSMethod, _
Optional strSQL As String, Optional TableName As String) _
As ADODB.Recordset

' chiude il recordset se gia aperto...

If rs.State=1 Then
rs.close
End If
Select Case method
Case RSMethod.NEW_RECORD
rs.ActiveConnection = dbConn
rs.CursorType = adOpenKeyset
rs.LockType = adLockOptimistic
rs.CursorLocation = adUseServer
rs.Open TableName
Case RSMethod.EDIT_RECORD
rs.ActiveConnection = dbConn
rs.Source = strSQL
rs.CursorType = adOpenKeyset
rs.LockType = adLockOptimistic
rs.CursorLocation = adUseClient
rs.Open
' Debug.Print "SQL Statement in EDIT Mod

' e (Createrecordset) : " & strSQL

' Debug.Print "Found " & rs.RecordCount

' & " records"

Case RSMethod.VIEW_RECORD
rs.ActiveConnection = dbConn 'dbConnection 'dbConn
rs.Source = strSQL
rs.CursorType = adOpenForwardOnly
rs.CursorLocation = adUseClient
rs.Open
' Debug.Print "Found " & rs.RecordCount

' & " records"

rs.ActiveConnection = Nothing
Case RSMethod.EXEC_SQL
Set rs = dbConn.Execute(strSQL)
End Select
Set CreateRecordSet = rs
End Function

'======================================

'fine del modulo

'======================================

'======================================

'subroutines...

'======================================

Sub Add_New_Record()
Dim objRecSet As New ADODB.Recordset
Dim objConn As New ADODB.Connection
Dim strUserID As String
Dim strPassword As String
Dim strTableName As String
Dim strDBType As String
Dim strDBName As String

strTableName = "YOURTABLE"
strPassword = "YourPassword"
strUserID = "YourUserID"

If strDBType = "MSACCESS" Then
'strDBName e' il nome del Database

strDBName = App.Path & "\AccessDB.mdb"
ElseIf strDBType = "ORACLE" Then
'strDBName e' il nome del servizio Oracle

strDBName = "YOUR_ORACLE_SERVICE_NAME"
strTableName = strUserID & "." & strTableName
'ormato nome della tabella ::> USERID.TABLENAME

Else
MsgBox "Il Database non e' ORACLE o Access"
Exit Sub
End If

Set objConn = dbConnection(strDBType, strDBName, "userid", "password")
Set objRecSet = CreateRecordSet(objConn, objRecSet, NEW_RECORD, , strTableName)
objConn.BeginTrans
With objRecSet
.AddNew
.Fields("FIELD1").Value = " valore1"
.Fields("FIELD2").Value = " valore2"
.Fields("FIELD3").Value = " valore3"
.Fields("FIELD4").Value = " valore4"
.Fields("FIELD5").Value = " valore5"
.Update
End With
If objConn.Errors.Count = 0 Then
objConn.CommitTrans
Else
objConn.RollbackTrans
End If

objRecSet.Close
objConn.Close
Set objRecSet = Nothing
Set objConn = Nothing
End Sub

Sub View_Record_Only()
Dim strSQL As String
Dim strDBName As String
Dim strDBType As String
Dim strUserID As String
Dim strPassword As String

Dim objRecSet As New ADODB.Recordset
Dim objConn As New ADODB.Connection
If strDBType = "MSACCESS" Then
strDBName = App.Path & "\YourAccessDB.mdb"

ElseIf strDBType = "ORACLE" Then
strDBName = "YOUR_ORACLE_SERVICE_NAME"
Else
MsgBox "Nessun Database ORACLE o Access"
Exit Sub
End If

strPassword = "YourPassword"
strUserID = "YourUserID"
strSQL = "SELECT * from USER_TABLE"

Set objConn = dbConnection(strDBType, strDBName, "userid", "password")
'disconnete il recordset

Set objRecSet = CreateRecordSet(objConn, objRecSet, VIEW_RECORD, strSQL)
objConn.Close
Set objConn = Nothing
'manipola recordset .....

'manipola recordset .....

'manipola recordset .....

objRecSet.Close
Set objRecSet = Nothing
End Sub

Sub Edit_Existing_Record()
Dim objRecSet As New ADODB.Recordset
Dim objConn As New ADODB.Connection
Dim strUserID As String
Dim strPassword As String
Dim strSQL As String
Dim strDBType As String
Dim strDBName As String

strTableName = "YOURTABLE"
strPassword = "YourPassword"
strUserID = "YourUserID"
If strDBType = "MSACCESS" Then
strDBName = App.Path & "\YourAccessDB.mdb"
ElseIf strDBType = "ORACLE" Then
strDBName = "YOUR_ORACLE_SERVICE_NAME"
Else
Exit Sub
End If
strSQL = "Select * from YOUR_TABLE"
Set objConn = dbConnection(strDBType, strDBName, "userid", "password")
Set objRecSet = CreateRecordSet(objConn, objRecSet, EDIT_RECORD, strSQL)

With objRecSet
.Fields("FIELD1").Value = " valore1"
.Update
End With
objRecSet.Close
objConn.Close
Set objRecSet = Nothing
Set objConn = Nothing
End Sub

'======================================

'Fine subroutines...

'======================================

'Codice da inserire in un Modulo

'

Option Explicit
Public Enum RSMethod
VIEW_RECORD = 0
EDIT_RECORD = 1
EXEC_SQL = 2
NEW_RECORD = 3
End Enum
Function dbConnection(strDatabaseType As String, strDBService _
As String, Optional strUserID As String, _
Optional strPassword As String) As ADODB.Connection

Dim objDB As New ADODB.Connection
Dim strConnectionString As String
If strDatabaseType = "ORACLE" Then
'Definisce la stringa di connessine al DB Oracle

strConnectionString = _
"Driver={Microsoft ODBC Driver For Oracle};ConnectString=" & _
strDBService & ";UID=" & strUserID & ";PWD=" & strPassword & ";"
ElseIf strDatabaseType = "MSACCESS" Then
'Definisce la stringa di connessione a Microsoft Access

strConnectionString = "DBQ=" & strDBService
strConnectionString = _
"DRIVER={Microsoft Access Driver (*.mdb)}; " & strConnectionString
End If

With objDB
.Mode = adModeReadWrite 'modalita di connessione ???
.ConnectionTimeout = 10 'Indica il tempo di attesa per stabilire
'la connessione prima di terminare i tentativi e generare un errore.

.CommandTimeout = 5 ' secondi timeout per eseguire qualsiasi comando
.CursorLocation = adUseClient ' tipo di cursore ???
.Open strConnectionString ' apre la connessione al database

End With

Set dbConnection = objDB
End Function

Function CreateRecordSet(ByRef dbConn As ADODB.Connection, _
ByRef rs As ADODB.Recordset, ByVal method As RSMethod, _
Optional strSQL As String, Optional TableName As String) _
As ADODB.Recordset

' chiude il recordset se gia aperto...

If rs.State=1 Then
rs.close
End If
Select Case method
Case RSMethod.NEW_RECORD
rs.ActiveConnection = dbConn
rs.CursorType = adOpenKeyset
rs.LockType = adLockOptimistic
rs.CursorLocation = adUseServer
rs.Open TableName
Case RSMethod.EDIT_RECORD
rs.ActiveConnection = dbConn
rs.Source = strSQL
rs.CursorType = adOpenKeyset
rs.LockType = adLockOptimistic
rs.CursorLocation = adUseClient
rs.Open
' Debug.Print "SQL Statement in EDIT Mod

' e (Createrecordset) : " & strSQL

' Debug.Print "Found " & rs.RecordCount

' & " records"

Case RSMethod.VIEW_RECORD
rs.ActiveConnection = dbConn 'dbConnection 'dbConn
rs.Source = strSQL
rs.CursorType = adOpenForwardOnly
rs.CursorLocation = adUseClient
rs.Open
' Debug.Print "Found " & rs.RecordCount

' & " records"

rs.ActiveConnection = Nothing
Case RSMethod.EXEC_SQL
Set rs = dbConn.Execute(strSQL)
End Select
Set CreateRecordSet = rs
End Function

'======================================

'fine del modulo

'======================================

'======================================

'subroutines...

'======================================

Sub Add_New_Record()
Dim objRecSet As New ADODB.Recordset
Dim objConn As New ADODB.Connection
Dim strUserID As String
Dim strPassword As String
Dim strTableName As String
Dim strDBType As String
Dim strDBName As String

strTableName = "YOURTABLE"
strPassword = "YourPassword"
strUserID = "YourUserID"

If strDBType = "MSACCESS" Then
'strDBName e' il nome del Database

strDBName = App.Path & "\AccessDB.mdb"
ElseIf strDBType = "ORACLE" Then
'strDBName e' il nome del servizio Oracle

strDBName = "YOUR_ORACLE_SERVICE_NAME"
strTableName = strUserID & "." & strTableName
'ormato nome della tabella ::> USERID.TABLENAME

Else
MsgBox "Il Database non e' ORACLE o Access"
Exit Sub
End If

Set objConn = dbConnection(strDBType, strDBName, "userid", "password")
Set objRecSet = CreateRecordSet(objConn, objRecSet, NEW_RECORD, , strTableName)
objConn.BeginTrans
With objRecSet
.AddNew
.Fields("FIELD1").Value = " valore1"
.Fields("FIELD2").Value = " valore2"
.Fields("FIELD3").Value = " valore3"
.Fields("FIELD4").Value = " valore4"
.Fields("FIELD5").Value = " valore5"
.Update
End With
If objConn.Errors.Count = 0 Then
objConn.CommitTrans
Else
objConn.RollbackTrans
End If

objRecSet.Close
objConn.Close
Set objRecSet = Nothing
Set objConn = Nothing
End Sub

Sub View_Record_Only()
Dim strSQL As String
Dim strDBName As String
Dim strDBType As String
Dim strUserID As String
Dim strPassword As String

Dim objRecSet As New ADODB.Recordset
Dim objConn As New ADODB.Connection
If strDBType = "MSACCESS" Then
strDBName = App.Path & "\YourAccessDB.mdb"

ElseIf strDBType = "ORACLE" Then
strDBName = "YOUR_ORACLE_SERVICE_NAME"
Else
MsgBox "Nessun Database ORACLE o Access"
Exit Sub
End If

strPassword = "YourPassword"
strUserID = "YourUserID"
strSQL = "SELECT * from USER_TABLE"

Set objConn = dbConnection(strDBType, strDBName, "userid", "password")
'disconnete il recordset

Set objRecSet = CreateRecordSet(objConn, objRecSet, VIEW_RECORD, strSQL)
objConn.Close
Set objConn = Nothing
'manipola recordset .....

'manipola recordset .....

'manipola recordset .....

objRecSet.Close
Set objRecSet = Nothing
End Sub

Sub Edit_Existing_Record()
Dim objRecSet As New ADODB.Recordset
Dim objConn As New ADODB.Connection
Dim strUserID As String
Dim strPassword As String
Dim strSQL As String
Dim strDBType As String
Dim strDBName As String

strTableName = "YOURTABLE"
strPassword = "YourPassword"
strUserID = "YourUserID"
If strDBType = "MSACCESS" Then
strDBName = App.Path & "\YourAccessDB.mdb"
ElseIf strDBType = "ORACLE" Then
strDBName = "YOUR_ORACLE_SERVICE_NAME"
Else
Exit Sub
End If
strSQL = "Select * from YOUR_TABLE"
Set objConn = dbConnection(strDBType, strDBName, "userid", "password")
Set objRecSet = CreateRecordSet(objConn, objRecSet, EDIT_RECORD, strSQL)

With objRecSet
.Fields("FIELD1").Value = " valore1"
.Update
End With
objRecSet.Close
objConn.Close
Set objRecSet = Nothing
Set objConn = Nothing
End Sub

'======================================

'Fine subroutines...

'======================================












( accessoracleado.html )- by Paolo Puglisi - Modifica del 17/12/2023