Access refuse !

Access refuse ! - SQL/NoSQL - Programmation

Marsh Posté le 01-12-2008 à 08:02:59    

bonjour
décidément access m'en veut
 
je pose une requête qui n'aboutit jamais
 
UPDATE salaires SET salaires.[SomAB]="A"+"B",salaires.[SomABC]="A"+"B"+"C";
 
le traitement se fait et le message de réponse est :
 
Access n'arrive pas a mettre à jour tous les enregistrements avec la requête mise a jour  
0 enregistrement du a l'échec de conversion de type
0 enregistrement à la suite de violations de clé
0 enregistrement à la suite de violation de verrou
et 0 enregistrement à la suite de la règle de validation
 
A 3 reprises ca ne marche pas  !    help
 
merci
 
 

Reply

Marsh Posté le 01-12-2008 à 08:02:59   

Reply

Marsh Posté le 01-12-2008 à 09:46:10    

Access signale un problème de conversion de type.
 
Est-ce que vous ne chercheriez pas à transférer des données alphanumériques dans des champs numériques, ou des données nulles dans des champs non nuls ? Pour y remédier il faudrait utiliser les instructions de conversions dont le nom commencent par la lettre "C", comme CStr, CInt, etc., et gérer les éventuelles valeurs nulles.
 
Bon courage !

Reply

Marsh Posté le 01-12-2008 à 20:36:08    

merci de ta réponse
j'ai vérifie il s'agit bien de données numériques dans des champs numériques sans le statut null
je ne sais plus quoi faire

Reply

Marsh Posté le 02-12-2008 à 13:08:36    

S'il s'agit de données numériques, il ne devrait pas y avoir de guillemets. Ou alors le code indiqué (UPDATE ...) a été changé substantiellement.

Reply

Marsh Posté le 03-12-2008 à 02:05:05    

bonjour
je ne comprends pas quand tu dis le code indique a été change substantiellement ?  comment cela peut se faire et comment y remedier si c'est le cas
excuse moi de t'ennuyer mais je nage beaucoup

Reply

Marsh Posté le 03-12-2008 à 09:38:14    

olivthill a écrit :

Access signale un problème de conversion de type.


Mais où est-ce que tu as vu qu'il y avait un problème de conversion de type de données !?
 
Moi, j'ai l'impression que ce que tu cherches à faire, c'est mettre à jour une requête, et que les champs que tu souhaites mettre à jour sont des zone calculées qu'il est impossible à mettre à jour.
 
C'est quoi [SomAB] ? Ca vient d'où ? D'une table ? D'une requête ?
Et, grand dieu, pourquoi souhaite tu concerver en BDD un champ calculé, surtout aussi simple que celui-ci ?


Message édité par kao98 le 03-12-2008 à 09:40:11

---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
Reply

Marsh Posté le 03-12-2008 à 09:39:36    

C'est juste que je vois des guillemets autour de A et de B sur la ligne :
 
UPDATE salaires SET salaires.[SomAB]="A"+"B",salaires.[SomABC]="A"+"B"+"C";  
 
"A" est une chaine de caractères contenant la lettre A
Par contre, si A était écrit sans guillemets, alors ce serait une variable nommée A, pouvant contenir une chaine de caractères ou un nombre.

Reply

Marsh Posté le 03-12-2008 à 09:41:26    

Mais access ne signale aucun problème de conversion de type de donnée comme tu le dis !
 
Pis, cf mon edit juste au dessus.


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
Reply

Marsh Posté le 03-12-2008 à 09:53:00    

Il y a une ambiguité dans le message suivant (si le message était en anglais il serait plus clair) :
 
0 enregistrement du a l'échec de conversion de type  
 
J'ai compris que cela indiquait qu'il n'y a eu zéro enregistrement d'inséré à cause d'une conversion de type.
Mais peut-être qu'il signifie qu'il n'y aurait eu zéro erreur de conversion de type. Dans ce cas, je me suis trompé et je m'en excuse. Néanmoins, il parait étrange de mettre des chaines de caractères, "A"+"B", dans un champ nommé SomAB, dont le nom semble indiqué qu'il contient une somme, donc un nombre. De plus, l'opérateur de concaténation de chaîne n'est pas le signe plus, "+", mais le et commercial "&". Donc, je ne comprends pas cette syntaxe "A" + "B". Pour moi il devrai y avoir A + B ou "A" & "B".

