Problème de compréhension d' une requête SQL

Problème de compréhension d' une requête SQL - SQL/NoSQL - Programmation

Marsh Posté le 06-12-2003 à 01:20:33    

Bonjour,
 
Serait il possible de m' expliquer pourquoi la requète que j' écris ci dessous est mauvaise par rapport à celle dans le code de la procédure "Command1"?
 
  Cxn.Execute ("insert into codeinami ([N°INAMI], intitule) values (' Replace(UCase(Trim(Text2.Text))), "'", "''" ) ' & ' Replace(UCase(Trim(Text1.Text))), "'", "''" ) ')" )
 
 
Private Sub Command1_Click()
If Trim(Text1.Text) <> "" And Trim(Text2.Text) <> "" Then
    Cxn.Execute ("insert into codeinami ([N°INAMI], intitule) values ('" & Replace(UCase(Trim(Text2.Text)), "'", "''" ) & "','" & Replace(UCase(Trim(Text1.Text)), "'", "''" ) & "')" )
    MsgBox ("donnée ajoutée!" )
    List1.Clear
    Text2.Text = ""
    Text1.Text = ""
    IniList
    Else
    MsgBox ("Aucun texte n'a été encodé" )
End If
End Sub
 
J' ai compris que & permet de concatener les chaines de caractères mais je ne saisis pas le pourquoi de leur emplacement et particulièrement avant Replace.
Je me prends la  tête avec cette requête depuis une semaine mais je ne lacherai pas jusqu' à ce que j' ai compris ses subtilités;
 
Merci d' avance pour la réponse.
 
Orthodocs

Reply

Marsh Posté le 06-12-2003 à 01:20:33   

Reply

Marsh Posté le 06-12-2003 à 03:33:34    

Citation :

Je me prends la  tête avec cette requête depuis une semaine mais je ne lacherai pas jusqu' à ce que j' ai compris ses subtilités;


 
Tu plaisantes j'espère...

Reply

Marsh Posté le 06-12-2003 à 09:09:02    

Cher JagStang!
 
Je suis désolé mais je ne plaisante pas. Comme je te l' ai signalé je suis un autodidacte et mon activité professionnelle est aux antipodes de la science de l' informatique. Si je vous demandais de m' expliquer un article sur l' intérrêt de la coagulation intra-discale dans la lompbalgie je pense que vous auriez autant de peine que moi en informatique à comprendre tous les tenants et aboutissants. Pour moi, l' informatique c' est un loisir.J' ai très peu de temps à moi-même et mon petit plaisir c' est d' essayer d' apprendre à programmer.  
Il est évident que pour des férus d' informatique une question telle que je vient deposer fait sourire mais je peux te garantir que démarrer de 0 avec des livres et seul, cela peut parfois ressembler à un travail de galérien.
 
Amicalement
 
Orthodocs

Reply

Marsh Posté le 06-12-2003 à 09:13:31    

Il vaut mieux paraître stupide cinq minutes en posant une question que idiot tout le reste de sa vie!
 
Orthodocs

Reply

Marsh Posté le 06-12-2003 à 09:53:07    

orthodocs a écrit :

Bonjour,
 
Serait il possible de m' expliquer pourquoi la requète que j' écris ci dessous est mauvaise par rapport à celle dans le code de la procédure "Command1"?
 
  Cxn.Execute ("insert into codeinami ([N°INAMI], intitule) values (' Replace(UCase(Trim(Text2.Text))), "'", "''" ) ' & ' Replace(UCase(Trim(Text1.Text))), "'", "''" ) ')" )
 
 
Private Sub Command1_Click()
If Trim(Text1.Text) <> "" And Trim(Text2.Text) <> "" Then
    Cxn.Execute ("insert into codeinami ([N°INAMI], intitule) values ('" & Replace(UCase(Trim(Text2.Text)), "'", "''" ) & "','" & Replace(UCase(Trim(Text1.Text)), "'", "''" ) & "')" )
    MsgBox ("donnée ajoutée!" )
    List1.Clear
    Text2.Text = ""
    Text1.Text = ""
    IniList
    Else
    MsgBox ("Aucun texte n'a été encodé" )
End If
End Sub
 
