Importation donnée dans MS Acces avec la méthode ADODB.Connection

Soleil11

XLDnaute Occasionnel
Bonjour le forum,

J'utilise le code ci-dessous afin d'importer des données d'un fichier excel à une table MS Access. Mes connaissance sont limitées sur la méthode ADODB, est-il possbile de modifier ce code afin qu'il élimine les données existante de la table "NPDO_test" avant d'importer les nouvelles dans la même table ?

J'ai essayé d'introduire la ligne de code sql = "Delete * from NPDI_test" mais cela n'a pas l'aire de fonctionnner.


Code:
Sub TransferNPDIdata()

' exports data from the active worksheet to a table in an Access database
Dim cn As ADODB.Connection, rs As ADODB.Recordset, r As Long, sql As String  
  ' connect to the Access database
    Set cn = New ADODB.Connection
    'cn.Open "Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=N:\05 - NBS CSS\PFC\BTC (Eric)\Gtime structure.accdb;"
    cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=N:\05 - NBS CSS\PFC\BTC (Eric)\Gtime structure.accdb;Persist Security Info=False"
   '=======>Ajouter sql = "Delete * from NPDI_test"
    ' open a recordset
    Set rs = New ADODB.Recordset
    rs.Open "NPDI_test", cn, adOpenKeyset, adLockOptimistic, adCmdTable
    ' all records in a table
    r = 2 ' the start row in the worksheet
    Do While Len(Range("A" & r).Formula) > 0
    ' repeat until first empty cell in column A
        With rs
            .AddNew ' create a new record
            ' add values to each field in the record
            .Fields("ID") = Range("A" & r).Value
            .Fields("Name") = Range("B" & r).Value
            .Fields("Project Manager") = Range("C" & r).Value
            .Fields("Responsible Stream") = Range("D" & r).Value
            .Fields("Accountable Entity") = Range("E" & r).Value
            .Fields("Product Category") = Range("F" & r).Value
            .Fields("Market or Region") = Range("G" & r).Value
            .Fields("Overall Project Status") = Range("H" & r).Value
            .Fields("status") = Range("I" & r).Value
            .Fields("Next Gate") = Range("J" & r).Value
            .Fields("Next Gate Status") = Range("K" & r).Value
            .Fields("Planned Decision Date") = Range("L" & r).Value
            .Fields("Escalation") = Range("M" & r).Value
            .Fields("Escalation Reason") = Range("N" & r).Value
            .Fields("Desired Kick-Off date") = Range("O" & r).Value
            .Fields("Planned Kick-Off date") = Range("P" & r).Value
            .Fields("Desired Go-Live date") = Range("Q" & r).Value
            .Fields("Planned Go-Live date") = Range("R" & r).Value
            .Fields("Commited Go-Live date") = Range("S" & r).Value
            .Fields("Approval Category") = Range("T" & r).Value
            .Fields("OPL Activity Type") = Range("U" & r).Value
            .Fields("MultiProject") = Range("V" & r).Value
            .Fields("Originating Source") = Range("W" & r).Value
            .Fields("Type") = Range("X" & r).Value
            
            .Update ' stores the new record
        End With
        r = r + 1 ' next row
    Loop
    rs.Close
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
End Sub

Merci pour votre aide.

Soleil11:confused:
 

Jam

XLDnaute Accro
Re : Importation donnée dans MS Acces avec la méthode ADODB.Connection

Salut Soleil11,

Tout d'abord ajoute une variable dans tes déclarations:
Code:
Dim objCommand As Command
Puis là où tu veux effacer le contenu de la table:
Code:
Set objCommand = New Command
With objCommand
    .ActiveConnection = objConnection
End With

'Execute SQL Command
strSQL = "DELETE * FROM NPDI_Test;"
With objCommand
  .CommandText = strSQL
  .CommandType = adCmdText
  .Execute
End with
Voilà, ça devrait le faire. Attention, je n'ai pas testé faute de bdd sous la main.

Ah, n'oublie pas de vider la variable à la fin du traitement comme pour rs et cn.
 

Soleil11

XLDnaute Occasionnel
Re : Importation donnée dans MS Acces avec la méthode ADODB.Connection

Salut Soleil11,

Tout d'abord ajoute une variable dans tes déclarations:
Code:
Dim objCommand As Command
Puis là où tu veux effacer le contenu de la table:
Code:
Set objCommand = New Command
With objCommand
    .ActiveConnection = objConnection
End With

'Execute SQL Command
strSQL = "DELETE * FROM NPDI_Test;"
With objCommand
  .CommandText = strSQL
  .CommandType = adCmdText
  .Execute
End with
Voilà, ça devrait le faire. Attention, je n'ai pas testé faute de bdd sous la main.

Ah, n'oublie pas de vider la variable à la fin du traitement comme pour rs et cn.

*************************

Rebonjour,

J'ai testé et j'ai vidé la variable et cela fonctionne.

Je vous remercie beaucoup pour votre aide.

Soleil11:)
 

Soleil11

XLDnaute Occasionnel
Re : Importation donnée dans MS Acces avec la méthode ADODB.Connection

Bonjour le forum,

J'ouvre à nouveau cette discussion, car j'aimerais modifié le code ci-dessus toujours dans avec le même méthode ADODB j'aimerai lancé une requête élimination "Q_Accruals" de lignes sur la table "NPDI_Test" comment puis-lancé cette requête élimination.

Merci pour votre aide.

Soleil11
 

Jam

XLDnaute Accro
Re : Importation donnée dans MS Acces avec la méthode ADODB.Connection

Bonjour Soleil,

Peux-tu préciser ta question ?
A quoi correspond Q_Accruals: Une table ? Un champs d'une table ?
S'il s'agit d'une Table et que tu veux faire comme avec NPDI_Test il suffit juste de changer l'instruction SQL
Code:
strSQL = "DELETE * FROM NPDI_Test;"
en
Code:
strSQL = "DELETE * FROM Q_Accruals;"
.
Sinon, ça dépend :)

Bon courage,
 

Soleil11

XLDnaute Occasionnel
Re : Importation donnée dans MS Acces avec la méthode ADODB.Connection

Bonjour,

Il s'agit de lancer une requête qui élimine des données et j'ai trouvé le code adapté.

' après le cn.open j'ajoute le code ci-dessous et cela exécuter automatiquement la requête.

cn.Q_Accruals

Merci beaucoup de m'avoir répondu.

Soleil11
 

Statistiques des forums

Discussions
312 164
Messages
2 085 877
Membres
103 008
dernier inscrit
Ichaka