Import dbf dans mdb (vb6)

Résolu
bigbilou03 Messages postés 6 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 23 juin 2010 - 22 juin 2010 à 11:03
tabarouit Messages postés 3 Date d'inscription lundi 6 novembre 2006 Statut Membre 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...

10 réponses

bigbilou03 Messages postés 6 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 23 juin 2010
23 juin 2010 à 11:05
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
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
22 juin 2010 à 11:19
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)
0
cs_pacadebord Messages postés 113 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 19 décembre 2011 2
22 juin 2010 à 11:20
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
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
22 juin 2010 à 11:20
PS : Utilise la référence à ADODB (et pas DAO qui est obsolète)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bigbilou03 Messages postés 6 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 23 juin 2010
22 juin 2010 à 15:13
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.
0
cs_pacadebord Messages postés 113 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 19 décembre 2011 2
22 juin 2010 à 17:12
A toi Jack

Pac
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
22 juin 2010 à 17:43
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"
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
23 juin 2010 à 12:53
Excellent
0
tabarouit Messages postés 3 Date d'inscription lundi 6 novembre 2006 Statut Membre Dernière intervention 22 juin 2012
29 avril 2012 à 19:48
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
0
tabarouit Messages postés 3 Date d'inscription lundi 6 novembre 2006 Statut Membre Dernière intervention 22 juin 2012
30 avril 2012 à 11:08
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
0
Rejoignez-nous