OVH Cloud OVH Cloud

Message erreur requete suppression

10 réponses
Avatar
Gafish
Bonjour,

J'ai une requête de suppression sur une table en fonction des paramètres
d'une autre qui a déja bien fonctionné.
Hors, elle me marque depuis peu le message suivant à l'execution :
"L'opération doit utiliser une requête qui peut être mise à jour"

D'où peut venir mon problème ?

Il ne doit pas s'agir d'un problème d'accès concurrents car "à la main" la
suppression fonctionne.

Merci d'avance !

Arnaud

10 réponses

Avatar
Gafish
Re !

Petite précision au vol, quand j'execute ma requête par vba, je n'ai pas de
message d'erreur (ce qui est normal) mais tout semble bien fonctionner.

"Gafish" a écrit dans le message news:

Bonjour,

J'ai une requête de suppression sur une table en fonction des paramètres
d'une autre qui a déja bien fonctionné.
Hors, elle me marque depuis peu le message suivant à l'execution :
"L'opération doit utiliser une requête qui peut être mise à jour"

D'où peut venir mon problème ?

Il ne doit pas s'agir d'un problème d'accès concurrents car "à la main" la
suppression fonctionne.

Merci d'avance !

Arnaud




Avatar
Rv
Salut,

Peut-être avec la propriété Enr. Unique de la requête qui doit être à
oui.
En SQL Access ça donne DELETE DISTINCTROW ...

A+

Rv

"Gafish" a écrit dans le message de
news:
Bonjour,

J'ai une requête de suppression sur une table en fonction des paramètres
d'une autre qui a déja bien fonctionné.
Hors, elle me marque depuis peu le message suivant à l'execution :
"L'opération doit utiliser une requête qui peut être mise à jour"

D'où peut venir mon problème ?

Il ne doit pas s'agir d'un problème d'accès concurrents car "à la main" la
suppression fonctionne.

Merci d'avance !

Arnaud




Avatar
Gafish
Merci beaucoup pour la réponse !
J'ai ajouté le DISTINCTROW, mais le problème demeure.

Arnaud

"Rv" a écrit dans le message news:

Salut,

Peut-être avec la propriété Enr. Unique de la requête qui doit être à
oui.
En SQL Access ça donne DELETE DISTINCTROW ...

A+

Rv

"Gafish" a écrit dans le message de
news:
Bonjour,

J'ai une requête de suppression sur une table en fonction des paramètres
d'une autre qui a déja bien fonctionné.
Hors, elle me marque depuis peu le message suivant à l'execution :
"L'opération doit utiliser une requête qui peut être mise à jour"

D'où peut venir mon problème ?

Il ne doit pas s'agir d'un problème d'accès concurrents car "à la main"
la


suppression fonctionne.

Merci d'avance !

Arnaud








Avatar
Rv
Aïe!
Quel est précisément le contenu de la requête?
Ca marche vraiment en VBA (les enregistrements sont bien supprimés?
L'absence de déclenchement d'erreur ne prouve pas forcément que cela
fonctionne!), mais pas directement comme un objet requête Access. C'est bien
ça?
Si oui il faudrait aussi voir le code VBA.

A+

Rv



"Gafish" a écrit dans le message de
news:
Merci beaucoup pour la réponse !
J'ai ajouté le DISTINCTROW, mais le problème demeure.

Arnaud


Avatar
Gafish
Merci pour l'interet porté à mon problème!
Oui, en VBA cela fonctionne car en fait j'envoie une partie de ma table dans
une table temporaire, je fais de nombreux traitements, et je renvoie ces
lignes (apres suppression des anciennes) dans ma grosse table. Et cela
fonctionne car et d'une j'ai toujours le même nombre de lignes, et pas le
double, et les traitements ont bien été faits.
En VBA je me contente en plus de faire un
dbscurrent.Execute stDocName
ou stDocName est le nom de ma requête.

Sinon la requête Access, mise en SQL donne cela :
DELETE DISTINCTROW [data warehouse].*
FROM [data warehouse], [Table des paramètres du mois]
WHERE ((([Table des paramètres du mois].Impress)<>0) AND (([data
warehouse].mois)=CInt(Left([Table des paramètres du mois]![MMAAAA],2))));