Reply

Marsh Posté le 03-12-2008 à 10:52:48    

Nan mais elle sait pas ce qu'elle fait, c'est tout.
 
Et pour le message d'access, ben faut connaître, c'est vrai que ça aurait pu porter à confusion. Mais la suite du message d'erreur, qu'elle donne, aurait dû te mettre la puce à l'oreille non ?
 
Enfin, spa grave. Conseille lui plutôt de revoir ses bases !


Message édité par kao98 le 03-12-2008 à 10:53:12

---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
Reply

Marsh Posté le 03-12-2008 à 10:52:48   

Reply

Marsh Posté le 03-12-2008 à 12:17:24    

je vous remercie d'essayer de m'aider ,mais ce n'est pas facile je vois.
j'essaie de mettre a jour un champ avec la valeur 1 (numérique) avec une requête ajout simple qui calcule par exemple ( where champ A +champ B <100 ) champ A et B sont des champs numériques (vérifié )
Autre problème pour des costauds car la je plane grave :
je copie ma base 1 en une base 2  ( simple copie ) dans lesquelles je n'ai laisse qu' 1 seule table ( avec les mêmes enregistrements , même caractéristiques des champs ,levé toutes les requêtes ) j'obtiens une base l'une de  668 440 K et l'autre de  2 095 332 K  !!!!!  c'est pour moi l'énigme du grand sphinx !     (sos) (help) ²  

Reply

Marsh Posté le 03-12-2008 à 15:27:17    

Je pense qu'il faut que tu fasses une procedure stockée avec un curseur...
 
Dans ton update il y a un truc que j'aime pas c'est  
UPDATE salaires SET salaires.[SomAB]="A"+"B",salaires.[SomABC]="A"+"B"+"C";  
 
Il faudrait si je comprends bien  
UPDATE salaires SET salaires.[SomAB]=salaires.[A]+salaires.[B],salaires.[SomABC]=salaires.[A]+salaires.[B]+salaires.[C] where xxx;
 
Dans ce cas je ne vois pas de moyen de créer la clause where sauf en passant pas une procedure stockée.  
 
Compacte ta deuxième base...

Reply

Marsh Posté le 03-12-2008 à 15:46:16    

smilaou a écrit :

Je pense qu'il faut que tu fasses une procedure stockée avec un curseur...


:pfff:
 
C'est Access là ! Pas Oracle !!!
 
Eglantine: ouvre un bon bouquin Access, ou trouve des cours sur Internet, et revoit les bases d'access, des requêtes, toussa.


Message édité par kao98 le 03-12-2008 à 15:47:21

---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
Reply

Marsh Posté le 03-12-2008 à 16:48:00    

kao98 j'ai jamais utilisé access. Je donne des pistes. Les procédures stockées et les curseurs n'existent pas que sous Oracle...
 
eglantine cent Tu peux passer par une autre table pour faire ces calculs...
 
insert into table2(id_salaires,A,B,C, SomAB,SomABC) select id_salaires,A,B,C ,salaires.[A]+salaires.[B] as SomAB ,salaires.[A]+salaires.[B]+salaires.[C] SomABC from SALAIRES
 
Ou bien une méthode qui plaira plus à kao98, tu crées une vue.
 
create view SALAIRESUM as select id_salaires,A,B,C ,salaires.[A]+salaires.[B] as SomAB ,salaires.[A]+salaires.[B]+salaires.[C] SomABC from SALAIRES


Message édité par smilaou le 03-12-2008 à 16:48:50
Reply

Marsh Posté le 03-12-2008 à 17:04:59    

Tu sais quoi, si tu n'as jamais travaillé avec Access et que tu ne le connais pas, et que tu te base sur une expérience "serveur de BDD comme Oracle, postgres ou autre", tu devrais t'abstenir. Vraiment.
C'est gentil à toi, tu veux aider, mais Access est très limité ! Pas de vue, pas de procédure stockée, ... pas grand chose à vrai dire. Et on est loin de l'esprit "serveur sql".
 
