code SQL dans une requete ....[pu d'erreur inside !!!] - Delphi/Pascal - Programmation
Marsh Posté le 02-07-2003 à 11:13:01
as tu verifie la syntaxe ?
ce ne serai pas qqc du style
Code :
|
@->--
Marsh Posté le 02-07-2003 à 11:28:24
Non, je sais pas si ma syntaxe est bonne mais latienne n'a pas l'air plus fructueuse !!!
Et je mets le code directement dans la requête (j'utilise D5 au fait)
Mais j'ai peur qu'on ne puisse pas faire 2 fonctions à la suite dans la requête (le composant TQuery j'entends)
Marsh Posté le 02-07-2003 à 11:39:33
C est vrai que le code si dessus n a pas ete utlise pour un TQuery. Je pense c est de plus en plus dut a la syntaxe. J y pense le code si dessus est pour un base de type access donc si tu utilises interbase ca "pourrait" etre different (I am guessing here).
Fais un tour sur www.delphi.about.com je pense que tu trouveras des info la bas.
@->--
Marsh Posté le 02-07-2003 à 11:47:23
le duke a écrit : |
: blabla1 c'est quoi ? un param ? faut pas d'espace il me semble
mais ça serait plus simple de mettre la variable directement dans la requête, non ?
Marsh Posté le 02-07-2003 à 11:48:23
krzAramis a écrit : |
j'utilise des requêtes avec le composant Query moi
Query1.SQL.Text := Format('DELETE FROM BIDULE WHERE Truc = %s AND i = %d', [QuotedStr(chaine), Entier]);
Query1.Execute;
Marsh Posté le 02-07-2003 à 12:05:02
antp a écrit : |
Serieux antp t as une dent voire 2 contre moi ou quoi ? je me suis mal exprimer sur le post precedent. D habitude j utilise pas de TQuery mais directement des TADOCommand, TADOConnection, TTAble comme un gros boeuf. Or avec ces element il est possible d effacer d ajouter etc avec des commandes du style delete, post, insert etc. Au fur a mesure de mon projet de fin d annee je me suis rendu compte que ces commandes ADO disons sont bien moins efficace que un coup de SQL. Donc mon code a commence a contenir de plus en plus de truck du style:
Citation : cs := 'qqc'; |
Mais je dois reconnaitre que finalement le TQuery aurai pu de ce point vue correspondre a mes attentes. donc 'so much' pour avoir lu la page en diagonale et mettre fait cruxifier par sieur antp
Maintenant sommes nous tous d accord sur le fait que son probleme vient surement d un probleme de syntaxe ?
@->--
Marsh Posté le 02-07-2003 à 12:07:14
probablement, oui, mais l'exemple que tu lui donnais ressemble à un mix entre un delete et un insert
Marsh Posté le 02-07-2003 à 12:15:01
antp a écrit : probablement, oui, mais l'exemple que tu lui donnais ressemble à un mix entre un delete et un insert |
En effet a force de faire des commandes SQL je me suis appercu que la 'logique syntaxique' pour les base de donnees access se ressemblait. il est vrai que la version INSERT de l exemple ci dessus marche tres bien. J en avais deduit que le delete marcherai de la meme facon 'my bad' donc.
Pour en revenir a ce que je disais precedent. si tu fais un insert avec un TTable (ou bien un compo equivalent) si un ou plusieur de tes champs sont vides ben cacahouete super plantage pour non integrite de la base !! alors qu avec SQL il le fait et il se tait ! ca c est cool car ca ma permis de faire en sorte que l utilisateur n est pas tous (trop) de champs a remplir a la main . voila mon experience perso.
@->--
Marsh Posté le 02-07-2003 à 14:17:34
Alors qqs précision et la solution en fin de post !!!
TTable, c à eviter .... mais moi ce que j'en dit ...
J'utilise de la base SQL 7/2000.
Et le pb venait du fait que je ne peux pas faire 2 "actions" sur le cofde d'1 query donc 2 solutions se posaient à moi :
mettre 2 query : c pas la fête non plus !!!!!
Executer dynamiquement les 2 actions dans un TQuery vierge :
du style
Query1.SQL.Text := 'INSERT INTO ma_table %13%16 (si je raconte pas de connerie ...)VALUES ('VALUE 1', 'VALUE 2');
Query1.execute;
Query1.SQL.Text := 'DELETE FROM ma_table' + %13%16 + 'WHERE ROWS1 =: VALUE 1';
Query1.execute;
Et pis voilou !!!
Merci bien les gars !!
Marsh Posté le 03-07-2003 à 17:00:02
Bon ben j'ai voulu faire mon malin et au final ça marche pas mieux !!!!
Enfin ça marche pas trop mal mais lors de la 2nd requête (le DELETE), il me sort une erreur de derrière les fagots disant :
"Qryblabla : champ non trouvé"
Le pb c que cette query n'a rien à voir avec ce que je veux faire hormis qu'elle tape sur la même table que la requête dont je vous parlais precedemment (celle où je fais mon INSERT et ensuite mon DELETE)
Donc j'ai regardé pk cette query (qryblabla) faisait chier et elle était ouverte (active si vous préférez) dès le début de mon appli .
Donc qd je faisait mon DELETE, elle ne voyais plus un champ donc elle disait : OLà !!!!!
Alors je l'ai fermé juste avant mon code et réouverte juste après : mais rien 'y fait !!!
J'ai toujours la même erreur : qryblabla :
"champ non trouvé" !!!!
Vous savez d'où ça pourrait venir ?
Marsh Posté le 03-07-2003 à 17:30:11
comme je l'ai déjà dit, la syntaxe de "WHERE ROWS1 =: VALUE 1" me semble hyper louche.
Puis si "Value 1" est un paramètre (avec un espace dans le nom ça passera jamais) il faut quand même que tu assignes ce paramètre quelque part...
laisse donc tomber ce paramètre et met directement la valeur dans la requête comme montré dans mon exemple avec des Format
Marsh Posté le 03-07-2003 à 17:33:03
ben ouais c ce que je fais !!
VALUE 1 : ct pour dire : si tu préfère
VALUE 1 = 'value'
alors que faïre ?
Marsh Posté le 03-07-2003 à 17:35:54
poste ton code exact parce que c'est pas clair là
Marsh Posté le 03-07-2003 à 17:42:46
ben c chaud !!!
Je peux poster ça :
QryTest.SQL.Clear;
QryTest.SQL.Add('INSERT INTO ATELIER');
QryTest.SQL.Add('VALUES (''ATE99'', ''ATELIER99'')');
QryTest.ExecSQL;
QryTest.SQL.Clear;
QryTest.SQL.Add('DELETE FROM ATELIER');
QryTest.SQL.Add('WHERE CATELIER =: ''ATE99''');
QryTest.ExecSQL;
QryTest.SQL.Clear;
Ensuite : qrytest tape sur la table denommée ATELIER.
une autre query tape aussi sur cette base : qryAtelier.
QryAtelier est directement rattachée à un tDBLookupComboBox.
Ce lookup est dans un forme (autre que celle où j'ai tiré le code ci-dessus : celle-là c le login) qui n'est créer qu'après dans l'utilisation de l'appli.
La qryatelier n'est donc active que dans une TForm créer plus tard .
Pourtant, lors du 2nd QryTest.ExecSQL (celui du code que j'ai posté), une erreur apparait :
QryAtelier : Champ non trouvé !!!!!!
ALors d'où c ty qu'ça pourait v'nir ?
Marsh Posté le 03-07-2003 à 17:47:53
WHERE CATELIER =: ''ATE99''
c'est pas du SQL ça, pourquoi tu fous un ":", je capte pas
Marsh Posté le 03-07-2003 à 17:52:37
hummm .....
Bon : serais-je con à vie ou penses-tu que j'ai une chance de m'en sortir ?
Parce que ça marche ..............
[Degout d'avoir perdu une AM à ça inside ]
Marsh Posté le 02-07-2003 à 11:01:36
Salut,
voilà je voudrais tester l'accessibilité d'une base en essayant d'insérer un enregistrement et tout de suit après de l'effacer (pour pas pourir la base !!)
Or le
INSERT INTO TABLE_NAME
VALUES ('Blabla1', 'Blabla2')
ne pose pas de pb.
Ce qui en pose plus c que j'aimerais juste en dessous écrire
DELETE FROM table_Name
WHERE rows = : blabla1
Mais il me dit que c pas bon !!!
Alors qu'est-ce que je fais ?
Vue que ces valeurs ne correspondent à rien je le code en dur, et ensuite, et merde : où est-ce que je me suis gouré ?
Message édité par le duke le 03-07-2003 à 17:54:41