J' ai compris que & permet de concatener les chaines de caractères mais je ne saisis pas le pourquoi de leur emplacement et particulièrement avant Replace.
Je me prends la  tête avec cette requête depuis une semaine mais je ne lacherai pas jusqu' à ce que j' ai compris ses subtilités;
 
Merci d' avance pour la réponse.
 
Orthodocs
 


 
pour faire simple et rapide ...
dans le corps de la fonction Command1_Click() tu construis une chaine de caractère, qui contiendra au final la requete que tu vas envoyer a ta base de données.
cette chaine se décompose en plusieurs parties :
- les parties "statiques" que tu écris toi meme entre double quotes
- les parties dynamiques que tu vas demander à faire exécuter par la machine au runtime
 
tu vas donc concaténer les parties statiques aux parties dynamiques

Reply

Marsh Posté le 06-12-2003 à 12:40:35    

orthodocs a écrit :

Cher JagStang!
 
Je suis désolé mais je ne plaisante pas. Comme je te l' ai signalé je suis un autodidacte et mon activité professionnelle est aux antipodes de la science de l' informatique. Si je vous demandais de m' expliquer un article sur l' intérrêt de la coagulation intra-discale dans la lompbalgie je pense que vous auriez autant de peine que moi en informatique à comprendre tous les tenants et aboutissants. Pour moi, l' informatique c' est un loisir.J' ai très peu de temps à moi-même et mon petit plaisir c' est d' essayer d' apprendre à programmer.  
Il est évident que pour des férus d' informatique une question telle que je vient deposer fait sourire mais je peux te garantir que démarrer de 0 avec des livres et seul, cela peut parfois ressembler à un travail de galérien.
 
Amicalement
 
Orthodocs


 
Faut pas faire attention, y'a bcp de têtes enflées sur ce forum. Mais y'a aussi des gens qui répondent intelligement, faut pas hésiter à poser tes questions :D

Reply

Marsh Posté le 06-12-2003 à 15:33:22    

c'est peut-être une occupation d'amateur pour toi, mais je te conseille vivement de lire un livre ou deux. tu auras beaucoup plus de plaisir. C'est un peu comme jouer aux échecs sans savoir les règles du jeu.
 
Sinon, pour la "coagulation intra-discale dans la lompbalgie", c'est un domaine que je connais pas, et, par conséquent je laisse le soin aux professionnels de ce domaine d'en parler avec toi
 
bon week end

Reply

Marsh Posté le 06-12-2003 à 18:43:00    

En ce qui concerne la lecture, je fais mon possible. Si tu as un conseil, j' y preterai une particulière attention.  
Ceci dit, si la seule curiosité qui nous pousse à découvrir de nouveaux horizons dans la vie fixe ses frontières aux limites de nos compétences professionnelles, la vie serait bien triste. N' as tu pas un violon d' ingre? Tu fais de la moto je pense? Ne t' es tu jamais interessé au fonctionnement de ta belle machine? pourtant la mécanique est un domaine plutôt éloigné des préocupations quotidiennes d' un informatitien, non?
 
L' informatique serait elle un domaine réservé aux initiés?
 
Vraiment je ne comprends pas ta réaction ou alors il faut que je revoie la finalité d' un forum d' entre-aide!!!

Reply

Marsh Posté le 06-12-2003 à 18:45:12    

chaica a écrit :


 
Faut pas faire attention, y'a bcp de têtes enflées sur ce forum. Mais y'a aussi des gens qui répondent intelligement, faut pas hésiter à poser tes questions :D


Merci de me laisser une lueur d' espoir.

Reply

Marsh Posté le 06-12-2003 à 19:10:24    

Pour mieux comprendre, fais un MsgBox() de tout ce qui est dans le Cxn.Execute(). Tu verras la requête telle qu'elle est exécutée :)

Reply

Marsh Posté le 06-12-2003 à 19:10:24   

Reply

Marsh Posté le 06-12-2003 à 19:17:57    

JagStang > [:rofl] t'en as péché un bon gros là :D

Reply

Marsh Posté le 07-12-2003 à 16:17:15    

entraide ne veux pas dire cours privé. un minimum de recherches personnelles DOIVENT être faites avant de poster.
 

