[Access2000]Pb dans requête de suppression

mishan Messages postés 38 Statut Membre -  
phil_232 Messages postés 286 Statut Membre -
Bonjour à tous,

Voila j'ai un problème dans une de mes requêtes que j'utilise au cours de mon programme.

Mes requêtes sont stocké dans une table (TABLE_REQUETE) auxquelle je fais appel dans mon programme avec des DLookup dans le genre :

Code :

base = "MAJ_ContratAEcheance_Etap3_Sppr"
Crit = "[Nom] =""" & base & """"
strsql = DLookup("TexteSQL", "TABLE_REQUETE", Crit)
DoCmd.RunSQL strsql


Cela fonctionne sans problème de cette manière sauf pour ma requête de suppression qui réagit bizarrement...

Je m'explique : dans mon programme j'enchaine des requête d'action sur l'une de mes tables (Contrat_A_Echeance) et à la fin de cette enchainement de requête je souhaite supprimer des ligne de cette table car plus nécessaire dans l'utilisation futur ... Or le problème c'est que cette requete ne réagit pascorrectement car elle me supprime des lignes d'enregistrement qui ne devrait pas être suppriméés.

Par contre, lorque je teste cette requête de suppression directement dans la base de donnée, aucun souci de ce côté car elle réagit correctement et ne supprime pas les lignes. Pourtant la requête est identique :

Code :

DELETE Contrat_A_Echeance.NumeroContrat, Contrat_A_Echeance.NatureContrat, Contrat_A_Echeance.EtatAvancement
FROM Contrat_A_Echeance
WHERE (((Contrat_A_Echeance.NatureContrat) Not Like "A")) OR (((Contrat_A_Echeance.EtatAvancement)<>"Actif" And (Contrat_A_Echeance.EtatAvancement)<>"Signé"));


Est ce que quelqu'un pourrait m'expliquer ? Ou même me donner une petite piste de l'erreur que j'aurais pu commettre ? J'avoue que je suis un perdue

Je vous met le code que j'utilise :

Code :

Private Sub récupFichierA_Click()
'Importation de fichier *.XLS
'Utilisation de la fenêtre FichierSélect pour l'importation à partir d'excel

On Error GoTo err_

Dim repert, feuille, base As String, fic As Variant
Dim cible, CibleData As String
Dim strsql As String

base = "Source"
'récupération du fichier à importer
Crit = "[base] ='" & base & "'"
m_bouton = "Valider la Sélection"
m_sélFicAnnulé = True
DoCmd.OpenForm "FichierSélect", acNormal, , Crit, acFormEdit, acDialog
If m_sélFicAnnulé Then Exit Sub
'récupération du répertoire sélectionné
repert = DLookup("[répertoire]", "Variables", Crit)
fic = DLookup("[fich_Data]", "Variables", Crit)
'nettoyage et récupération des données
videTable "PI_Export"
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "PI_Export", repert & fic, True

delTableImportErrors

'détection nouveaux status
rep = DCount("*", "PI_Export", "([EtatAvancement] is not null) AND [EtatAvancement] not in(SELECT Status FROM réf_EtatAvancement)")
If rep > 0 Then MsgBox "ATTENTION : " & rep & " Lignes en état inconnu", vbInformation, "Contrôle Contrat"

'controle de décalage pb de point virgule
ChampListeCréa
Me.Refresh

'-----------------------------------------------------------------------------------
DoCmd.SetWarnings False

'Ecris dans la table Contrat_A_Echeance les lignes importées
'et qui ne sont pas encore dans cette table
' DoCmd.OpenQuery "GC_Contrat_A_Echeance_Ajout"
base = "Ajout_Contrat_A_Echeance"
Crit = "[Nom] =""" & base & """"
strsql = DLookup("TexteSQL", "TABLE_REQUETE", Crit)
DoCmd.RunSQL strsql

'Met à jour les données existant dans le cas d'une modification dans la base GCP
base = "MAJ_ContratAEcheance_Etap1_Donnees"
Crit = "[Nom] =""" & base & """"
strsql = DLookup("TexteSQL", "TABLE_REQUETE", Crit)
DoCmd.RunSQL strsql
'Met à jour les calcul sur les dates (Delais, Delais6Mois,Delais3Mois)
base = "MAJ_ContratAEcheance_Etap2_Delais"
Crit = "[Nom] =""" & base & """"
strsql = DLookup("TexteSQL", "TABLE_REQUETE", Crit)
DoCmd.RunSQL strsql

'Supprimes les lignes d'enregistrements dont les contrats ne sont plus en type A
base = "MAJ_ContratAEcheance_Etap3_Suppr"
Crit = "[Nom] =""" & base & """"
strsql = DLookup("TexteSQL", "TABLE_REQUETE", Crit)
DoCmd.RunSQL strsql

'Traitement des états d'avancement avec MAJ des données.
SUIVI_ETAT_AVANCEMENT

'Supprime les lignes d'enregistrements de Pi_Export dont la nature n'est pas A ou est vide
strsql = "Delete NumeroContrat, NatureContrat FROM PI_Export " _
& " WHERE (Not NatureContrat='A' And Not NatureContrat='AR') OR (NatureContrat Is Null)"
'& " WHERE ((Not (NatureContrat)='A' Or (NatureContrat) Is Null))"
DoCmd.RunSQL strsql
'
DoCmd.SetWarnings True
'----------------------------------------------------------------------------------

MsgBox "Importation " & fic & " terminée", vbInformation

Exit Sub
err_:
MsgBox Error$
End Sub


merci d'avance çà ceux ou celles qui me répondront.
A voir également:

1 réponse

phil_232 Messages postés 286 Statut Membre 33
 
déjà ça ce réduit à :

DELETE
FROM Contrat_A_Echeance
WHERE
(
Contrat_A_Echeance.NatureContrat Not Like "A"
)
OR
(
Contrat_A_Echeance.EtatAvancement<>"Actif" And
Contrat_A_Echeance.EtatAvancement<>"Signé"
)
;

une telle requete est un peu le pire de ce qu'il existe. elle implique un table scan ou même trois.

"Not Like "A"" est égale à <>"A"

pas besoin d'utiliser un index. ce sera toujours un table scan
0