Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Questions : DNS par programmation

1 réponse
Avatar
Vincent
Je remercie Jean-Marc pour le lien qu'il ma procur=E9 au=20
sujet de la cr=E9ation du DNS par programmation. Cependant=20
j'ai quelque question au sujet de ce code :=20

Private Declare Function SQLConfigDataSource=20
Lib "ODBCCP32.DLL" (ByVal hwndParent&, ByVal frequest%,=20
ByVal lpszDriver$, ByVal lpszAttributes$) As Integer
Private Declare Function SQLAllocEnv% Lib "ODBC32.DLL"=20
(env&)

Private Const SACCESS =3D "Microsoft Access Driver (*.mdb)"
Private Const SSQL =3D "SQL Server"

Public Enum EnumDriver
ACCESS =3D 0
SQL =3D 1
End Enum

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''
'Cr=E9ation d'un DSN
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''
Public Function SetDsn(NomDsn As String, BaseDsn As=20
String, driver As EnumDriver, Optional DescriptionDsn As=20
String) As Integer
Dim lhwndParent As Long
Dim retour As Integer
Dim attributs As String

Select Case driver
Case EnumDriver.ACCESS: driver =3D SACCESS
Case EnumDriver.SQL: driver =3D SSQL
End Select

If SQLAllocEnv(lhwndParent) <> -1 Then
attributs =3D "DSN=3D" & NomDsn & ";" & _
"Description=3D" & DescriptionDsn & ";" & _
"DBQ=3D" & BaseDsn & ";"

retour =3D SQLConfigDataSource(lhwndParent, 4, driver,=20
attributs)
End If

End Function
----------------------------------

1- Mon appel de la fonction se fait comme suit :=20
Call SetDsn("Vids", "VidsDataBase.mdb", ??? , "")
Je dois mettre quoi comme (driver As EnumDriver) et est-
ce que "app.path\VidsDataBase.mdb" pour le nom de la BD=20
est une bonne id=E9e ??? (je veux que le lien soit bon dans=20
n'importe quel chemin d'acc=E8s mais tjrs dans le dossier=20
du programme en ex=E9cution)

De plus, je ne comprend pas pourquoi il doit y avoir un=20
retour de fonction et dans ce cas qu'est que je doit=20
faire avec ce retour integer.

Merci d'avance !!!

1 réponse

Avatar
Jean-Marc
"Vincent" a écrit dans le message de
news:04ed01c48455$02ef99c0$
Je remercie Jean-Marc pour le lien qu'il ma procuré au
sujet de la création du DNS par programmation. Cependant
j'ai quelque question au sujet de ce code :



Private Declare Function SQLConfigDataSource
Lib "ODBCCP32.DLL" (ByVal hwndParent&, ByVal frequest%,
ByVal lpszDriver$, ByVal lpszAttributes$) As Integer
Private Declare Function SQLAllocEnv% Lib "ODBC32.DLL"
(env&)



Private Const SACCESS = "Microsoft Access Driver (*.mdb)"
Private Const SSQL = "SQL Server"



Public Enum EnumDriver
ACCESS = 0
SQL = 1
End Enum



<snip>

1- Mon appel de la fonction se fait comme suit :
Call SetDsn("Vids", "VidsDataBase.mdb", ??? , "")
Je dois mettre quoi comme (driver As EnumDriver) et est-
ce que "app.pathVidsDataBase.mdb" pour le nom de la BD
est une bonne idée ??? (je veux que le lien soit bon dans
n'importe quel chemin d'accès mais tjrs dans le dossier
du programme en exécution)



- Tu dois mettre ACCESS, ou 0 ce qui revient au même

- Oui, c'est une bonne idée de mettre le nom de la DB avec app.path


De plus, je ne comprend pas pourquoi il doit y avoir un
retour de fonction et dans ce cas qu'est que je doit
faire avec ce retour integer.




Celui qui a écrit la fonction SetDSN s'est trompé.
il a écrit:

''''''''''''''''''''''''''
Public Function SetDsn(NomDsn As String, BaseDsn As
String, driver As EnumDriver, Optional DescriptionDsn As
String) As Integer

< ... snip ... >

retour = SQLConfigDataSource(lhwndParent, 4, driver,
attributs)
End Function


En fait, il a oublié d'ajouter avant le End Function : SetDsn = retour,

Parce que comme ça, la fonction SetDSN retourne un entier (l'entier renvoyé
par SQLConfigDataSource) qui te dit si tout s'est bien passé ou non:

Extrait de la doc:

# The function returns TRUE if it is successful, FALSE if it fails.
# If no entry exists in the system information when this function
# is called, the function returns FALSE.

la doc complète:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odbc/htm/odbcsqlconfigdatasource.asp

Si tu veux programmer proprement, ton programme doit lire le retour de la
fonction et exécuter le traîtement adéquat, comme ceci par exemple:

dim iRet as Integer

iRet = SetDsn( ...)
If iRet = 0 then ' the function fails
msgbox "Erreur dans la fonction SetDSN"
...
Else
msgbox "Succès de la fonction SetDSN"
...
Endif



Jean-marc