[ACCESS] Est il possible de faire un TRUNCATE ?

Est il possible de faire un TRUNCATE ? [ACCESS] - SQL/NoSQL - Programmation

Marsh Posté le 22-09-2006 à 18:08:21    

Bonjour,
 
Je me demandais s'il existait en Access un équivalent de la commande TRUNCATE (qu'on trouve sous MySQL par exemple).
 
En fait je voudrais pouvoir vider une table pour la remplir à nouveau, mais Access bloque la suppression du fait des références vers d'autres tables avec un DELETE *
 
Merci !


---------------
Bien joué! Mais une brique ne rend jamais les coups.
Reply

Marsh Posté le 22-09-2006 à 18:08:21   

Reply

Marsh Posté le 23-09-2006 à 11:20:34    

Bonjour,
a la main?
ouvrir la table, clic droite sur le carré en haut à gauche, supprimer l'enregistrement
 
sinon:
recordset.Delete AffectRecords  
 
voir : Méthode Delete (objet ADO Recordset)
 
Cordialement


Message édité par seniorpapou le 23-09-2006 à 11:36:22
Reply

Marsh Posté le 24-09-2006 à 11:17:21    

DELETE CASCADE

Reply

Marsh Posté le 25-09-2006 à 15:19:50    

Ouh là là...
 
La méthode de seniorpapou fera la même erreur que le simple DELETE. Deplus, passer par un record de sélection pour faire une suppression, c'est jouer avec le feu (on ne peut pas garantir qu'entre le moment où les lignes sont flaguées dans le recordset et le moment où elles sont effacées, il n'y a pas eu de nouvelle insertion de données dans la table).
 
La méthode de moi23372 est la meilleure solution pour viter la base entière sans trop avoir compris ce qu'il s'est passé.
 
Non, faut pas faire comme ça.
 
Et il n'y a en effet pas de TRUNCATE dans Access.
 
La meilleure solution consiste donc à supprimer toutes les clés étrangères, puisqu'Access ne permet pas de les désactiver (c'est ce que fait le TRUNCATE).
Il faut mieux aussi supprimer les éventuels index de la table, puisqu'à nouveau on ne peut pas les désactiver (ce que fait le TRUNCATE aussi) car sinon le delete et la repopulation seront très lents.
Une fois ces clés supprimées, on peut sans problème effectuer le DELETE * (sans CASCADE, qui est extrêment dangereux et à banir autant que possible).
Une fois la table repopulée, on pourra remettre les clés et les index sur la table.
 
Attention toutefois : si les données sont incohérentes, la re-création des clés et des index échouera.

Reply

Marsh Posté le 26-09-2006 à 07:42:46    

Bonjour,
Tout à fait en phase avec tes remarques.
 

Citation :


(on ne peut pas garantir qu'entre le moment où les lignes sont flaguées dans le recordset et le moment où elles sont effacées, il n'y a pas eu de nouvelle insertion de données dans la table).
 


 
 
Ceci suppose-t-il qu'il est en réseau?
Si oui, on peu admettre qu'avant une manip de ce genre il ouvre sa base en mode exclusif sinon bonjour les dégats..
 
Il est vrai qu'Alphajet n'a pas précisé le contexte dans lequel il travaillait: est-ce une version opérationnelle ou bien une phase de tests?
Attendons..
 
Cordialement
 

Reply

Marsh Posté le 26-09-2006 à 11:54:16    

Bonjour et avant tout merci pour vos réponses  
 
Le cadre est une base Access partagée pour une dizaine de personnes.
Cette procédure est destinée à être utilisée environ 1 fois par an, lors de la mise à jour d'informations sur des pays.
 
Pour faciliter la vie des personnes du service statistiques, je crée un formulaire qui va récupérer les données depuis un fichier Excel. Comme ça une fois par an, elles pourront remettre à jour leur fichier Excel, puis cliquer sur l'importation de leur fichier Excel
 
L'objectif étant de pouvoir vider la table et réinsérer les données tout s'assurant que les liens avec d'autres tables sont toujours actifs. J'aurais pu faire un UPDATE, cependant si l'on veut retirer ou ajouter un pays dans la liste, c'est moins évident.


---------------
Bien joué! Mais une brique ne rend jamais les coups.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed