code SQL dans une requete ....[pu d'erreur inside !!!]

code SQL dans une requete ....[pu d'erreur inside !!!] - Delphi/Pascal - Programmation

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
Reply

Marsh Posté le 02-07-2003 à 11:01:36   

Reply

Marsh Posté le 02-07-2003 à 11:13:01    

as tu verifie la syntaxe ?
 
ce ne serai pas qqc du style

Code :
  1. cs := 'DELETE FROM ta_table (champ1, champ2)'+
  2. 'WHERE VALUES (:value1, :value2)';
  3. ADOCommandText := cs;
  4. ADOCommandText.Parameters.ParamByName('value1').Value := value1;
  5. ADOCommandText.Parameters.ParamByName('value2').Value := value2;
  6. Execute;


 
@->--


Message édité par KrzAramis le 02-07-2003 à 11:13:39
Reply

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)

Reply

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.
 
 [:ddr555]  
@->--

Reply

Marsh Posté le 02-07-2003 à 11:46:34    

une piste (je pense)  ici[:ddr555]  
 
Mais bon c est surtout base sur le composant query alors aue moi je prefere les bonnes veille comandes SQL. Chacun ses gouts  :whistle:  
 
J espere que ca t aide
 
@->--

Reply

Marsh Posté le 02-07-2003 à 11:47:23    

le duke a écrit :


DELETE FROM table_Name
WHERE rows = : blabla1


 
: 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 ?


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 02-07-2003 à 11:48:23    

krzAramis a écrit :


Mais bon c est surtout base sur le composant query alors aue moi je prefere les bonnes veille comandes SQL. Chacun ses gouts  :whistle:  


 
:??: 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;


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 02-07-2003 à 12:05:02    

antp 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;
 


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';
CommandText := cs;
Execute;
//and so on


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 ?
 
@->--

Reply

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 :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

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 :D


 
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  [:kamool] ! 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  [:tozwarrior] . voila mon experience perso.
 
@->--

Reply

Marsh Posté le 02-07-2003 à 12:15:01   

Reply

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 !!

Reply

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 ?

Reply

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 ;)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

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 ?

Reply

Marsh Posté le 03-07-2003 à 17:35:54    

poste ton code exact parce que c'est pas clair là :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

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 ?  

Reply

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


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

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 ..............
 
 
 
 :cry:  
 
 
 
[Degout d'avoir perdu une AM à ça inside ]

Reply

Sujets relatifs:

Leave a Replay

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