IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

Comment se connecter à une base de données se trouvant sur un serveur ?


Sujet :

VB 6 et antérieur

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Comment se connecter à une base de données se trouvant sur un serveur ?
    Bonjour,

    J'aimerais un complément d'informations sur Comment se connecter à une base de données se trouvant sur un serveur :
    - dans un réseau local,
    - dans un réseau à distance.

    Voici ma procédure de connexion à une base de données sur une machine locale pour vous donner un peu une idée de comment je procède :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     'Module public pour initialiser la connexion à la base de données "BaseDonnee.mdb"
     
    'Définition d'un objet connexion
     
    Public cnn As ADODB.Connection
     
    'Définition d'un objet Recordset
     
    Public rsEnregistrements As ADODB.Recordset
     
    Public Sub main()
     
        Set cnn = New ADODB.Connection
        cnn.ConnectionString = "provider=Microsoft.jet.OLEDB.4.0;Data Source=" & App.Path & "\BaseDonnee;Persist Security Info=False; Jet OLEDB:Database Password="
        cnn.Open
     
        'Mon formulaire de démarrage :"frmDemarrage"
        frmDemarrage.Show
     
    End Sub
     
     
    'Au chargement du formulaire de démarrage
     
    Private Sub Form_Load()
        On Error GoTo Erreur
     
     
        Set rsEnregistrements = New ADODB.Recordset
        rsEnregistrements.Open "select * from NOM_TABLE", cnn, adOpenStatic, adLockOptimistic, adCmdText
     
        If rsEnregistrements.RecordCount > 0 Then
            rsEnregistrements.MoveFirst
            GridAffichageEnregistrements.DataSource = rsEnregistrements
        End If
        Exit Sub
     
    Erreur:
        MsgBox Err.Number & " " & Err.Description, vbOKOnly + vbExclamation, "Erreur"
        Me.MousePointer = vbDefault
        Exit Sub
     
    End Sub
    Merci et au plaisir

    McLéonce

  2. #2
    mat.M
    Invité(e)
    Par défaut
    Mais ou est le problème je ne comprends pas .
    Chaque connection fut-elle locale ou serveur à distance est différente avec ADO.
    Il faut la définir avec l'outil de configuration ODBC.
    On peut créer 2 connections simultanées voire plusieurs et effectuer lectures/écritures dans les 2

  3. #3
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Oui je vois, mais je veux le faire dynamiquement comme le montre mon code.
    Je ne sais pas s'il faudra préciser l'adresse IP du serveur, ... quelque chose comme ça. Bref, je voudrais savoir comment cela se fait.

  4. #4
    Membre chevronné
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 389
    Points : 1 788
    Points
    1 788
    Par défaut
    je crois que le probleme viens d'ici

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    App.Path & "\BaseDonnee
    a mon avis la base de donne n'est pas bonne, pas d'extension et aussi est que tu es sur que le chemin l'est aussi ?? verifie tout ca et tu vera ca va aller.
    "Toute question a une reponse. Et chaque reponse est une nouvelle question." Albert EINSTEIN

    En cas de Question resolu, n'oubliez pas

  5. #5
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 177
    Points
    17 177
    Par défaut
    Voila comment je me connect à une base de données sur le reseau local

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
      Public CheminNomDelabase As String
    'varibles pour manipulation de la base de données
    Public CheminDataBase As New ADODB.Connection
    Public TablES1 As New ADODB.Recordset
    Public NomDeLaTable As String
     
    CheminNomDelabase = "\\192.168.0.2\MichEchange\MeMdb\ModuleBasic.mdb"
    ' verification de l'integritée de l'instalation
    On Error Resume Next: CheminDataBase.Close
    If Err.Number <> 0 Then On Error GoTo 0 Else On Error GoTo 0
    CheminDataBase.CursorLocation = adUseClient: CheminDataBase.Mode = adModeReadWrite
    ' verification de l'integritée de la base
    On Error Resume Next
    CheminDataBase.Open "PROVIDER=Microsoft.Jet.OLEDB.3.51;Data Source= " & CheminNomDelabase & ";"
    If Err.Number <> 0 Then ...... 
    
    On Error Resume Next: TablES1.Close
    If Err.Number <> 0 Then On Error GoTo 0 Else On Error GoTo 0
    NomDeLaTable = "Configue"
    On Error Resume Next
    TablES1.Open "select * from " + NomDeLaTable + " Where NumEnreg = " & CLng(CStr(0)) & " ", CheminDataBase, adOpenStatic, adLockPessimistic
    TablES1.MoveFirst
    If Err.Number <> 0 Then ......
    Reste a savoir si le temps d'etablissement de la connection à un reseau à distance ne depasserat pas le temps (qui doit pouvoir se parametrer) autorisé par l'objet connexion.
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  6. #6
    Membre habitué
    Inscrit en
    Mars 2005
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 131
    Points : 158
    Points
    158
    Par défaut
    Salut Salut

    Bon comme vous savez bien sur Access n'est pas destiné vers des applications du genre Multi-Poste ou Client/Serveur,alors pou résourde ton probléme t'as 2 solutions, la premiére c'est déja dit par ProgElecT ,sinon tu peux laisser ton code comme il est avec le app.path est tu installe l'application sur un ordinateur du réseau local,aprés tu partage le dossier de l'application, aprés tu vas sur les poste clients et tu crée un raccourci de l'executable de l'application avec un simple glisser déplacer.
    ex : supposons que l'application est installé dans un dossier paratgé nommé MonApplication sur un poste nommé SERVEURAPP est l'executable est MonApp.exe,alors le chemin du racourci dans un poste client est : \\SERVEURAPP\MonApplication\MonApp.exe.
    l'inconvénient de cette solution est au niveau sécurité, c'est pour cela il faut penser a mettre un mot de passe pour la base de donnée.

  7. #7
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par ProgElecT
    Reste a savoir si le temps d'etablissement de la connection à un reseau à distance ne depasserat pas le temps (qui doit pouvoir se parametrer) autorisé par l'objet connexion.
    Il faut un timer et une timeout pour cela..

  8. #8
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Ajout
    La solution de partage de l'exécutable et la création de raccourci ne m'intéresse pas car je l'ai déjà essayé.

    Ce qui me préoccupe est ceci :
    Il ya une seule base de données que je veux mettre sur un ordinateur du réseau local (Serveur). J'ai une application qui est installé sur serveur et donc pas de problème de connexion car j'utilise le code que j'ai ci-dessus évoqué. Le problème, c'est que j'ai également une application cliente que je veux installer dans chaque bureau et que quand chaque personne qui voudrait faire son travail, se connecte à la base qui est sur mon ordinateur (Serveur) et que son travail s'enregistre dans la base pour que je puisse consulter les données de tout un chacun.

    Le code proposé par ProgElect va dans ce sens, mais ce que je comprends pas :
    Dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CheminNomDelabase = "\\192.168.0.2\MichEchange\MeMdb\ModuleBasic.mdb"
    MichEchange\MeMdb sont des répertoires sur le serveur. Sont ils partagés ? Si non, comment seront-ils visibles des autres machines ?

    De plus, comment pouvoir donner le chemin de mon application serveur qui est installé sur le serveur dont le chemin est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    app.path & "\BaseDonnee.mdb"
    ? à l'application cliente ?

  9. #9
    Membre chevronné
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 389
    Points : 1 788
    Points
    1 788
    Par défaut
    Citation Envoyé par McLéonce
    MichEchange\MeMdb sont des répertoires sur le serveur. Sont ils partagés ? Si non, comment seront-ils visibles des autres machines ?
    evidement ils doivent etre partager. Sinon comment crois tu qu'il poura etre vu dans le reseau ??

    Citation Envoyé par McLéonce
    De plus, comment pouvoir donner le chemin de mon application serveur qui est installé sur le serveur dont le chemin est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    app.path 
    & "\BaseDonnee.mdb"
    ? à l'application cliente ?
    je presume qu'en fait c'est la meme application que tu mets sur toutes les machines (clients comme serveur). Alors une solution, c'est qu'en plus de donner un chemin relatif, tu doit donner un chemin dynamique. Je m'explique : par chemin dynamique j'entend un chemin qui change (ou peut changer) en fonction de l'existance ou non de la base de donnee. Si tu n'arrive pas a mettre ca en place, donne moi une adresse mail et je t'envois un petit projet qui illustre la chose.
    "Toute question a une reponse. Et chaque reponse est une nouvelle question." Albert EINSTEIN

    En cas de Question resolu, n'oubliez pas

  10. #10
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 177
    Points
    17 177
    Par défaut
    Quand l'IP est toujours la même on peut ce connecter de cette façon:
    CheminNomDelabase = "\\192.168.0.2\MichEchange\MeMdb\ModuleBasic.mdb"

    Si l'adresse IP change a chaque session, proceder de cette façon:
    Sur chaque ordinateur client, avec Outils > connecter un lecteur réseau donner la même lettre (exemple "Z")
    "Z:" étant égal à "\\192.168.0.2\MichEchange", CheminNomDelabase = "Z:\MeMdb\ModuleBasic.mdb"

    Z doit être l'ordinateur SERVEUR dont le dossier "MichEchange" est partagé, les sous dossiers etant par default partagés.

    Chez moi cela fonctionne des deux façons car j'utilise un routeur qui donne toujours la même adresse IP pour chaque ordinateur.
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  11. #11
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Infos. résultat
    J'ai testé avec les répertoires partagés et cela marche à merveille.

    Merci à tout un chacun d'avoir déposé sa contribution dans ce forum. Vos contributions au succès des autres sont d'une qualité noble.

    A présent, permettez moi de reconsidérer le sujet du forum "Comment créer un formulaire masquant tout le bureau y compris la barre des tâches ?".

    Dans ce sujet, il est question de "Comment faire démarrer automatiquement mon application avec Windows ?"

    M. jmfmarques avait conçu la solution et disait qu'il attendait que cela soit publié car la publication ne relevait pas de sa volonté ni de ses pouvoirs.

    jmfmarques a écrit :
    Voici pour un "RunOnce"
    (démarrage 1 seule fois)

    Je te laisse deviner par quoi il faut remplacer Runonce pour démarrer à tous coups ...

    Dans ta form d'appel :


    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub machin_Click()
      fic$ = CurDir & "\util.exe"
      ' pour écrire une sous-clé (ici runonce) dans le registre
      SaveString HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce", "WinTray", fic$
    End Sub
    Dans un module .bas



    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Public Const REG_NONE = 0
    Public Const REG_SZ = 1
    Public Const REG_EXPAND_SZ = 2
    Public Const REG_BINARY = 3
    Public Const REG_DWORD = 4
    Public Const REG_DWORD_LITTLE_ENDIAN = 5
    Public Const REG_LINK = 6
    Public Const REG_MULTI_SZ = 7
    Public Const REG_RESOURCE_LIST = 8
    Public Const REG_FULL_RESOURCE_DESCRIPTOR = 9
    Public Const REG_RESOURCE_REQUIREMENTS_LIST = 10
    Public Const REG_QWORD = 11
     
     
    'les constantes de clés principales
    Public Const HKEY_CLASSES_ROOT = &H80000000
    Public Const HKEY_CURRENT_USER = &H80000001
    Public Const HKEY_LOCAL_MACHINE = &H80000002
    Public Const HKEY_USERS = &H80000003
    Public Const HKEY_PERFORMANCE_DATA = &H80000004
    Public Const HKEY_CURRENT_CONFIG = &H80000005
    Public Const HKEY_DYN_DATA = &H80000006
     
     
    Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
    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 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
    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public Sub SaveString(hKey As Long, strPath As String, strValue As String, strData As String)
      Dim ret
      RegCreateKey hKey, strPath, ret 'on crée une nouvelle clé
      RegSetValueEx ret, strValue, 0, REG_SZ, ByVal strData, Len(strData) 'on lui attribue une valeur
      RegCloseKey ret 'et on la ferme
    End Sub
    Pour ce faire, j'ai une question d'éclaircissement :

    Mon formulaire que je veux qu'il démarre avec Windows est "frmDemarrage".
    Pour la procédure :


    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub machin_Click()
    fic$ = CurDir & "\util.exe"
      ' pour écrire une sous-clé (ici runonce) dans le registre
      SaveString HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce", "WinTray", fic$
    End Sub
    Où doit-je la mettre dans mon cas?

    Et de plus, je ne comprends pas comment un tel code dans mon application peut démarrer avec windows car il n'y a aucun lien vers mon application. A moins que je dois mettre mon EXE quelque part, bref, je ne comprends pas le fonctionnement global du processus.

    CurDir : fait référence à quel répertoire ? sachant que util.exe est le nom de mon Fichier exécutable.

    Merci de reconsidérer la discussion.

    Amitiés

  12. #12
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Ta question initiale étant résolue, veux-tu bien cliquer sur le bouton , en dessous de ce message, et ouvrir une nouvelle discussion avec ta nouvelle question.

    Merci.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  13. #13
    Expert éminent
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Points : 8 524
    Points
    8 524
    Par défaut
    Citation Envoyé par mat.M
    Il faut un timer et une timeout pour cela..
    Pourquoi ?

    conn.ConnectionTimeout ne suffit pas ?
    Vous vous posez une question, la réponse est peut-être ici :
    Toutes les FAQs VB
    Les Cours et Tutoriels VB6/VBScript
    Les Sources VB6


    Je ne réponds pas aux questions techniques par MP. Utilisez les forums. Merci de votre compréhension

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment se connecter à une base de données oracle avec Talend?
    Par shark84 dans le forum Développement de jobs
    Réponses: 8
    Dernier message: 16/09/2011, 10h13
  2. Réponses: 10
    Dernier message: 10/06/2009, 13h26
  3. Comment se connecter à une base de donnée MySql
    Par developppez dans le forum Windows Forms
    Réponses: 9
    Dernier message: 01/01/2009, 20h05
  4. Comment se connecter à une base de données Access 97 ?
    Par yann87 dans le forum Bases de données
    Réponses: 1
    Dernier message: 05/12/2007, 08h49
  5. comment se connecter à une base de donnée acces
    Par meday dans le forum C++Builder
    Réponses: 7
    Dernier message: 04/08/2007, 21h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo