Import dbf dans mdb (vb6) [Résolu]

Messages postés
6
Date d'inscription
mercredi 13 janvier 2010
Dernière intervention
23 juin 2010
- - Dernière réponse : tabarouit
Messages postés
3
Date d'inscription
lundi 6 novembre 2006
Dernière intervention
22 juin 2012
- 30 avril 2012 à 11:08
Bonjour,

Je suis en train de développer une application vb6. Je bloque sur la manipulation suivante:
J'ai créé une base mdb via vb6 (c'est une copie d'une base source en fait)
Ensuite, j'ai créé une nouvelle table dans cette base.
Maintenant je voudrais importer les données d'un fichier dbf dans la table créée.

J'ai fais le tour de pas mal de post mais j'ai pas trouvé le moyen de faire cette opération.

Si vous avez une solution je suis preneur...
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
Messages postés
6
Date d'inscription
mercredi 13 janvier 2010
Dernière intervention
23 juin 2010
3
Merci
Merci pour votre aide précieuse,

Cette étape marche parfaitement, je laisse le code final si d'autres personnes sont intéressées par la manip.
Private Sub BTN_lancer_proc_Click()


' webographie: http://faq.vb.free.fr/index.php?question=65
' webographie: http://www.vbfrance.com/forum/sujet-IMPORT-DBF-DANS-MDB-VB6_1449108.aspx

    Dim cnnMDB As New ADODB.Connection
    Dim cnnDBF As New ADODB.Connection
    Dim rsDBF As New ADODB.Recordset
    Dim StrNo_int_uc As String
    Dim StrNo_etude As String
        

' Connexion à la base de donnée MDB
    cnnMDB.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & StrPathExtraction
    
'connection à la base de données DBF
    cnnDBF.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\bdsol\outil_extraction\prog\travail3;Extended Properties=dBASE IV;"

' Ajout de la table, des champs et de la clé primaire
    cnnMDB.Execute "CREATE TABLE Zone_etude (NO_ETUDE INT, NO_INT_UC VARCHAR(6))"
    
'incrémentation du recordset
    rsDBF.Open "select * from BDG", cnnDBF, adOpenForwardOnly, adLockReadOnly
    
 'la boucle suivante sert à insérer les données du recordset dans la table du mdb Zone_etude
    Do Until rsDBF.EOF
        StrNo_int_uc = rsDBF!NO_INT_UC
        StrNo_etude = rsDBF!NO_ETUDE
        cnnMDB.Execute "insert into Zone_etude (NO_ETUDE,NO_INT_UC) values (" & StrNo_etude & ",'" & StrNo_int_uc & "')"
        rsDBF.MoveNext
    Loop
    MsgBox ("Importation terminée")
 
    
'ferme les connections
    cnnMDB.Close
    rsDBF.Close
    cnnDBF.Close

    
    Set cnnMDB = Nothing
    Set cnnDBF = Nothing
    
End Sub

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de bigbilou03
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Dernière intervention
28 août 2015
0
Merci
Salut
Il faut que tu te connectes à ta base DBF.
Il te suffit de recopier ce que tu as fait pour ta DB Access (objet de connexion) et de changer la ConnectionString : <voir ce site de référence en matière de DB>

Une fois que tu seras connecté sur la DBF (et à Access), il te suffira de charger les données DBF dans un RecordSet, puis de passer en revue chaque enregistrement pour l'ajouter à ta table Access.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Commenter la réponse de cs_Jack
Messages postés
113
Date d'inscription
lundi 31 mars 2003
Dernière intervention
19 décembre 2011
0
Merci
Bonjour,

Alors pour vous orienter, vous pouvez vous servir d'ADO. Pour cela ajoutez une référence à "Microsoft ActiveX Data Object Library 2.X"

Dans le principe on créé une connexion à DBF, on extrait les données souhaitées que l'on plaque dans une table ACCESS. C'est propre et rapide et les exemples sont nombreux...

Pour les connexions à des base de données, le site magique est ici

Pac
Commenter la réponse de cs_pacadebord
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Dernière intervention
28 août 2015
0
Merci
PS : Utilise la référence à ADODB (et pas DAO qui est obsolète)
Commenter la réponse de cs_Jack
Messages postés
6
Date d'inscription
mercredi 13 janvier 2010
Dernière intervention
23 juin 2010
0
Merci
Merci pour vos réponses.
J'ai bien trouvé les ressources dont vous m'avez parlé, mais je ne comprends pas comment insérer les enregistrements de mon recordset dans la table access que je viens de créer...

Voici mon code:
le StrpathExtraction est le chemin de ma source mdb
Private Sub BTN_lancer_proc_Click()


    Dim cnnMDB As New ADODB.Connection
    Dim cnnDBF As New ADODB.Connection
    Dim rsDBF As New ADODB.Recordset
    Dim nb As Integer
    

' Connexion à la base de donnée MDB
    cnnMDB.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & StrPathExtraction
'connection à la base de données DBF
    cnnDBF.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\bdsol\outil_extraction\prog\travail3;Extended Properties=dBASE IV;"

' Ajout de la table, des champs et de la clé primaire
    cnnMDB.Execute "CREATE TABLE Zone_etude (NO_ETUDE INT, NO_INT_UC VARCHAR(6), PRIMARY KEY (NO_ETUDE))"
    
