PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → supression d'enregistrements par SQL
supression d'enregistrements par SQL
Iniciado por denis, 23,nov. 2004 16:33 - 2 respuestas
Publicado el 23,noviembre 2004 - 16:33
Bonjour,

dans mon programme je dois lire une table (Access) et, au fur et à mésure,
je doit supprimer ce que j'ai lu...

Pas de problèmes avec la lecture:
sqlconnecte...
sqlexec("SELECT * FROM TABLE")
SQLPremier("REQ1")
TANTQUE PAS SQL.EnDehors
// Je traite
...

// Et ici j'aimerais supprimer l'enregistrement en question.
"SQLSupprime"

SQLSuivant("REQ1")
FIN

Mais comment supprimer ?
J'ai essayé sqlexec("SELECT TOP 1 * FROM TABLE") mais on ne peut pas faire
sqlexec("DELETE TOP 1 FROM TABLE")

La table lue vient d'un programme externe et est "variable". Il n'y a donc
pas un identifiant unique connu d'avance.

Merci pour vos éventuelles idées.

Denis
Publicado el 23,noviembre 2004 - 17:17
Il se trouve que Business Software SA - Denis Ramstein a formulé :
Bonjour,

dans mon programme je dois lire une table (Access) et, au fur et à mésure,
je doit supprimer ce que j'ai lu...

Pas de problèmes avec la lecture:
sqlconnecte...
sqlexec("SELECT * FROM TABLE")
SQLPremier("REQ1")
TANTQUE PAS SQL.EnDehors
// Je traite
...

// Et ici j'aimerais supprimer l'enregistrement en question.
"SQLSupprime"

SQLSuivant("REQ1")
FIN

Mais comment supprimer ?
J'ai essayé sqlexec("SELECT TOP 1 * FROM TABLE") mais on ne peut pas faire
sqlexec("DELETE TOP 1 FROM TABLE")

La table lue vient d'un programme externe et est "variable". Il n'y a donc
pas un identifiant unique connu d'avance.

Merci pour vos éventuelles idées.

Denis


Salut,

Si tu n'as pas d'identifiant unique et du fait que tu utilises ACCESS,
tu ne peux pas identifier l'enregistrement par un rowid (par exemple).
Pour le supprimer, il faut donc que tu trouves un couple de valeurs qui
te permettent de dire que l'enregistrement en unique.
Par exemple, une table personne (nom, prenom, date_de_naissance,
fonction).
Tu devra construire ta requete de suppression de la manière suivante :
DELETE FROM personne
WHERE nom = "TOTO"
AND prenom = "Titi"
AND date_de_naissance = "12/10/2000"
En effet, tu as plus de chances d'avoir un enreigstrement unique avec
ces trois critères que si tu ne prends que le nom. Cependant, si, sur
ta table, tu as 2 enregistrements dont 9 champs sur 10 sont identiques
et que tu ne donne un critère que sur ces 9 champs, tu vas supprimer
les 2 d'un coup.
Je te conseillerais donc de prendre en critère tous les champs de
l'enregistrement.

En espérant avoir répondu à ta question

--
Michel GILLET
Société AVALONE
michel@avalone-fr.com
Publicado el 23,noviembre 2004 - 17:32
Une solution me vient à l'esprit qui, si elle n'est pas la plus simple, a au moins le mérite de fonctionner.
Il est possible, avec sql.nbcol et sql.titrecol, de récupérer la liste des colonnes de la table renvoyée. Il est donc possible de reconstruire de toute pièce une requête de suppression qui contient tout les champs de l'enregistrement retourné et leur valeur respective. Parmis ceux-ci ce trouve forcément la clé unique, qu'elle soit "simple" ou composée.
Reste à prendre en compte le type de donnée ( pour mettre des ' à bon escient ) avec sqlColonne.

Frédéric.