Reply

Marsh Posté le 08-12-2003 à 09:55:00    

Bon!
 
Nous nous arreterons ici. Cette polémique stérile ne nous mènera à rien et la finalité nous laisse un goût amer dans la bouche.
Je présumerai que cette discussion a débuter sur un malentendu.
 
En tous les cas, merci à tous ceux qui ont daigné répondre à ma question.
 
Amicalement
 
Orthodocs

Reply

Marsh Posté le 08-12-2003 à 22:11:58    

JagStang & Taz : J'ai même pas besoin de dire ce que je pense de vos interventions déplorables, vous le savez déjà. Retournez-jouer dans les topics qui vous intéressent, et laissez les débutants apprendre tranquillement. Vous êtes vraiment trop nazes.
 
Orthodocs > Bienvenue sur ce forum qui à mon avis n'est pas ce qu'il y a de mieu pour commencer. En effet, il y a quelques personnes comme moi qui s'efforcent de répondre aux débutants, parceque j'aime bien expliquer les bases à quelquequ'un, et le voir voler de ses propres ailes au bout de 15 jours, plutôt que perdre mon temps à aider une personne qui maîtrise le sujet et qui a la flème de chercher une réponse avant de chercher (ça c'est moi :D et je suis tout à fait conscient que la plupart de mes questions sont chiantes :D)
 
Bon, alors, on va commencer par le début.
 
Comme tu l'as déjà compris, le & sert en VB pour concaténer des chaînes de caractère.
 
Ainsi, pour concaténer des chaînes de caractère, il faut que de chaque côté, il y ait des chaînes de caractères... Jusque là, je pense que tu suis ;)
 
Une chaîne de caractères en VB est délimitée par des guillements (" ).
En SQL, où l'oppérateur de concaténation est le plus (+), les chaînes sont délimitée par des quote (').
 
Donc, analysons ta ligne :
 
Cxn.Execute ("insert into codeinami ([N°INAMI], intitule) values (' Replace(UCase(Trim(Text2.Text))), "'", "''") ' & ' Replace(UCase(Trim(Text1.Text))), "'", "''") ')")
 
=> On voit qu'il y a un problème. Tes chaînes ne s'ouvrent et se ferment pas autour de l'oppérateur de concaténation, mais autour des quotes, que VB ne comprend pas (pour lui, la quote sert à mettre en commentaires) D'ailleurs, logiquement, dans VB, toute la fin de ta ligne doit être verte si je ne m'abuse.
 
Ta requête me semble un peu "compliquée" pour débuter à maîtriser cet aspect. On va donc la réécrire pour le moment sans tenir compte des échappements de quote (ça sert à au moteur SQL pour ne pas planter au cas où se trouve une quote dans une chaîne, puisqu'il croit que la chaîne s'arrête à ce moment), ni la mise en forme (majuscules, etc.)
 
On a donc, ta requête toujours fausse :
 
Cxn.Execute ("insert into codeinami ([N°INAMI], intitule) values (' Text2.Text ' & ' Text1.Text')")
 
Donc, là, ça ne fonctionne toujours pas, puisque tu envoies à SQL :
 
une chaîne de caractères " Text2.Text "
puis un symbole & qu'il ne comprends pas
puis une chaîne " Text1.Text "
 
Donc, il faut corriger tes chaînes pour que :
1) Tu n'écrires pas "Textn.Text" dans la base, mais sa valeur
2) Tu n'envoie plus un "&" au moteur SQL, puisqu'il ne le comprendra pas
 
Pour le moment, on va ignorer le code SQL. On verra ça plus tard. On va juste traîter le point 1.
Souvient toi : le "&" doit se situer entre des chaînes de caractère.
 
La ligne devient donc :
 
Cxn.Execute ("insert into codeinami ([N°INAMI], intitule) values ('" & Text2.Text & "' & '" & Text1.Text & "')")
 
A partir de ce moment, tu as donc une chaîne constituée de :
 