'incrémentation du recordset
    rsDBF.Open "select * from BDG", cnnDBF, adOpenForwardOnly, adLockReadOnly

    
'ferme la connection
    cnnMDB.Close
    rsDBF.Close
    cnnDBF.Close

    
    Set cnnMDB = Nothing
    Set cnnDBF = Nothing
    

End Sub


J'en suis là et je cale. Vous aurez compris que j'ai des bases en VB mais pas bcp plus que ça.
Commenter la réponse de bigbilou03
Messages postés
113
Date d'inscription
lundi 31 mars 2003
Dernière intervention
19 décembre 2011
0
Merci
A toi Jack

Pac
Commenter la réponse de cs_pacadebord
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Dernière intervention
28 août 2015
0
Merci
lol

Le reste, c'est :
- Boucle de lecture de chaque enregistrement du RecordSet
Ça se trouve dans n'importe quelle source du site qui parle (sérieusement) de RecordSet :
With monRecordSet
    If .RecordCount > 0 Then
        .MoveFirst
        Do While Not .EOF
            Debug.Print .Fields("toto").Value, .Fields(1).Value
            .MoveNext
        Loop
    End If
    .Close
End With

- Insertion de données dans une table :
Là aussi, un grand classique SQL qu'on trouve partout :
    sSQL = "Insert Into maTable " & _
           "       (NomChamp1, NomChamp2, ..., NomChampX) " & _
           "Values ('mon texte', monChiffre, ..., #maDate#)"
    maConnexion.Execute sSQL, r
    MsgBox r & " donnée insérée"
Commenter la réponse de cs_Jack
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Dernière intervention
28 août 2015
0
Merci
Excellent
Commenter la réponse de cs_Jack
Messages postés
3
Date d'inscription
lundi 6 novembre 2006
Dernière intervention
22 juin 2012
0
Merci
j'ai un problème avec ce code il y'a des erreur
"le nombre de la valeur de la requette doi coiincider avec le nombre de champs destination" que je ne puisse régler
aide SVP
le code'''''''''.

Private Sub Command1_Click()

Dim cnnMDB As New ADODB.Connection
Dim cnnDBF As New ADODB.Connection
Dim rsDBF As New ADODB.Recordset
Dim StrNo_int_uc As String
Dim StrNo_etude, StrPathExtraction As String

StrPathExtraction = App.Path & "\produit.mdb"
' Connexion à la base de donnée MDB
cnnMDB.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & StrPathExtraction

'connection à la base de données DBF
cnnDBF.Open "Provider=MSDASQL.1;Persist Security Info=False;Extended Properties=DSN=dBASE Files;DBQ=" & App.Path & ";DefaultDir=" & App.Path & ";DriverId=533;MaxBufferSize=2048;PageTimeout=5;"
' Ajout de la table, des champs et de la clé primaire


' cnnMDB.Execute "CREATE TABLE Zone_etude (NO_ETUDE INT, NO_INT_UC VARCHAR(6))"

'incrémentation du recordset
rsDBF.Open "select NOM_COM from produit", cnnDBF, adOpenForwardOnly, adLockReadOnly

'la boucle suivante sert à insérer les données du recordset dans la table du mdb Zone_etude
Do Until rsDBF.EOF
' StrNo_int_uc = rsDBF!NUM_ENR
StrNo_etude = rsDBF!NOM_COM
cnnMDB.Execute "insert into produit (NOM_COM) values (" & StrNo_etude & ",')"
' ici erreur "le nombre de la valeur de la requette doi coiincider avec le nombre de champs destination"
rsDBF.MoveNext
Loop
MsgBox ("Importation terminée")


'ferme les connections
cnnMDB.Close
rsDBF.Close
cnnDBF.Close


Set cnnMDB = Nothing
Set cnnDBF = Nothing
End Sub


merci
Commenter la réponse de tabarouit
Messages postés
3
Date d'inscription
lundi 6 novembre 2006
Dernière intervention
22 juin 2012
0
Merci
Bonjour le code final est celui-ci

Dim cnnMDB As New ADODB.Connection
Dim cnnDBF As New ADODB.Connection
Dim rsDBF As New ADODB.Recordset
Dim n_Com, n_Enr, StrPathExtraction As String

StrPathExtraction = App.Path & "\produit.mdb"
cnnMDB.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & StrPathExtraction
cnnDBF.Open "Provider=MSDASQL.1;Persist Security Info=False;Extended Properties=DSN=dBASE Files;DBQ=" & App.Path ' & ";DefaultDir=" & App.Path
rsDBF.Open "select NOM_COM,NUM_ENR from produit", cnnDBF, adOpenForwardOnly, adLockReadOnly
Do Until rsDBF.EOF
n_Enr = rsDBF!NUM_ENR
n_Com = rsDBF!NOM_COM
'remplacer les apostrophe dans la requête SQL
n_Com = Replace(n_Com, "'", "''")
cnnMDB.Execute "insert into produit (NOM_COM, NUM_ENR ) values ('" & n_Com & "', '" & n_Enr & "')"
' l'erreur est cet apostrophe en rouge qui manquait -Après "values ("-
rsDBF.MoveNext
Loop
MsgBox "Importation terminée", , App.Title

cnnMDB.Close
rsDBF.Close
cnnDBF.Close

Set cnnMDB = Nothing
Set cnnDBF = Nothing


merci
Commenter la réponse de tabarouit

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.