Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1233 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  VBA /SQL => BASE ACCESS Comment supprimer des données ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

VBA /SQL => BASE ACCESS Comment supprimer des données ?

n°1390883
erwan83
Du Shift DEL tu te méfieras !
Posté le 19-06-2006 à 18:07:16  profilanswer
 

Salut à tous...
 
Voila le soucis...
J'ai une base de données centrale ACCESS avec plein plein plein de tables liées
La table PERSONNE est la table principale => index clé primaire auto number.
     Elle contient nom, prenom et quelques index qui renvoient vers d'autres tables
La table SITUATION FAMILIALE
La table SERVICE
La table BUREAU
La table INDICE_PAIE
etc etc etc etc etc
 
Donc pour le moment j'ai ouvert une deuxième base de données ACCESS (vide celle-ci) qui accède via le réseau à la première pour mettre à jour les enregistrements... Ca marche
Exemple si PIERRE MARTIN qui a l'index 144 passe de marié avec 2 enfants à divorcé avec 2 enfants ça marche, les clés et les index se mettent à jour sans probleme...
 
Il y a des relations qui font des mises à jour en cascade vers et depuis la table PERSONNE et ça marche aussi.
 
PROBLEME:
Quand je crée une requete de suppression dans ma base de données centrale je lui demande de supprimer : DELETE FROM PERSONNE WHERE PERSONNE.Nom LIKE 'MARTIN' AND PERSONNE.Prenom LIKE 'MARCEL' .....
ACCESS me renvoit aussitot une question : suppression clé primaire, suppression enregistrements... je ne me souviens plus de la syntaxe exacte... Etes vous sur de vouloir executer ?
Je clique OUI puis re-question et je clique OUI.
==> Tous les enregistrements en rapport avec MARTIN MARCEL sont supprimés
 
en fait le problème vient maintenant :
Quand je lance un CN.Execute ("" ) requete de suppression en copie conforme dans le module de ma deuxième base de données et que je lance le mode debogage (pas à pas) rien ne se passe.  
L'instruction est executée, VBA passe dessus à l'aise et ne renvoit aucun message d'erreur, pas même de question.  
Alors j'ai testé :  
mettre une erreur dans le texte de la requete ==> VBA plante
mettre des doubles ou simples quotes ==> VBA passe par dessus et ne renvoit pas d'erreur, pas même de question.  
l'état de ma connexion : il est OK
mes privilèges : ils sont OK
L'appel à l'ingénieur qui evidemment ne bosse pas sous ACCESS ==> il est perplexe...
 
Donc maintenant je teste l'appel au FORUM...
 
Merci


---------------
http://www.ypikay.com
mood
Publicité
Posté le 19-06-2006 à 18:07:16  profilanswer
 

n°1390910
Fred_l
Posté le 19-06-2006 à 18:33:05  profilanswer
 

Je dirais que c'est normal !!
Tu as une base relationnelle !, donc quand tu supprimes une prersonne, il est normal que ça supprime tous ce qui la concerne !
Sinon tu risque d'avoir une base de donnée vraiment pas sstable !
 
Je ne vois pas ou est le problème ! Ou tout du moins je ne vois pas ce que tu veux supprimer et ne pas supprimer ?????

n°1390912
erwan83
Du Shift DEL tu te méfieras !
Posté le 19-06-2006 à 18:34:21  profilanswer
 

je suis d'accord mais quand je lance cette requete en SQL depuis un module externe en VB, rien ne se passe...
OUPSSS


---------------
http://www.ypikay.com
n°1391560
tegu
Posté le 20-06-2006 à 15:48:29  profilanswer
 

C'est quoi ta variable CN ?

n°1391716
erwan83
Du Shift DEL tu te méfieras !
Posté le 20-06-2006 à 18:51:03  profilanswer
 

C'est la connection permanente à la base de données
CN.open....


---------------
http://www.ypikay.com
n°1391910
tegu
Posté le 21-06-2006 à 09:19:46  profilanswer
 

Je ne comprends pas pourquoi tu utilises la notion de connexion dans un traitement impliquant 2 bases ACCESS.
Tu pourrais quand même donner la déclaration de ta variable CN et expliquer un peu mieux à quoi ton code ressemble.
Ton problème n'est pas un pb SQL, donc il faut plus d'infos sur le contexte.


Message édité par tegu le 21-06-2006 à 09:19:54
n°1392390
erwan83
Du Shift DEL tu te méfieras !
Posté le 21-06-2006 à 18:01:31  profilanswer
 

Dim CN As ADODB.Connection :::: connexion permanente à la base de données.
ensuite je tape
CN.Execute (DELETE........)
Ce qui signifie que sur ma connection je fais un delete d'un champ complet de ma table mère. En principe il devrait effacer les enregistrements liés...
Quand je lance cette demmande en local sur la base de données il me pose la question "Etes vous sur de vouloir effacer......" et après 2 confirmations il efface tous les enregistrements liés.
 
MAIS PAR LE RESEAU en VB quand je lui dis
CN.Execute ... la même requete rien ne se passe...


---------------
http://www.ypikay.com
n°1392597
tegu
Posté le 22-06-2006 à 09:05:17  profilanswer
 

Entre deux bases ACCESS j'ai plutôt tendance à passer par DAO plutôt que ADODB.
Je ne sais pas comment ADODB gère l'effacement en cascade pour les relations Access, qui plus est dans un contexte réseau. Toujours est-il que les symptômes que tu rencontres sont effectivement surprenants.
Désolé de ne pouvoir t'aider plus.

n°1392695
erwan83
Du Shift DEL tu te méfieras !
Posté le 22-06-2006 à 11:44:33  profilanswer
 

