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

Macros et VBA Excel Discussion :

Ouverture DBF avec ADO


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 231
    Par défaut Ouverture DBF avec ADO
    Bonjour,

    J'utilise un programme de gestion de production donc les données sont au format DBF. J'ai vu qu'il était possible d'exploiter ces données avec Excel via la méthode ADO.
    (cf : Sujet1 et Sujet2)

    Voici mon 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
    Private Sub CommandButton1_Click()
    Dim Cn As ADODB.Connection
    Dim Rs As ADODB.Recordset
    Dim Chemin As String, Cible As String, laBase As String
     
    Chemin = "D:\gp\STOCK"
    laBase = "GPLIGVE.DBF"
     
    Set Cn = New ADODB.Connection
    Cn.Open _
    "Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=" & _
    Chemin & ";"
     
    Cible = "SELECT LV_COMM FROM " & laBase & " ;"
     
    Set Rs = New Recordset
    Rs.Open Cible, Cn
     
    Msgbox Rs.Fields(1).Value
     
    Rs.Close
    Cn.Close
    End Sub
    J'aimerais dans un premier temps, pouvoir tester cette méthode en affichant le premier résultat dans une boite de dialogue. (requête très simple sans critère)

    Avec le code actuel j’obtiens le message d'erreur suivant : "La table externe n'est pas dans le format attendu"
    L'erreur se produit sur la ligne Rs.Open.

    Svp, pourriez-vous m'aider ?

    Merci d'avance et bonne journée.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    fais ce test là!
    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 Property Get TableToutes(Connexion As Object)
    Dim T() As String, i As Integer
    TableToutes = False
    With Connexion.OpenSchema(20)
        While Not .EOF
            ReDim Preserve T(i)
            T(i) = !TABLE_NAME
            i = i + 1
            .MoveNext
        Wend
        .Close
        TableToutes = T
    End With
    End Property
    Sub test()
    Dim Cn As Object, T() As String
    Set Cn = CreateObject("Adodb.connection")
    Cn.Open "Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=D:\gp\STOCK;"
     T = TableToutes(Cn)
    For i = 0 To UBound(T)
        Debug.Print "[" & T(i) & "]"
    Next
    End Sub
    Affiche la fenêtre d'exécution raccourci clavier [CTRL] + [G]

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 231
    Par défaut
    Bonjour dysorthographie,

    Merci pour ta réponse.

    J'ai fais l'essai et la fenêtre d’exécution me sort la liste des fichiers DBF présent dans le répertoire, sous ce format :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [GPLIGVE]
    [GPLINVEN]
    [GPLIREGL]
    [GPLISFAB]
    [GPLOCALI]
    [GPLOCATI]
    J'avoue ne pas trop savoir quoi en penser...

  4. #4
    Invité
    Invité(e)
    Par défaut
    en fait ton répertoire est ta base de données.

    les extension .DBF ne sont pas utiles!
    Code exemple : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sql ="Select * from [GPLIGVE] inner join [GPLINVEN] on [GPLINVEN].id=[GPLIGVE].id"
    set Requete=cn.execute(sql)
    
    (

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 231
    Par défaut
    Super merci pour les explications !

    Si j'ai bien compris, voila ce que je dois comprendre :
    Base de données = D:\gp\STOCK
    Table = [GPLIGVE]
    Champ = [GPLIGVE].LV_COMM

    J'ai donc modifié mon code, j'obtiens toujours la même erreur, je dois surement faire une erreur dans la syntaxe de ma requête.

    Pour tester, je souhaite faire apparaître dans une boite de dialogue, la valeur du champ LV_CLIE, quand LV_COMM = 1618.

    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
    Private Sub CommandButton1_Click()
    Dim Cn As ADODB.Connection
    Dim Rs As ADODB.Recordset
     
    Set Cn = New ADODB.Connection
    Cn.Open "Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=D:\gp\STOCK;"
     
    Set Rs = New Recordset
    Rs.Open "Select [GPLIGVE].LV_COMM,[GPLIGVE].LV_CLIE from [GPLIGVE] WHERE [GPLIGVE].LV_COMM = '1618'", Cn
    'Le résultat devrait être 001544
    Msgbox Rs.Fields(1).Value
     
    Rs.Close
    Cn.Close
    End Sub

  6. #6
    Invité
    Invité(e)
    Par défaut
    si LV_COMM est un champ numérique pas de ='texte'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Rs.Open "Select [GPLIGVE].LV_COMM,[GPLIGVE].LV_CLIE from [GPLIGVE] WHERE [GPLIGVE].LV_COMM = 1618", Cn

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 231
    Par défaut
    Ok merci, malheureusement j'ai toujours la même erreur : "La table externe n'est pas dans le format attendu"

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 231
    Par défaut
    Je pense m'être trompé de pilote, en effet celui que j'ai choisi est prévu pour des bases de données DBF au format dBASE, or celle que j'ai est une DBF mais au format Visual FoxPro...
    Ça explique le message d'erreur...

    D'après ce sujet, le driver pour les bases foxpro est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Driver={Microsoft Visual FoxPro Driver};SourceType=DBC;SourceDB=chemin\nombd.dbc;Exclusive=No;
    Visiblement la base doit être en DBC, or la mienne est en DBF...

    Bref, je vais faire des essais, on verra bien !

  9. #9
    Invité
    Invité(e)
    Par défaut
    C'est pas évident pour moi de t'aider plus car dbf c'est vieux pour moi et si c'était le standard de la SGBD ce n'est plus commun !

    On en trouve plus par hasard !

  10. #10
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 231
    Par défaut
    Oui c'est clair que ça date !

    J'ai finalement laissé tombé, un collègue plus expérimenté que moi sur ce sujet m'a expliqué que la méthode que je cherche à utiliser apporte aussi un problème de "verrouillage" des fichiers lorsqu'ils sont exploités par excel.
    Selon lui, il faut utiliser un DSN Windows pour éviter ce problème.

    Il a déjà mis en place ce principe en PHP, et ça fonctionne, je vais donc suivre ces conseils et rester sur la méthode actuelle.

    Merci pour ton aide.

  11. #11
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 231
    Par défaut
    Je remonte ce vieux sujet pour apporter la solution à la syntaxe de connexion aux bases des données DBF 4 via ADO. (pour les rares personnes que ça pourrait intéresser)

    Prérequis : Microsoft OLE DB Provider for Visual FoxPro 9.0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cnx.ConnectionString = "Provider=vfpoledb;Data Source=C:\Directory\;Extended Properties=dBASE IV;" 'C:\Directory\ étant le répertoire contenant les fichiers DBF
    cnx.Open

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

Discussions similaires

  1. [Foxpro] Problème ouverture fichier dbf avec mémo
    Par demig dans le forum Autres SGBD
    Réponses: 1
    Dernier message: 25/06/2009, 21h41
  2. Ouverture DBF avec methode ADO
    Par wilfried_42 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/03/2009, 19h38
  3. Ouverture d'un fichier Excel avec ADO
    Par sorlok dans le forum ASP.NET
    Réponses: 9
    Dernier message: 17/12/2008, 09h59
  4. Ouverture d'un fichier texte avec ADO
    Par sony351 dans le forum C++Builder
    Réponses: 2
    Dernier message: 08/02/2007, 16h54
  5. Bug sur la prorpiété required d'un TField avec ADO ???
    Par denrette dans le forum Bases de données
    Réponses: 6
    Dernier message: 04/11/2003, 11h04

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