OVH Cloud OVH Cloud

SQL : suppression orphelins

3 réponses
Avatar
Gloops
Bonjour tout le monde,

Je dois supprimer les adresses où n'habite personne, les tables candidat
et adresse postale étant liées sur le code adresse postale.

Dans le gestionnaire de données ma requête fonctionne très bien, mais si
je la lance dans mon programme VB6 par
Data1.Database.Execute(strSQL)
ça ne fait ni chaud ni froid à la base, alors que
Data1.Database.Openrecordset me permet d'ouvrir des jeux
d'enregistrements sans problème, ce qui vérifie que je m'adresse à la
bonne base.

L'instruction s'exécute, j'ai fait une pause dessus pour vérifier, mais
les enregistrements ne sont pas effacés.

Quelqu'un a-t-il une idée sur ce qui cloche ?

Voici la requête :

DELETE FROM AdressePostale WHERE CodeAdresse IN (SELECT
AdressePostale.CodeAdresse FROM AdressePostale LEFT JOIN Candidat ON
Candidat.[Code AdressePostale] = AdressePostale.CodeAdresse WHERE
Candidat.[Code AdressePostale] = Null)

(oui je sais, mauvaise idée l'espace dans le nom de champ ; mais dans le
gestionnaire de données ça fonctionne impec)

C'est une base que j'ai créée sous le gestionnaire de données, la
propriété Connect de Data1 est "Access 2000;"

3 réponses

Avatar
Gloops
(suite Msg-Id <4283e9a4$0$25021$ de ce matin 01:41)

Elément de réflexion supplémentaire.

J'ai créé une requête reqAPurger, et ses résultats semblent surprenants.
Dans le gestionnaire de données, elle retourne trois enregistrements.

Voici une procédure de test et ses résultats (j'ai évité Rs.MoveLast,
qui retournait une erreur du fait de l'absence d'enregistrements) :

Public Sub TestReq()
Dim DB As Database
Dim qry As QueryDef
Dim Rs As Recordset
Set DB = DBEngine.OpenDatabase((chemin) ... "CONTACTS_BASE.MDB")
Set qry = DB.QueryDefs("reqAPurger")
Debug.Print qry.SQL
Set Rs = qry.OpenRecordset
' erreur si j'exécute : Rs.MoveLast
Debug.Print "qry a " + Str(Rs.RecordCount) + " enregistrements"
Rs.Close
Set Rs = Nothing
qry.Close
Set qry = Nothing
DB.Close
Set DB = Nothing
End Sub

SELECT AdressePostale.CodeAdresse
FROM AdressePostale LEFT JOIN Candidat ON Candidat.[Code AdressePostale]
= AdressePostale.CodeAdresse
WHERE Candidat.[Code AdressePostale] = Null;

qry a 0 enregistrements
Avatar
Eric
Bonjour Gloops,

As-tu essayé avec :
WHERE Candidat.[Code AdressePostale] Is Null
ou encore:
WHERE IsNull(Candidat.[Code AdressePostale]) ?

A+
Eric

Gloops a écrit :
(suite Msg-Id <4283e9a4$0$25021$ de ce matin
01:41)

Elément de réflexion supplémentaire.

J'ai créé une requête reqAPurger, et ses résultats semblent surprenants.
Dans le gestionnaire de données, elle retourne trois enregistrements.

Voici une procédure de test et ses résultats (j'ai évité Rs.MoveLast,
qui retournait une erreur du fait de l'absence d'enregistrements) :

Public Sub TestReq()
Dim DB As Database
Dim qry As QueryDef
Dim Rs As Recordset
Set DB = DBEngine.OpenDatabase((chemin) ... "CONTACTS_BASE.MDB")
Set qry = DB.QueryDefs("reqAPurger")
Debug.Print qry.SQL
Set Rs = qry.OpenRecordset
' erreur si j'exécute : Rs.MoveLast
Debug.Print "qry a " + Str(Rs.RecordCount) + " enregistrements"
Rs.Close
Set Rs = Nothing
qry.Close
Set qry = Nothing
DB.Close
Set DB = Nothing
End Sub

SELECT AdressePostale.CodeAdresse
FROM AdressePostale LEFT JOIN Candidat ON Candidat.[Code AdressePostale]
= AdressePostale.CodeAdresse
WHERE Candidat.[Code AdressePostale] = Null;

qry a 0 enregistrements



Avatar
Gloops
Ah, bien vu, cette fois il y a un enregistrement dedans en l'appelant à
partir de VB6.

Je ne sais plus trop ce que j'avais trafiqué avec Is Null, je m'étais
fait jeter. Peut-être avais-je oublié l'espace entre les deux mots.

Je regarderai cet après-midi, ça devrait marcher.

Merci.



Eric a écrit, le 13/05/2005 13:37 :

Bonjour Gloops,

As-tu essayé avec :
WHERE Candidat.[Code AdressePostale] Is Null
ou encore:
WHERE IsNull(Candidat.[Code AdressePostale]) ?

A+
Eric