begin process at 2012 02 13 08:22:13
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Base de Donnees

 > CRÉER UNE DSN ODBC (VBA/VB6)

CRÉER UNE DSN ODBC (VBA/VB6)


 Information sur la source

Note :
2,5 / 10 - par 2 personnes
2,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Base de Donnees Classé sous :odbc, dsn, api, sql, database Niveau :Initié Date de création :16/06/2005 Vu :21 975

Auteur : philheiz

Ecrire un message privé
Commentaire sur cette source (10)
Ajouter un commentaire et/ou une note

 Description

Plutôt que de passer par le gestionnaire des sources de données (ODBC Data Sources Administrator) pour créer une nouvelle DSN, voilà une fonction qui permet de le faire par le biais d'un code.

Cette fonction est écrite pour être utilisée en VBA/VB6 (utilisation de déclarations API) . J'ai posté une autre source pour VBScript.

Exemple:
--------
Function SetDSN()
    Call Set_ODBC_DSN(True, "NomDeLaDsn", "NomDeLaBaseDeDonnées", "", "SQLSRV32.dll", "SQL Server", "NomDuServeur")
End Function

UserDSN prend la valeur TRUE pour créer une DSN utilisateur, et FALSE pour une DSN système.

Source

  • 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, phkResult As Long) As Long
  • Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, 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, lpData As Any, ByVal cbData As Long) As Long
  • Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
  • Private Sub Set_ODBC_DSN(UserDSN As Boolean, _
  • DataSourceName As String, DatabaseName As String, _
  • Description As String, DriverPath As String, _
  • DriverName As String, 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)
  • 'Valeurs de la clé.
  • lResult = RegSetValueEx(hKeyHandle, "Database", 0&, REG_SZ, ByVal DatabaseName, Len(DatabaseName))
  • lResult = RegSetValueEx(hKeyHandle, "Description", 0&, REG_SZ, ByVal Description, Len(Description))
  • lResult = RegSetValueEx(hKeyHandle, "Driver", 0&, REG_SZ, ByVal DriverPath, Len(DriverPath))
  • lResult = RegSetValueEx(hKeyHandle, "LastUser", 0&, REG_SZ, ByVal "user", Len("user"))
  • lResult = RegSetValueEx(hKeyHandle, "Server", 0&, REG_SZ, ByVal 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, ByVal DriverName, Len(DriverName))
  • lResult = RegCloseKey(hKeyHandle)
  • End Sub
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, phkResult As Long) As Long
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, 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, lpData As Any, ByVal cbData As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long

Private Sub Set_ODBC_DSN(UserDSN As Boolean, _
                 DataSourceName As String, DatabaseName As String, _
                 Description As String, DriverPath As String, _
                 DriverName As String, 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)
    'Valeurs de la clé.
    lResult = RegSetValueEx(hKeyHandle, "Database", 0&, REG_SZ, ByVal DatabaseName, Len(DatabaseName))
    lResult = RegSetValueEx(hKeyHandle, "Description", 0&, REG_SZ, ByVal Description, Len(Description))
    lResult = RegSetValueEx(hKeyHandle, "Driver", 0&, REG_SZ, ByVal DriverPath, Len(DriverPath))
    lResult = RegSetValueEx(hKeyHandle, "LastUser", 0&, REG_SZ, ByVal "user", Len("user"))
    lResult = RegSetValueEx(hKeyHandle, "Server", 0&, REG_SZ, ByVal 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, ByVal DriverName, Len(DriverName))
    lResult = RegCloseKey(hKeyHandle)
End Sub

 Conclusion

Attention: ce code écrit dans votre base de registre.


 Sources du même auteur

FONCTION ENVIRON EN VBSCRIPT / VBS
FONCTIONS POUR TABLEAUX (ARRAY)
SCRIPT QUI PERMET D'EXTRAIRE DES PIÈCES JOINTES OUTLOOK ET D...
FONCTIONS FICHIERS (FILE & PATH)
Source avec Zip LOGGER LES UTILISATEURS D'UNE APPLI

 Sources de la même categorie

Source avec Zip Source avec une capture BIEN ADMINISTRER LES ETUDIANTS ET LEURS CÔTES par okosa
Source avec Zip VBA EXEL GESTION DE PERSONEL NOUVEAU CONTRAT DE TRAVAI par oudlarbi
Source avec Zip Source avec une capture CREATION D'UN OBJET D'ACCÈS AUX DONNÉES par okosa
Source avec Zip Source .NET (Dotnet) MISAHORAIRE par MdelM
Source avec Zip Source avec une capture BASEDEDONNEES,GESTIONDEMALADES,DATABASSE par shadkitenge

 Sources en rapport avec celle ci

Source avec Zip TRAVAILLER AVEC MYSQL par grandzebu
Source avec Zip GESTION DSN SQLSERVER ET CREATION DE FICHIER TEXTE POUR POUV... par sebastien_et_typh
Source avec Zip Source .NET (Dotnet) CLASSE SQL,MYSQL,OLEDB par syxe_mpl
Source avec Zip Source .NET (Dotnet) ODBCDOTNET : EXTRAIRE DES REQUETES ODBC DANS UN TABLEAU DE T... par Patrice99
Source avec une capture AFFICHER L'INTERFACE ODBC POUR CRÉER UNE SOURCE DE DONNÉE (D... par FENETRES

Commentaires et avis

Commentaire de exterminatix le 20/01/2006 14:29:39

C'est bien et un peu lourd. On peut faire comme le code suivant. Mais le probleme c'est comment fait-on pour saisir le mot de passe ?

Sub Set_ODBC_DSN(UserDSN , DataSourceName , DatabaseName , Description, DriverPath ,DriverName ,Server )

Dim WshShell
  Set WshShell = CreateObject("WScript.Shell")
  localisation = "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\"
  if (UserDSN) then localisation = "HKEY_CURRENT_USER\SOFTWARE\ODBC\ODBC.INI\"
  'restauration odbc
  WshShell.RegWrite localisation & "ODBC Data Sources\" & DataSourceName,DriverName
  WshShell.RegWrite localisation & DataSourceName & "\Driver",DriverPath
  WshShell.RegWrite localisation & DataSourceName & "\Server",Server
  WshShell.RegWrite localisation & DataSourceName & "\Description",Description
  WshShell.RegWrite localisation & DataSourceName & "\Database",DatabaseName
  WshShell.RegWrite localisation & DataSourceName & "\LastUser","user"   
end sub




Commentaire de philheiz le 21/01/2006 17:00:45

pour autant que je saches, tu ne peux pas enregistrer le mot de passe dans la définition.

pour ce qui est de la 'lourdeur', tu ne peux pas comparer la méthode utilisant l'API (qui à mon sens est plus propre) à celle qui se sert de l'objet Script.

ce que tu proposes est bien pour un scripte vbs, mais pas dans une appli compilée: une fois sur deux Norton ou d'autres anti-virus réajissent à la commande RegWrite et la bloquent.

Commentaire de exterminatix le 03/02/2006 12:27:13

Bonjour je tiens à m'excuser au sujet de ma remarque pour deux raisons :

1) Mon code me parait plus léger, mais c'est vrai que certain anti-virus le bloque.(Merci pour le renseignement), par contre il peut fonctionner dans un vb compilé (à condition de se mettre en explicit off)

2) C'est vrai que l'on n'enregistre pas le mot de passe dans le dsn. (On peut le renter en saisie manuel juste pour le test) Je n'aurais jamais du faire cette erreur car j'utilise depuis de nombreuses années des odbc et je sais très bien que l'on passe toujours le mot de passe en paramètres lorsqu'on l'appelle.

Cordialement votre.

Commentaire de FENETRES le 10/04/2006 17:31:35


Code tout à fait correct mais fonctionnellemnt incomplet.

Au minimum, il faudrait vérifier l'existence du pilote SQL et éventuellement sa version sur le poste client.

Exemple pour SQL Server :

   'Pilote SQL Server
   If RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\ODBC\ODBCINST.INI\SQL server", 0, KEY_ALL_ACCESS, hKey) = 0 Then
      regValue = String$(1024, 0)
      If RegQueryValueEx(hKey, "Driver", 0, valueType, regValue, Len(regValue)) = 0 Then
         If valueType = REG_SZ Then
            'Récupère l'emplacement de la dll
            RegVal(0) = Left$(regValue, InStr(regValue, vbNullChar) - 1)
            'Récupère le n° de version du pilote SQL Server
            RegVal(0) = GetFileVersion(RegVal(0))
         End If
      End If
      RegCloseKey hKey
   End If

Commentaire de FENETRES le 11/04/2006 11:45:47


Aide et support Microsoft, voir "Comment créer et supprimer un DSN en Visual Basic" à l'adresse ci-dessous :
http://support.microsoft.com/kb/171146/EN-US/

Commentaire de zen69 le 19/12/2006 17:03:03

comment faire pour lister toutes les proprietes dun ODBC system ?

Commentaire de dchrist le 04/01/2007 14:22:54

Salut,
Ton code est intéressant et les commentaires également.
Il va me résoudre un problème sur la main-basse sur ODBC par des utilisateurs, ce que je ne veux pas. En créant au début de mon prog mes ODBC et en les supprimant avec RegDeleteKey, je n'ai plus à me soucier du lien ODBC mal créé.
Merci tout plein...

Commentaire de amydale le 10/09/2007 22:59:52

Salut,
super intéressant !! merci !

Commentaire de Jordel le 30/11/2007 10:54:46

Source intéressante même si elle est présente sur le site de Microsoft... http://support.microsoft.com/kb/184608

Par contre, je me fais insulter lors de l'exécution au niveau de "lResult = RegCreateKey(HKEY_XX, REG_ODBCINI & DataSourceName, hKeyHandle)"
VB me sort une AccessViolationException : "Tentative de lecture ou d'écriture de mémoire protégée. Cela indique souvent qu'une autre mémoire est endommagée."

Avez-vous une idée du problème ???

Commentaire de philheiz le 03/12/2007 16:43:24

tu bosses au boulot ou à la maison ?

dans un réseau d'entreprise, il arrive souvent que l'admin restreigne le droit d'écriture dans HKEY_LOCAL_MACHINE.
En général, je conseille de toute facon les DSN utilisateur qui se définissent de la manière décrite en haut, à la différence que l'on utilise HKEY_CURRENT_USER (qui n'est pas protégé).

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

ODBC [ par sepultur68a ] Bonjour, alors voila, je vous expose tout d'abord mon code : baseprincipale = Test1 DoCmd.TransferDatabase acLink, "ODBC Database", _ "ODBC;DSN=Tes ODBC API SQL à l'aide [ par capoueidiablo ] Salut à tous,voila j'aurais besoin de récuperer des informations sur une base de donnée de n'importe qu'elle type, j'ai deja utilisé un grand nombre d Avis aux pros du MySQL [ par tbbuim1 ] Salut à tous, J'ai la version 4.1.8 de MySQL J'ai installé l'ODBC drivers pour windows MyODBC J'ai créé un DSN et je l'ai app SQL server DSN [ par chaps ] Je voudrait créer une DSN a partir de VB....Cette DSN pointe vers un serveur SQL!J'ai créer la fonction!Function AddDSNA2(Nom_du_DSN As String, Serv Lancer une sauvegarde d'une base SQL serveur depuis VB [ par kirevam ] Bonjour a tousJe cherche des infos pour effectuer une sauvegarde d'une base SQL Serveur depuis un programme vb6.Il semble qu'il faut utliser les fonct probleme ODBC vb6 sqlserver2k [ par philo71 ] Bonjour, Je développe une application VB6 et sql serveur 2000, j'utilise l'objet Ado pour la connection que je n'arrive pas a établir, voici help problème avec sql et vbscript [ par remy34 ] Bonjour je voudrais en fait rajouter les champs d'un formulaire lors de la validation de celui ci mais je n'y arrive pas voici mon code: Sub Envoyer( ODBC 3146 [ par mimi14 ] Bonjour, Excusez moi de vous opportuner avec cette question mais je ne trouve pas de solution sur internet et je ne suis pas un pro de SQL SERVEUR (v [VB2005 FW2.0] Problème requète SQL [ par freddy1787 ] Hi all,Je fais un programme en VB2005 Framework 2.0 et j'utilise une base de données SQL Server 2005.Lorque je lis les enregistrements j'utilise la sy ERROR [42000] Mise a jour Odbc [ par ManuAntibes ] Salut Je souhaite utiliser une connexion ODBC pour partager une base SQL Server 2005 Express.donc j'ai suivi ce tutohttp://fromelard.free.fr/Scripts/S


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,889 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales