Interf. Visual basic 6.0->base Access 2000

monsieur s
j'ai un probleme pour faire la connection entre mon interface developpe avec visual basic 6.0 et ma base cree en access 2000.
comment resoudre ce probleme en une base hors v.b.

merci

10 réponses

  1. Exemple:
    dans une FORM tu met une boite TEXT (text1) et le code suivant (je suppose que ta base est dans le meme dossier que le projet VB, et le fichier est "db1.mdb"):

    dim cnx as ADODB.connection
    dim rst as ADODB.recordset
    
    sub form_load()
      set cnx=new ADODB.connection
        cn.Open "Driver={Microsoft Access Driver (*.mdb)};Dbq=" + App.Path + "\db1.mdb;"
        If cnx.State = adStateOpen Then
            Set rst = New ADODB.Recordset
            rst.Open "select champ1 from table1", cnx
            text1.text=""
            While Not rst.EOF
                text1.text=text1.text+Str(rst.Fields(0).Value)+vbcrlf
                rst.MoveNext
            Wend
            rst.Close
            Set rst = Nothing
            cnx.close
        end if
      set cnx=nothing
    end sub
    
    1. Bonjour,
      J'ai le meme probléme j'utilise une base des données sous access2003 et je n'arrive pas à executer mon programme sous VB6. J'ai essayé avec DAO 3.6 mais pas de solution. Que faire svp
    2. @ZAIANEBonjour,
      j'ai eu ce problème avec une base access 2003, lié à une requête faisant appel à une fonction VBA. le résultat de la requête est envoyé dans un fichier excel.

      j'ai donc créé une instance access sous vb6 et ceci à résolu mon problème.
      Les références à intégrer sont : (menu Projet, Item Références...)
      Microsoft Excel 11.0 Object Library
      Microsoft Accessl 11.0 Object Library
      Microsoft DAO 3.6 Object Library

      Voici le code de la fonction qui lance access et bon courage

      Sub LanceIntanceAccess()
      Dim appAccess As New Access.Application

      ' ++++++++++++++++++++++++++++++++++++++++++++++++++++++
      ' NombaseAccess : nom complet et Path de la base Access à ouvrir
      ' MaRequete : nom de la requête access à exécuter
      ' Vérifie si le fichier Excel existe déjà et le supprime
      ' CheminDuFichier : nom complet et path du fichier excel
      ' ------------------------------------------------------
      If Dir(CheminDuFichier) > "" Then
      Kill CheminDuFichier
      End If

      On Error Resume Next
      ' ----------------------------------
      ' Création de l'instance Access 2003, cela fonctionne aussi pour les autres versions d'access
      ' ----------------------------------
      Set appAccess = New Access.Application

      On Error GoTo LanceIntanceAccessErreur

      appAccess.Visible = False ' access ne sera pas visible sinon mettre à True

      ' -------------------------------
      ' Ouverture de la base de données
      ' -------------------------------
      appAccess.OpenCurrentDatabase NombaseAccess, False
      ' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      ' Exécution et transfert des données dans le fichier excel
      ' --------------------------------------------------------
      appAccess.DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, MaRequete, CheminDuFichier
      ' ++++++++++++++++++++
      ' Gestion des messages ' c'est une procédure simple (TraiteMessage) qui écrit les message dans un fichier .log
      ' le fichier est ouvert puis fermé à chaque écriture.
      ' --------------------
      TraiteMessage "Les résultats de " & MaRequete & " sont dans le fichier " & CheminDuFichier
      ' ++++++++++++++++++++++++++++++
      ' Quite proprement l'application
      ' ------------------------------
      appAccess.CloseCurrentDatabase
      appAccess.Quit
      Set appAccess = Nothing
      Exit Sub

      LanceIntanceAccessErreur:
      If Not (appAccess Is Nothing) Then ' L'application est toutefois lancée donc ...
      appAccess.Quit
      Set appAccess = Nothing
      End If
      TraiteMessage "Fin ANORMALE du Traitement de " & MaRequete
      End Sub
  2. Un conseil : changer en ADO (code ou objets) au lieu du DATA, c'est plus stable et ça supporte toutes les version d'Access
    1. Svp, j'ai tout essyé mais tjs le problème persiste quand je connecte ma base access 2000 et vb6 par le controle DATA
      1. il faut utiliser la connection ado pour pouvoir connecter via un data une base access 2000.
        Ou alorssimplement en creant les objets data directement en code.
        1. heu, ça fait longtemps que j'ai pas fait ça, mais je me souviens d'un problème similaire. En gros c'était une histoire de version de drivers.
          J'utilisait les objets ADO, pour se connecter à access 2000 ça donnait à peu près ça (de mémoire et avec un vieux bout de code):
          dim cn As ADODB.Connection

          Set cn = New ADODB.Connection

          cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=uneBDD.mdb"

          etc. etc.
          Alors c'est pas forcement la même syntaxe avec DAO, mais l'idée est là, j'espère que ça vous donera une bonne piste ;)
          1. Je pense que tu as inséré un contrôle Data dans ton application ce qui t'as permis d'accéder à ta base Access. Or, le contrôle Data fourni avec VB6 utilise la bibliothèque Microsoft DAO 3.51 (ce qui correspond à Access 97).
            Pour accéder aux bases Access 97, 2000, il faut utiliser Microsoft DAO 3.6. Pour cela :
            Menu Projet > Références > Coche Microsoft DAO 3.6 Object Library.

            Remarques :
            - Si tu n'utilise pas vraiment le contrôle Data mais que tu manipules directement les objets de ta base de données. Tu peux le supprimer de ton interface. VB6 a juste besoin de cette référence à DAO 3.6
            - Les Services Packs ne résolvent pas ce "problème" puisqu'il s'agit d'une question de référence.
            - Lors du déploiement du programme, il faudra vérifier que cette biliothèque est bien incluse.

            Voilà tout

            Beyes
            1. Bonjour,

              J'ai le même problème de format non reconnu...
              J'ai fait comme vous avez dit, à savoir, utilisé Microsoft DAO 3.6.
              Mais le problème persiste...
              Pourriez-vous m'aider s'il vous plait?
              Par avance merci!
            2. Bonjour
              J'ai consulté votre réponse sur la connexion VB6 ET ACCESS 2000, et même en rajoutant le DAO 3.6 OBJECT LIBRARY , ca ne marche pas , mais moi ce qui me dérange c'est que j'ai pu ouvrir les bases qui sont incluses en exemple comme BIBLIO.MDB, mais dés que je crée une nouvelle base, il ne reconnait pas le format ;
              alors SVP, eclairez-moi sur ce sujet
              et merci d'avance
          2. Quand on essaie d'ouvrir une base de données ACCESS 2000 avec VB6 on a le message format non reconnu n° d'erreur 3343, j'ai été obligé de la convertir en ACCESS 97 pour pouvoir l'utiliser. J'ai pensé que VB6 datant de 1997 et ACCESS 2000 datant de 2000 en principe cela s'expliquait et que dans un service pack il y aurait la solution. Mais ni le sercice pack3, ni le pack4 ne résolvent le problème.
            1. c'est koi ton problème exact ?
              c'est à dire avec kel objet tu veu faire la liaison avec access ou bien
              quest-ce ke tu veu faire avec ton application?
              Toi t'est au moins stagiare ! mdr 8-)

              romain_natiez