[Access2000]Pb dans requête de suppression
mishan
Messages postés
38
Statut
Membre
-
phil_232 Messages postés 286 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.
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:
- [Access2000]Pb dans requête de suppression
- Forcer suppression fichier - Guide
- Suppression compte gmail - Guide
- Suppression facebook - Guide
- Suppression compte google - Guide
- Suppression page word - Guide
1 réponse
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
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