merci tout de même


---------------
http://www.ypikay.com
n°1711387
ptite_bebe​te
Posté le 02-04-2008 à 09:38:18  profilanswer
 

Bonjour,
 
Je développe durant un stage une application d'autoévaluation des connaissances sous Access et rencontre les mêmes problème. Concrètement, des utilisateurs se connectent pour répondre à des questionnaires ayant trait à leur fonction dans la société. Le problème vient que je ne peux conserver de questionnaire incomplet (ce qui se produit si l'utilisateur se déconnecte avec Alt F4 durant un questionnaire, les autres moyens de quitter l'application ayant été enrayés).
 
Je cherche donc à supprimer de ma base de données les enregistrements des questionnaires réalisés partiellement (et de réponses données correspondantes). Voici mes codes sql dont je demande l'exécution par VBA :
 
sql3 = "Delete Realiser.N°_Session, Realiser.N°_Questionnaire, Realiser.score, Realiser.date_debut, Realiser.date_fin "
sql3 = sql3 + "FROM Realiser "
sql3 = sql3 + "WHERE (((Realiser.N°_Session)= " & session_id2 & " ) AND ((Realiser.N°_Questionnaire)= " & questionnaire_id & " ) AND ((Realiser.Score)=-1) AND ((Realiser.date_debut)= #" & Date_Debut & "#));"
MsgBox (sql3)
CurrentDb.Execute (sql3)
 
sql3 = "DELETE Reponses_Donnees.N°_Session, Reponses_Donnees.N°_Question, Reponses_Donnees.N°_Questionnaire, Reponses_Donnees.Reponse_donnee, Reponses_Donnees.Date "
sql3 = sql3 + "FROM Reponses_Donnees "
sql3 = sql3 + "WHERE (((Reponses_Donnees.N°_Session)= " & session_id & " ) AND ((Reponses_Donnees.N°_Questionnaire)= " & questionnaire_id & " ) AND ((Reponses_Donnees.Date) > #" & Date_Debut & "#));"
MsgBox (sql3)
CurrentDb.Execute (sql3)
 
Explications des codes : pour le premier, je veux effacer le contenu de la table Realiser l'enregistrement correspondant à telle session ("session_id2" ), à ce questionnaire incomplet ("questionnaire_id" ) dont le score vaut "-1" (car n'ayant pas encore été calculé puisque ce calcul intervient à la fin du questionnaire) et qui a été commencé à telle date ("Date_Debut" ).
Pour le second, j'efface de la table Reponses_Donnees (où j'enregistre les réponses données pour tel questionnaire "questionnaire_id" réalisé dans telle session "session_id" )dont les réponses ont été données après la "Date_Debut" (afin d'être sûr de n'effacer que les enregistrements de cette réalisation du questionnaire).
 
Le problème est donc le suivant (il me semble identique au premier exposé) :
quand j'exécute ma requête directement sous Access, ça marche (il me demande confirmation avec : "attention, vous allez effacer x enregistrements...".
quand j'exécute ma requête dans VBA, il passe dessus (le msgbox s'affiche, il passe bien à l'instruction suivante) mais dans ma table de données, rien n'a été effacé (et aucun message de confirmation de suppression ou d'erreur).
 
Voilà, Merci d'avance à quiconque voudra bien m'aider...

mood
Publicité
Posté le 02-04-2008 à 09:38:18  profilanswer
 

n°1711561
olivthill
Posté le 02-04-2008 à 13:09:16  profilanswer
 

Je n'ai jamais rencontré ce problème, mais au lieu d'utiliser Execute, je me sers de runSql.
Pour voir les messages éventuels, il faudrait qu'ils ne soient pas désactiver. Donc, au moins pour un test, peut-être pourriez vous remplacer un de vos CurrentDb.Execute par

Docmd.Setwarnings True
Docmd.runSQL sql3
Docmd.Setwarnings False

Par ailleurs, vos requêtes contiennent des dates, et les conversions occasionnent parfois des surprises. Pourriez-vous tenter un delete dans une table de test sans impliquer de champ date ?

n°1712760
tegu
Posté le 04-04-2008 à 14:24:51  profilanswer
 

Les données sont-elles contenues dans CurrentDB directement ou dans une autre base à laquelle référence est faite via des tables liées ?

n°1712988
olivthill
Posté le 04-04-2008 à 21:06:34  profilanswer
 

Pour moi, ça marchait sur des tables locales, et aussi sur des tables distantes (Oracle ou Sybase)qui ont été "attachées" à des tables locales. Mais, je crois me souvenir qu'il fallait mettre des privilèges particuliers quelque part si on ne voulait pas faire que de la consultation, et donc pour modifier ou supprimer des lignes dans une table distante.

n°1713006
erwan83
Du Shift DEL tu te méfieras !
Posté le 04-04-2008 à 23:12:36  profilanswer
 

merci à tous mais le probleme date de juin 2006, j'arrive plus à me souvenir de quel projet c'était :)
mais au moins ça aura ouvert le débat


---------------
http://www.ypikay.com

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  VBA /SQL => BASE ACCESS Comment supprimer des données ?

 

Sujets relatifs
[VBA]Copier une phrase de word dans excelMail automatique à partir d'Access
Pb recuperation de donnéesComment enregistrer des photos (url) dans sa base
[visual Basic] comment lire dans la base de registre[VB Access]:Jmail
[C] [urgent] supprimer la derniere cellule d une file ?Control Data, erreur de connection Access
DatagramPacket & DatagramSocket recupération des données[VBA] Problème avec RecordCount
Plus de sujets relatifs à : VBA /SQL => BASE ACCESS Comment supprimer des données ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR