Vb et connexion access2003

Bonjour,

Je développe une application VB6 sur la plate forme d'un Windows XP SP3 et je n'arrive pas à me connecter à la base que j'ai créée dans Access 2003. Il me dit qu'il ne reconnaît pas le format de la base. J'ai essayé avec d'autres codes mais rien à faire. Pouvez-vous m'aider ?
Je vous envoie les codes que j'ai utilisés :

Code 1:
Private Sub Form_Load()
Dim dbs As Database
Set dbs = OpenDatabase("C:\;yDB.mdb")
If dbs.Connect <> 0 Then
MsgBox "parfait"
Else
MsgBox "error"
End If
End Sub
Affiche l'erreur suivante:
Erreur d'exécution '3343':
Format de base de données ('C:\myDB.mdb') non reconnu.

Code 2:
Private Sub Form_Load()
Dim dbs As ADODB.Connection
Set dbs= New ADODB.Connection
cnx.Provider = "Microsoft.Jet.Oledb.4.0"
cnx.ConnectionString = "C:\myDB.mdb"
dbs.Open
End Sub

Affiche l'erreur suivante:
Erreur de compilation
Type défini par l'utilisateur non défini (ADODB.Connection)

4 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    Bonjour

    essaies
    Dim dbs As Object 
    Set dbs = CreateObject("ADODB.Connection") 
    fichier = "C:\myDB.mdb" 
    dbs.Open "Provider = Microsoft.Jet.OLEDB.4.0;" & _ 
                    "data source=" & fichier & ";"


    basé sur du VBA, donc... en VBA si tu utilises ta syntaxe "new ado...", il faut cocher la bibiothèque "Microsoft ActiveX Data Object ...." dans outils- références, je ne sais pas si équivalent en Vb
    Michel
    1. Bonjour,

      Oui Michel, il faut référencé Microsoft ActiveX Data Library x.xx même en VB6.

      Voilà un exemple de module qui permet de se connecter à une base Access, de passer une requête à la base et de parcourir un recordset.

      Option Explicit
      
      Private AdoCnx As ADODB.Connection
      Private rs As Recordset
      Private CmdSql As ADODB.Command
      
      'Chemin de la base de donnée à mettre ci dessous
      Private Const BDD = "C:\bd\maBase.mdb"
      
      Public Function ConnectBdd()
      Dim CnxString As String
      
      On Error Resume Next
      
      Set AdoCnx = New ADODB.Connection
      
      If AdoCnx.State = adStateOpen Then
          MsgBox "La connection est déjà ouverte"
          Exit Function
      End If
      
              '======== Ouverture Access ============'
              
      CnxString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                         "Data Source=" & BDD & ";" & _
                         "Persist Security Info=False"
      
      AdoCnx.Open CnxString
      AdoCnx.CursorLocation = adUseClient
      
          'Gestion de l'exception
          If Err <> 0 Or AdoCnx.State = adStateClosed Then
              MsgBox "Connection impossible avec la base"
              Exit Function
          End If
      
      End Function
      
      'Passage d'une requete par un recordset. Le recordset est passé en référence dans les paramètres de la fonction
      Public Function OuvrirRecordset(ByVal Requete As String, ByRef rs As ADODB.Recordset) As Boolean
          
      On Error Resume Next
      
        
          On Error Resume Next
          rs.Open Requete, ModBdd.AdoCnx, , , adCmdText
          
          If Err > 0 Then
              OuvrirRecordset = False
              Exit Function
          End If
          
          rs.MoveFirst
          OuvrirRecordset = True
          
      End Function
      
      
      'Fonctions permettant de parcourir un recordset passé en paramètre.
      Public Function RSLireSuivant(ByRef rs As ADODB.Recordset) As Boolean
      
          On Error Resume Next
          rs.MoveNext
          If rs.EOF Then
              RSLireSuivant = False
              Exit Function
          End If
          
          If Err <> 0 Then
              RSLireSuivant = False
              Exit Function
          End If
          
          RSLireSuivant = True
          
      End Function
      
      Public Function RSLirePrecedent(ByRef rs As ADODB.Recordset) As Boolean
      
          On Error Resume Next
          rs.MovePrevious
          If rs.BOF Then
              RSLirePrecedent = False
              Exit Function
          End If
          
          If Err <> 0 Then
              RSLirePrecedent = False
              Exit Function
          End If
          
          RSLirePrecedent = True
          
      End Function
      
      Public Function RSLirePremier(ByRef rs As ADODB.Recordset) As Boolean
      
          On Error Resume Next
          rs.MoveFirst
          If Err <> 0 Then
              RSLirePremier = False
              Exit Function
          End If
          
          RSLirePremier = True
          
      End Function
      
      Public Function RSLireDernier(ByRef rs As ADODB.Recordset) As Boolean
      
          On Error Resume Next
          rs.MoveLast
          If Err <> 0 Then
              RSLireDernier = False
              Exit Function
          End If
          
          RSLireDernier = True
          
      End Function


      Bonne continuation.
      1. Contributeur
        Merci, Polux

        Pour ma part j'utilise au maxi les createobject car, à mon sens, l'appli est beaucoup plus portable (changement d'ordi)

        1 de des 4, je vais réinstaller Vb6... :o)
        Bonne fin de WE ensoleillée
        1. Contributeur
          Tiens à propos comme tu instancies par
          new.
          .. , ne faudrait il pas terminer la procédure par
          maconnection=nothing ?
      2. C'est une question d'habitude et pour ma part je n'aime pas mélanger le code.

        Je ne code jamais derrière un UF. Je préfère faire un module à part pour gérer l'UF aussi bien dans l'affichage que dans les évènements. Tout comme je vais faire un module pour chaque fonctionnalité demandée.

        Si je dois me connecter à une base, je vais faire un module pour gérer les accès à la base.

        Si on doit modifier ou refaire l'IHM, je n'ai pas à tout reprendre et j'ai très peu de modification à opérer.

        Je pratique cette méthode avec tous les langages que je suis amené à utiliser.

        Je te souhaite également une bonne fin de WE qui n'est pas aussi ensoleillé que ça pour moi.

        A+