Eglantine: pour ton second problème, cherches dans les menus (je ne sais plus où exactement) un élément genre "compacter la base de données".
Pour ton premier problème, je ne comprend toujours pas ce que tu veux faire, mais ça me semble tordu (et inutile aussi peut-être).


Message édité par kao98 le 03-12-2008 à 17:05:38

---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
Reply

Marsh Posté le 06-12-2008 à 16:14:42    

je crée une requête qui plante et qui ne me donne pas de solution
 
UPDATE mesure(table) INNER JOIN donns (table) ON mesure.num=donns.num SET mesure.groupe1=1
WHERE((donns.v1=mesure.p1)AND(donns.v2=mesure.p2));
 
il me repond 0 enregistrement a mettre a jour alors que la requête devrait parcourir les 500 enregistrement de la table donns

Reply

Marsh Posté le 06-12-2008 à 16:23:56    

si tu fais un select * from mesure, donns where donns.v1 = mesure.p1 AND donns.v2 = mesure.p2 ça te retourne bien les enregistrements qui devraient être mis à jour ?


---------------
Instagram - Mon PVT en Australie.
Reply

Marsh Posté le 06-12-2008 à 17:26:15    

il faut que je mettes a jour un champ "groupe1" de la table "mesure" avec 1 a partir des 500 enregistrements de la table "donns"
la table "mesure" comprend environ 60000 enregistrements
il doit manquer une instruction à ma requete
tu vois laquelle ?  
merci de ta réponse

Reply

Marsh Posté le 09-12-2008 à 00:13:01    

le probleme qui se pose est lorsque je cree cette commande la reponse est  0 enregistrement mis a jour !
UPDATE Table EFFECTIF INNER JOIN Table VERSEMENTS ON Table EFFECTIF.NUM = Table VERSEMENTS.NUM SET Table EFFECTIF.Totalcritere = 1
WHERE (((Table VERSEMENTS.Q1)=[A]) AND ((Table VERSEMENTS.Q2)=[B]) AND ((Table VERSEMENTS.Q3)=[C]) AND ((Table VERSEMENTS.Q4)=[D]));
 
quelqu'un peut il m'aider ?   merci

Reply

Marsh Posté le 09-12-2008 à 10:02:16    

Comme dit précédemment, il devrait être intéressant de tester cette requête avec un select au lieu d'un update pour mieux voir ce qui se passe.  Il faudrait modifier les critères de sélection ou la jointure jusqu'à ce que ça marche. Il n'existe pas d'outil de débuggage des requêtes SQL. On est donc obligé de procéder par essais et erreurs. Bon courage !

Reply

Marsh Posté le 16-12-2008 à 23:05:10    

Bonsoir
 
Essaie d'envoyer la base pour qu'on zieute. Parceque la tu as une requete ou rien ne correspond a ce que tu en decris le post precedent... Tu mets des "Table" ou des "(table)" un peu partout...
Mon mail est dns mon profil
 
Pour la premiere requete :
UPDATE mesure INNER JOIN donns ON mesure.num = donns.num SET mesure.groupe1 = 1 WHERE (((donns.v1)=[mesure].[p1]) AND ((donns.v2)=[mesure].[p2]));
 
Seconde requete :
UPDATE EFFECTIF INNER JOIN VERSEMENTS ON EFFECTIF.NUM = VERSEMENTS.NUM SET EFFECTIF.Totalcritere = 1 WHERE (((VERSEMENTS.Q1)=[A]) AND ((VERSEMENTS.Q2)=[B]) AND ((VERSEMENTS.Q3)=[C]) AND ((VERSEMENTS.Q4)=[D]));  
 
Sinon, si ca te renvoit 0 enregistrement c'est peut etre aussi que ta clause where fait que tu as 0 enregistrement qui corresponde.
 
Cordialement


Message édité par SuppotDeSaTante le 16-12-2008 à 23:18:19

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 24-01-2009 à 15:42:56    

bonjour
je coince sur un probleme de compactage de base access
ma version 2000 possede juste une commande "compactage " sans possibilite autre et lorsque je tente de compacter une base un message annonce  " il existe deja une table TableSysaccess.." et je suis concée
 
sos help  merci

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed