CRÉER UNE DSN ODBC (VBA/VB6)

exterminatix Messages postés 10 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 4 novembre 2010 - 20 janv. 2006 à 14:29
philheiz Messages postés 117 Date d'inscription mercredi 3 décembre 2003 Statut Membre Dernière intervention 11 octobre 2007 - 3 déc. 2007 à 16:43
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/32103-creer-une-dsn-odbc-vba-vb6

philheiz Messages postés 117 Date d'inscription mercredi 3 décembre 2003 Statut Membre Dernière intervention 11 octobre 2007 1
3 déc. 2007 à 16:43
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é).
cs_Jordel Messages postés 27 Date d'inscription vendredi 1 février 2002 Statut Membre Dernière intervention 14 décembre 2007
30 nov. 2007 à 10:54
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 ???
cs_amydale Messages postés 16 Date d'inscription jeudi 3 juin 2004 Statut Membre Dernière intervention 4 janvier 2012
10 sept. 2007 à 22:59
Salut,
super intéressant !! merci !
cs_dchrist Messages postés 39 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 21 mai 2015
4 janv. 2007 à 14:22
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...
zen69 Messages postés 584 Date d'inscription jeudi 28 décembre 2006 Statut Membre Dernière intervention 29 avril 2010 1
19 déc. 2006 à 17:03
comment faire pour lister toutes les proprietes dun ODBC system ?
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
11 avril 2006 à 11:45
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/
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
10 avril 2006 à 17:31
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
exterminatix Messages postés 10 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 4 novembre 2010
3 févr. 2006 à 12:27
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.
philheiz Messages postés 117 Date d'inscription mercredi 3 décembre 2003 Statut Membre Dernière intervention 11 octobre 2007 1
21 janv. 2006 à 17:00
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.
exterminatix Messages postés 10 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 4 novembre 2010
20 janv. 2006 à 14:29
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
Rejoignez-nous