2009-09-14 6 views

Répondre

1

Si vous programmez vba, je suppose que vous travaillez avec Adodb ou simplement avec ADO. Par conséquent, pour supprimer un enregistrement de table, vous pouvez utiliser un objet de commande pour le faire.

Dim cnn as Connection 
Dim cmd as Command 

Set cnn=new Connection() 
cnn.ConnectionString="ConnectionString" 
cnn.Open() 

Set cmd=new Command() 
cmd.ActiveConnection=cnn 
cmd.CommandText="DELETE FROM MyTable" 
cmd.Execute() 

cnn.Close() 

Mise à jour: Pour utiliser ADO Les objets doivent ajouter une référence à la bibliothèque ADODB

+0

J'utilise DAO, ADO pas – Tom

+0

je vous recommande d'utiliser ADO au lieu de DAO – Beatles1692

+0

Il ne devrait pas vraiment d'importance que vous utilisez. – Oorang

2

Deux choses. Tout d'abord, DAO vs ADO est presque hors de propos. Ils sont tous deux disponibles pour accéder via Windows 7 et AFAIK il n'y a pas de plans pour les supprimer. L'un ou l'autre devrait être OK pour utiliser dans Access. Deuxièmement, vous pouvez tout faire:

Public Sub Example() 
    With Access.CurrentDb 
     .Execute "DELETE Table2.* FROM Table2;" 
     .Execute "INSERT INTO Table2 (fld1, fld2) SELECT Table1.ID, Table1.MyField FROM Table1;" 
    End With 
End Sub 

Vous pourriez juste ceci:

Public Sub Example() 
    With Access.DoCmd 
     .RunSQL "DELETE Table2.* FROM Table2;" 
     .RunSQL "INSERT INTO Table2 (fld1, fld2) SELECT Table1.ID, Table1.MyField FROM Table1;" 
    End With 
End Sub 

Mais la méthode Execute jette des messages d'erreur plus d'information (et si vous encore des soins, est OAC).

+0

Je voudrais ajouter un point sur le sujet DAO et ADO. Beatles1692 propose une méthode ADO. Oorang offre une méthode qui n'est ni l'un ni l'autre - c'est une méthode Access VBA. – Smandoli

+0

En fait, cette méthode est DAO;) Si vous vérifiez, currentdb est la propriété si le type DAO.Database. RunSQL est la méthode de l'objet DAO.Database. C'est juste que Access a intégré DAO dans son propre modèle objet plus complètement que ADO. – Oorang

-1

DAO Les jeux d'enregistrements ne disposent pas d'un moyen efficace de vider la table, pour autant que je sache. Si c'est une petite table, vous pouvez probablement supprimer enregistrement par enregistrement, mais je trouverais cela idiot. Je viens d'utiliser DoCmd.RunSQL pour exécuter une requête DELETE. Normalement, je définirais SetWarnings sur False, bien sûr.

Puisqu'il est distinct de DAO, je verrais cette opération à travers avant d'ouvrir le jeu d'enregistrements correctement.

+2

'DoCmd.RunSQL' semble motiver les gens à utiliser' SetWarnings = False' qui est à la fois risqué et inutile. http://stackoverflow.com/questions/11213892/whats-the-difference-between-docmd-setwarnings-and-currentdb-execute/11213943#11213943 Au lieu de 'RunSQL', utilisez la méthode' .Execute' de 'CurrentDb' ou 'CurrentProject.Connection'. L'une ou l'autre exécutera l'instruction 'DELETE' et ne vous incitera pas à désactiver SetWarnings. – HansUp

+0

+1 et un bon conseil de HansUp. J'ai tendance à avoir un état d'esprit procédural et non objectal. Cela fonctionne contre moi. – Smandoli

-1

S'il vous plaît essayez ceci:

Do While Not rs.EOF 
rs.Delete 
rs.MoveNext 
Loop 
+0

Cela peut être TRÈS lent. – user3305711

Questions connexes