DenisPhil
Messages postés20Date d'inscriptionmardi 13 mai 2008StatutMembreDernière intervention21 août 2009
-
22 juil. 2009 à 15:20
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 2021
-
28 juil. 2009 à 10:45
Bonjour à tous.
Dans une table Acces, un champ peut-il contenir des quotes ? Une requête du genre :
insert into Table1 (ch1, ch2) values ('Je l'ai trouvé', 'Tu l'as trouvé'); ne fonctionne pas car les quotes intérieures aux textes sont considérées comme des caractères de début/fin des textes par Access...
Alors, comment 'protéger' ces quotes ?
Avec MYSQL, il suffit d'insérer un antislash ('\') devant la quote à protéger mais ce truc ne fonctionne pas avec Access...
Merci d'avance
A voir également:
Insérer des quotes (') dans une info sous Access ?
DenisPhil
Messages postés20Date d'inscriptionmardi 13 mai 2008StatutMembreDernière intervention21 août 2009 22 juil. 2009 à 21:08
Bonsoir Cantador,
j'ai essayé de mettre les textes entre guillemets (comme tu le dis) mais ça ne marche pas : Acces refuse.
Il y a bien la solution de secours :
- remplacer le (ou les) quote(s) par des arobas (@), par exemple, au moment de l'insertion du texte dans la table et
- faire la manoeuvre inverse au moment de son utilisation mas je trouve le procédé (qui fonctionne) un peu lourd !
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 22 juil. 2009 à 22:11
un petit truc..
tu crées ta requête avec l'assitant d'access et lorsque celle-ci fonctionne bien, tu la transformes en SQL (menu access)
et tu récupères la bonne syntaxe..
DenisPhil
Messages postés20Date d'inscriptionmardi 13 mai 2008StatutMembreDernière intervention21 août 2009 23 juil. 2009 à 00:36
Bonsoir,
je ne dois pas être suffisamment informé des possibilités d'Access...
- J'ai bien créé, avec l'assistant d'Access, une table, en décrivant les champs (2 dans ce cas) et en saisissant des valeurs, tj avec l'assistant.
- A l'aide de la 'formule' créée par Access, j'ai saisi des textes comprenant des quotes et ils ont été acceptés;
- J'ai encore le formulaire de saisie dans cette table mais je n'ai pas trouvé comment visualiser une requête (un 'insert' dans ce cas) pour insérer des données !
DenisPhil
Messages postés20Date d'inscriptionmardi 13 mai 2008StatutMembreDernière intervention21 août 2009 23 juil. 2009 à 17:17
Bonjour,
j'ai fait une 'macro' dans Access qui 'ExecSQL' et le sql est :
insert into Endereçamento (Nome, Cidade) values ('gigi', 'ils l'ont cherché'); - le 2e texte contient une quote : Access me dit qu'il y a une erreur (normal !);
- avec un 2e texte = 'ils l''ont cherché', avec 2 quotes : ça passe. Access accepte et le résultat en consultation est : 'ils l'ont cherché';
- la solution parait être de doubler les quotes avant l'insertion dans la table Access...
- en Delphi, avec un doublement des quotes rencontrées, l'insert se passe bien, c'est déjà un progrès MAIS la double quote reste, elle n'est pas transformée en simple quote comme avec la 'macro' d'Access...
Je continue mes essais...
Merci de ton aide.
DenisPhil
Messages postés20Date d'inscriptionmardi 13 mai 2008StatutMembreDernière intervention21 août 2009 26 juil. 2009 à 15:02
Bonjour Cantador,
merci de t'intéresser à mon pb... même le dimanche.
En fait, j'ai un fichier séquentiel, externe au programme et de format '.txt', que je lis et avec lequel je crée une table Access pour une utilisation ultérieure.
J'ai donc testé ta solution et voila le résultat que j'obtiens :
- avec le 'vrai' SQL suivant : [i]with ADOQuery1.SQL do begin
Clear;
Add('insert into Messages (langue, Numess, texte)');
Add(' values (:Vlan, :Vmes, :Vtxt)'); end;
ADOQuery1.ParamCheck := True;
ADOQuery1.Parameters.ParamByName('Vlan').Value := LG;
ADOQuery1.Parameters.ParamByName('Vmes').Value := copy(ligne, 3, 4);
txt := StringReplace(copy(ligne, 7, p-7), QUOTE, QUOTE_DOUBLE, Mode);
ADOQuery1.Parameters.ParamByName('Vtxt').Value := txt;
try
ADOQuery1.ExecSQL;
except/i ... etc
les double-quotes que j'ai insérées dans le texte avant l'insert, restent dans la base Access créée ! Rien de changé donc.
- Mais, avec le SQL suivant :
[i]with ADOQuery1.SQL do begin
Clear;
Add('insert into Messages (langue, Numess, texte)');
Add(' values (:Vlan, :Vmes, :Vtxt)'); end;
ADOQuery1.ParamCheck : = True;
ADOQuery1.Parameters.ParamByName('Vlan').Value := LG;
ADOQuery1.Parameters.ParamByName('Vmes').Value := copy(ligne, 3, 4);
// txt := StringReplace(copy(ligne, 7, p-7), QUOTE, QUOTE_DOUBLE, Mode);
ADOQuery1.Parameters.ParamByName('Vtxt').Value := 'Je l''ai trouvé';
try
ADOQuery1.ExecSQL;
except/i ... etc
le texte renseigné redevient mono-quote (comme dans ton exemple) dans la base Access créée !
Le pb viendrait donc d'une différence de traitement entre
- un champ en clair et
- un champ contenu dans une variable.
Access ferait la différence entre ces deux alimentations de champs !!!
Ou bien, c'est Delphi qui crée différemment les deux champs ???
Encore merci de ton aide et bon dimanche.
Denis
DenisPhil
Messages postés20Date d'inscriptionmardi 13 mai 2008StatutMembreDernière intervention21 août 2009 26 juil. 2009 à 15:59
(re)Bonjour,
dans ton dernier message, tu dis "une solution sans QuotedStr" et je crois que tu as raison : c'est cette fonction qui fait pb.
Avec le SQL suivant (extrait) : ...
Add(QuotedStr(txt) + VIRG); ...
les doubles quotes restent intactes dans la base Access mais
Avec le SQL suivant : ...
Add(QUOTE + txt + QUOTE + VIRG); ...
(j'ai défini QUOTE et VIRG comme constantes)
les doubles quotes redeviennent simples ! C'est gagné !
Je crois que j'ai résolu mon pb avec ton aide.
Merci et à +
Denis