donc rien de sensationnel, les deux éléments du FROM étant des tables de ma
base (dont une liée, mais ce n'est pas celle où je supprime en plus).

Arnaud

"Rv" a écrit dans le message news:
#
Aïe!
Quel est précisément le contenu de la requête?
Ca marche vraiment en VBA (les enregistrements sont bien supprimés?
L'absence de déclenchement d'erreur ne prouve pas forcément que cela
fonctionne!), mais pas directement comme un objet requête Access. C'est
bien

ça?
Si oui il faudrait aussi voir le code VBA.

A+

Rv



"Gafish" a écrit dans le message de
news:
Merci beaucoup pour la réponse !
J'ai ajouté le DISTINCTROW, mais le problème demeure.

Arnaud






Avatar
Rv
En changeant la forme de la requête comme ceci:

DELETE DISTINCTROW [data warehouse].* FROM [data warehouse] INNER JOIN
[Table des paramètres du mois] ON [datawarehouse].mois=CInt(Left([Table des
paramètres du mois]![MMAAAA],2)) WHERE [Table des paramètres du
mois].Impress<>0

Qu'est ce que ça dit?

A+

Rv



"Gafish" a écrit dans le message de
news:
Merci pour l'interet porté à mon problème!
Oui, en VBA cela fonctionne car en fait j'envoie une partie de ma table
dans

une table temporaire, je fais de nombreux traitements, et je renvoie ces
lignes (apres suppression des anciennes) dans ma grosse table. Et cela
fonctionne car et d'une j'ai toujours le même nombre de lignes, et pas le
double, et les traitements ont bien été faits.
En VBA je me contente en plus de faire un
dbscurrent.Execute stDocName
ou stDocName est le nom de ma requête.

Sinon la requête Access, mise en SQL donne cela :
DELETE DISTINCTROW [data warehouse].*
FROM [data warehouse], [Table des paramètres du mois]
WHERE ((([Table des paramètres du mois].Impress)<>0) AND (([data
warehouse].mois)=CInt(Left([Table des paramètres du mois]![MMAAAA],2))));

donc rien de sensationnel, les deux éléments du FROM étant des tables de
ma

base (dont une liée, mais ce n'est pas celle où je supprime en plus).

Arnaud



Avatar
Gafish
Merci pour ton aide.
Ca dit "expression de jointure non supportée" :'(

"Rv" a écrit dans le message news:
eUoJ#
En changeant la forme de la requête comme ceci:

DELETE DISTINCTROW [data warehouse].* FROM [data warehouse] INNER JOIN
[Table des paramètres du mois] ON [datawarehouse].mois=CInt(Left([Table
des

paramètres du mois]![MMAAAA],2)) WHERE [Table des paramètres du
mois].Impress<>0

Qu'est ce que ça dit?

A+

Rv



"Gafish" a écrit dans le message de
news:
Merci pour l'interet porté à mon problème!
Oui, en VBA cela fonctionne car en fait j'envoie une partie de ma table
dans

une table temporaire, je fais de nombreux traitements, et je renvoie ces
lignes (apres suppression des anciennes) dans ma grosse table. Et cela
fonctionne car et d'une j'ai toujours le même nombre de lignes, et pas
le


double, et les traitements ont bien été faits.
En VBA je me contente en plus de faire un
dbscurrent.Execute stDocName
ou stDocName est le nom de ma requête.

Sinon la requête Access, mise en SQL donne cela :
DELETE DISTINCTROW [data warehouse].*
FROM [data warehouse], [Table des paramètres du mois]
WHERE ((([Table des paramètres du mois].Impress)<>0) AND (([data
warehouse].mois)=CInt(Left([Table des paramètres du
mois]![MMAAAA],2))));



donc rien de sensationnel, les deux éléments du FROM étant des tables de
ma

base (dont une liée, mais ce n'est pas celle où je supprime en plus).

Arnaud







Avatar
Rv
Et :

DELETE DISTINCTROW [data warehouse].*
FROM [data warehouse]
WHERE [datawarehouse].mois
IN
(
SELECT CInt(Left([Table des paramètres du mois]![MMAAAA],2))
FROM [Table des paramètres du mois]
WHERE [Table des paramètres du mois].Impress<>0
)


A+

Rv

"Gafish" a écrit dans le message de
news:
Merci pour ton aide.
Ca dit "expression de jointure non supportée" :'(

"Rv" a écrit dans le message news:
eUoJ#
En changeant la forme de la requête comme ceci:

DELETE DISTINCTROW [data warehouse].* FROM [data warehouse] INNER JOIN
[Table des paramètres du mois] ON [datawarehouse].mois=CInt(Left([Table
des

paramètres du mois]![MMAAAA],2)) WHERE [Table des paramètres du
mois].Impress<>0

Qu'est ce que ça dit?

A+

Rv








Avatar
Gafish
Rebonjour,

Excuse moi déja de ne pas avoir répondu plus tôt, mais je n'ai pu tester que
maintenant.
Cette requête renvoit le message "Utilisation incorrect de null"
Merci encore pour ton aide

Arnaud

"Rv" a écrit dans le message news:
#rL#
Et :

DELETE DISTINCTROW [data warehouse].*
FROM [data warehouse]
WHERE [data warehouse].mois
IN
(
SELECT CInt(Left([Table des paramètres du mois]![MMAAAA],2))
FROM [Table des paramètres du mois]
WHERE [Table des paramètres du mois].Impress<>0
)


A+

Rv

"Gafish" a écrit dans le message de
news:
Merci pour ton aide.
Ca dit "expression de jointure non supportée" :'(

"Rv" a écrit dans le message news:
eUoJ#
En changeant la forme de la requête comme ceci:

DELETE DISTINCTROW [data warehouse].* FROM [data warehouse] INNER JOIN
[Table des paramètres du mois] ON
[datawarehouse].mois=CInt(Left([Table



des
paramètres du mois]![MMAAAA],2)) WHERE [Table des paramètres du
mois].Impress<>0

Qu'est ce que ça dit?

A+

Rv












Avatar
Rv
Salut,

Sûrement des valeurs NULL dans le champ "MMAAAA" de la table "Table des
paramètres du mois" qui bloque l'évaluation du calcul CInt(Left([Table des
paramètres du mois]![MMAAAA],2)).
Si on ne veut pas traiter ces valeurs NULL il faut rajouter dans la clause
WHERE de la sous requête AND [Table des paramètres du mois]![MMAAAA] IS NOT
NULL. Ce qui donne:

DELETE DISTINCTROW [data warehouse].*
FROM [data warehouse]
WHERE [data warehouse].mois
IN
(
SELECT CInt(Left([Table des paramètres du mois]![MMAAAA],2))
FROM [Table des paramètres du mois]
WHERE [Table des paramètres du mois].Impress<>0 AND [Table des
paramètres du mois]![MMAAAA] IS NOT NULL
)

Mais là ça dépend de la signification des données et du traitement qui
utilise cette requête.
En tous cas si cette forme marche ça peut permettre de comprendre l'erreur
déclenchée et donc de prendre les mesures adéquates...

A+

Rv

"Gafish" a écrit dans le message de
news:O4B%
Rebonjour,

Excuse moi déja de ne pas avoir répondu plus tôt, mais je n'ai pu tester
que

maintenant.
Cette requête renvoit le message "Utilisation incorrect de null"
Merci encore pour ton aide

Arnaud

"Rv" a écrit dans le message news:
#rL#
Et :

DELETE DISTINCTROW [data warehouse].*
FROM [data warehouse]
WHERE [data warehouse].mois
IN
(
SELECT CInt(Left([Table des paramètres du mois]![MMAAAA],2))
FROM [Table des paramètres du mois]
WHERE [Table des paramètres du mois].Impress<>0
)


A+

Rv

"Gafish" a écrit dans le message de
news:
Merci pour ton aide.
Ca dit "expression de jointure non supportée" :'(

"Rv" a écrit dans le message news:
eUoJ#
En changeant la forme de la requête comme ceci:

DELETE DISTINCTROW [data warehouse].* FROM [data warehouse] INNER
JOIN




[Table des paramètres du mois] ON
[datawarehouse].mois=CInt(Left([Table



des
paramètres du mois]![MMAAAA],2)) WHERE [Table des paramètres du
mois].Impress<>0

Qu'est ce que ça dit?

A+

Rv