Access refuse ! - SQL/NoSQL - Programmation
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 !
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
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.
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
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 ?
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.
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.
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".
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 !
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) ²
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...
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... |
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.
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
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).
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
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 ?
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
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
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 !
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
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
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