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. 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
    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. 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. 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. 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. 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. 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