la chapine : insert into codeinami ([N°INAMI], intitule) values ('
puis la valeur de : Text2.Text
la chaîne : ' & '
puis la valeur de : Text1.Text
Et enfin, la chaîne : ')
 
Mettons que tu aies mis "toto" dans Text2.Text et "titi" dans Text1.Text. Tu envoies donc à SQL la requête :
 
insert into codeinami ([N°INAMI], intitule) values ('toto' & 'titi')
 
Cette fois, c'est presque bon.
 
Seulement, lorsque tu stipules une liste, en SQL, il faut utiliser la virgule (,) comme séparateur, et non le &.
 
Donc il fait corriger la requête pour qu'elle devienne :
 
insert into codeinami ([N°INAMI], intitule) values ('toto', 'titi')
 
Je te laisse faire cette correction au cas où tu ne t'en sorte pas. (pour ne pas avoir vu cette erreur fondamentale, j'en déduis que tu es en effet très débutant, et que tu n'as aucune base. je dois te féliciter pour ton choix du VB pour apprendre, puisqu'il est parfaitement adapté aux gens qui débute : syntaxe assez simple, pas trop restrictif, et très bien documenté).
 
N'hésite pas à me reposer des questions s'il y a un truc qui t'échappe, ou si tu ne t'en sors pas.
 
Si messieurs les emmerdeurs veulent bien te laisser tranquille ici, je t'invite à me répondre ici. Sinon, tu peux me trouver aussi sur http://forum.zozoll-online.com (y'a presque que moi qui poste là, et je suis admin, donc tu seras tranquille ;))


Message édité par MagicBuzz le 08-12-2003 à 22:15:10
Reply

Marsh Posté le 08-12-2003 à 22:40:23    

MagicBuzz a écrit :


 
Si messieurs les emmerdeurs veulent bien te laisser tranquille ici, je t'invite à me répondre ici. Sinon, tu peux me trouver aussi sur http://forum.zozoll-online.com (y'a presque que moi qui poste là, et je suis admin, donc tu seras tranquille ;))


 
Pfffou, j'en reviens, c'est lent dis-donc... On voit que c'est de l'ASP... [:ddr555]

Reply

Marsh Posté le 08-12-2003 à 22:44:26    

biensur. les temps de génération sont inférieurs à ceux de ce forum :na:
 
nan, c'est l'admin qui est encore en train de bouffer toute la BP avec chais pas quoi... d'habitude au contraire, c'est rigoureusement instantané.

Reply

Marsh Posté le 08-12-2003 à 22:45:38    

pis de toute façon, d'ici quelques pas longtemps (5 ou 6 sciècles :ange:) il sera en C# (enfin... en VB.NET, mais on peut pas tout avoir... [:spamafote] )


Message édité par MagicBuzz le 08-12-2003 à 22:45:53
Reply

Marsh Posté le 08-12-2003 à 23:32:25    

MagicBuzz a écrit :

pis de toute façon, d'ici quelques pas longtemps (5 ou 6 sciècles :ange:) il sera en C# (enfin... en VB.NET, mais on peut pas tout avoir... [:spamafote] )


 
Bah, de toutes manières, c'était juste pour te charrier un peu...  :D

Reply

Marsh Posté le 09-12-2003 à 19:52:54    

Vraiment, vraiment un tout grand merci. Tout d' abord, tu ne t' imagines comme ton message m' a soulagé. J' essaye de voler de mes propres ailes et souvent, tel Icare, je me brûle quelque plumes.  
Ce que tu vient de m' enseigner et de m' apprendre me permettra de progresser énormément dans le développement de mon application. La limpidité de tes explications sont à la hauteur d' un enseignement d' élite. Tu as pu saisir le problème qui me hantait et réussis à te mettre à mon niveau pour que je comprenne les tenants et aboutissants. Et cela, c' est digne des plus grands didactes (j' ai enseigné des matières difficiles à des étudiants et connais les difficultés pour un spécialiste à faire comprendre une matière tout en s' adaptant au niveau de l' élève).
Tu  honnores ce forum et je ne te remercierai jamais asser de m' avoir donné à nouveau confiance à un système de communication que je testais pour la première fois.
 
Amicalement et à ton service si un jour je peux t' aider.
 
Orthodocs

Reply

Marsh Posté le 09-12-2003 à 20:42:11    

MagicBuzz a écrit :

pis de toute façon, d'ici quelques pas longtemps (5 ou 6 sciècles :ange:) il sera en C# (enfin... en VB.NET, mais on peut pas tout avoir... [:spamafote] )


 
si tu veux un coup de main pour du C#... :D

Reply

Marsh Posté le 09-12-2003 à 21:47:04    

orthodocs a écrit :

Vraiment, vraiment un tout grand merci. Tout d' abord, tu ne t' imagines comme ton message m' a soulagé. J' essaye de voler de mes propres ailes et souvent, tel Icare, je me brûle quelque plumes.  
Ce que tu vient de m' enseigner et de m' apprendre me permettra de progresser énormément dans le développement de mon application. La limpidité de tes explications sont à la hauteur d' un enseignement d' élite. Tu as pu saisir le problème qui me hantait et réussis à te mettre à mon niveau pour que je comprenne les tenants et aboutissants. Et cela, c' est digne des plus grands didactes (j' ai enseigné des matières difficiles à des étudiants et connais les difficultés pour un spécialiste à faire comprendre une matière tout en s' adaptant au niveau de l' élève).
Tu  honnores ce forum et je ne te remercierai jamais asser de m' avoir donné à nouveau confiance à un système de communication que je testais pour la première fois.
 
Amicalement et à ton service si un jour je peux t' aider.
 
Orthodocs


plus de doutes, c'est un troll  :ouch:


---------------
Cdlt,
Reply

Marsh Posté le 09-12-2003 à 21:50:24    

d-é-g-a-g-e
 
merci

Reply

Marsh Posté le 09-12-2003 à 22:18:23    

c'est pas parce que tu t'es cassé le culs pour répondre à un mec qui déconne que tu dois etre agressif ;)


---------------
Cdlt,
Reply

Marsh Posté le 09-12-2003 à 22:20:37    

[:spamafote]  
c'est pas tres français mais je me comprends :lol:


---------------
Cdlt,
Reply

Marsh Posté le 09-12-2003 à 22:20:52    

frandon a écrit :

c'est pas parce que tu t'es cassé le culs pour répondre à un mec qui déconne que tu dois etre agressif ;)


 
heu, je suis pas sûr du tout qu'il déconne. IL a juste l'air d'être d'une autre génération, stout (et encore c'est pas sûr non plus).

Reply

Marsh Posté le 09-12-2003 à 22:26:16    

je crois pas car il fait des fautes de temps en temps...
certaines phrases sont mal tournées et lourdes.
il en fait des tonnes quoi, c'est pourquoi je penche pour le troll.
 
bon, de toutes façons, je vais pas squatter ici tres longtemps
 
:hello:


---------------
Cdlt,
Reply

Marsh Posté le 09-12-2003 à 22:40:26    

Que répondre... Tu crois que tu t'en sortais mieu quand t'as débuté ? Alors si t'as pas envie de filer un coup de main, c'est ton choix, on va pas forcer les gens à partager leurs connaissances. Mais laisse les autres tranquille dans ce cas.
 
C'est pas croyable ça !

Reply

Marsh Posté le 10-12-2003 à 08:18:49    

c'est pas ton coup de main ni ta logue et claire explication qui me faisait marrer.
tu te meprends deouyis le debut :(


---------------
Cdlt,
Reply

Marsh Posté le 10-12-2003 à 10:23:36    

Non je ne me méprends pas. Y'a un gars qui n'y connait rien et qui essaie d'apprendre, et qui a déjà pas mal cherché avant de poser la question.
Sauf qu'il n'a jamais eu de formation dans le domaine, donc la notion d'algo ou de "syntaxe" lui est totalement inconnue. C'est normal que ce bug gros comme un éléphant dans une tasse à café ne lui aie pas sauté aux yeux, tout comme je trouve anormal qu'une poignée de personnes se foutent de lui sous prétexte que "c'est un boulet".
Une fois qu'il aura compris les rudiments, il aura les bases nécessaire pour s'en sortir tout seul. Seulement, actuellement, un simple problème de femeture de chaîne, même en prenant un bon bouquin et un didacticiel de base, y'a pas moyen de l'inventer, et c'est jamais écrit nul part.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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