Bonjour,
Je souhaite modifier la base de données pointée par un DNS. Dans un premier temps, j'ai décidé de créer un DNS mais une erreur intervient à l'exécution:


Option Explicit On
Public Class Form1

Private Const REG_SZ = 1
Private Const HKEY_LOCAL_MACHINE = &H80000002
Private Const HKEY_CURRENT_USER = &H80000001
Private Const REG_ODBCINI As String = "SOFTWARE\ODBC\ODBC.INI\"
Private Const REG_ODBCINI_DS As String = "SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources"
Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal phkResult As Long) As Long
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal phkResult As Long) As Long
Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpData As Object, ByVal cbData As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long

Private Sub Set_ODBC_DSN(ByVal UserDSN As Boolean, _
ByVal DataSourceName As String, ByVal DatabaseName As String, _
ByVal Description As String, ByVal DriverPath As String, _
ByVal DriverName As String, ByVal Server As String)
Dim lResult As Long
Dim hKeyHandle As Long
Dim HKEY_XX As Long
HKEY_XX = IIf(UserDSN, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE)
'Création d'une nuvelle clé dans la base de registre.
lResult = RegCreateKey(HKEY_XX, REG_ODBCINI & DataSourceName, hKeyHandle) 'ERREUR A L'EXECUTION
'Valeurs de la clé.
lResult = RegSetValueEx(hKeyHandle, "Database", 0&, REG_SZ, DatabaseName, Len(DatabaseName))
lResult = RegSetValueEx(hKeyHandle, "Description", 0&, REG_SZ, Description, Len(Description))
lResult = RegSetValueEx(hKeyHandle, "Driver", 0&, REG_SZ, DriverPath, Len(DriverPath))
lResult = RegSetValueEx(hKeyHandle, "LastUser", 0&, REG_SZ, "user", Len("user"))
lResult = RegSetValueEx(hKeyHandle, "Server", 0&, REG_SZ, Server, Len(Server))
'On ferme la clé.
lResult = RegCloseKey(hKeyHandle)
'On ouvre la clé "ODBC Data Sources" qui gères les entrées affichées dans le gestionnaire ODBC.
'On ajoute une valeur.
'On ferme la clé.
lResult = RegCreateKey(HKEY_XX, REG_ODBCINI_DS, hKeyHandle)
lResult = RegSetValueEx(hKeyHandle, DataSourceName, 0&, REG_SZ, DriverName, Len(DriverName))
lResult = RegCloseKey(hKeyHandle)
End Sub

Private Sub Command1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Command1.Click
Set_ODBC_DSN(False, "ASDBR", "Cocoon_Duet", "Description ASDB", "C:\WINDOWS\system32\sqlsrv32.dll", "SQL Server", "EUMSSSQ799\INT")
End Sub
End Class

Erreur :
Ligne - lResult = RegCreateKey(HKEY_XX, REG_ODBCINI & DataSourceName, hKeyHandle)

AccessViolationException was unhandled
Attempted to read or write protected memory. This is often an indication that other memory is corrupt.


Si vous avez une idée...