bonjour,
donc voila j'aimerais utiliser le composant TQuery pour lancer des requetes sur ma bdd.
j'aimerais savoir comment pouvoir passer des parametres a mes requetes
merci
bonjour,
donc voila j'aimerais utiliser le composant TQuery pour lancer des requetes sur ma bdd.
j'aimerais savoir comment pouvoir passer des parametres a mes requetes
merci
Salut !
Dans l'aide de C++ Builder, il y a un exemple mais voici le principe :
OU
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Query1->SQL->Clear(); Query1->SQL->Add("Select * from maBase where Champs=:Condition"); Query1->Params->Items[0]->AsInteger = MonParametre; Query1->Open();
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Query1->SQL->Clear(); Query1->SQL->Add("Select * from maBase where Champs=:Condition"); Query1->Params->ParamByName("Condition")->AsInteger = MonParametre; Query1->Open();
Tu remarqueras que pour passer un paramètre, on utilise les : suivi d'un nom qui te servira si tu utlises le second exemple, sinon, tu utilises le Items... qui lui prends la position de ton paramètre.
Aussi, dans la troisième ligne de chacun des codes, tu peux remplacer le AsInteger par un AsString, selon le type du paramètre à envoyer...
Voilà, j'espère que c'est ce que tu voulais![]()
allez, je lance un pavé dans la mare...
A quoi ça sert???
il suffit de faire un replace dans la chaine SQL!!
je pige pas...
Les requêtes paramétrées sont surtout utiles si tu les prépares avant l'exécution (TQuery->Prepare()).
Cela permet de gagner du temps lors de l'exécution de la requête.
Si tu construis dynamiquement le SQL comme tu le suggères, tu ne peux pas préparer la requête (il faudrait le faire avant chaque exécution, ce qui n'aurait aucun intérêt !).
Excusez du niveau peu élevé que j'ai en SQL ...
Moi, je crée souvent mon SQL dynamiquement mais d'après la remarque de josse95, je me pose maintenant la question à savoir quand préparer une requête ...
On m'a conseillé d'écrire le SQL en dur dans le code, comme celà, lors d'un debug, c'est plus clair ... on sait directement ce que la requête fait![]()
J'ai fait une petite appli, qui prends des paramètres en compte dans mes requêtes SQL, mais je ne les prépares jamais ! J'écris ma requête, et, je l'utilise juste derrière.
Je vois pas trop ta méthodeEnvoyé par say
![]()
Je n'ai moi non plus, jamais approfondi la notion consistant à préparer une requête.
La méthode que j'utilise consiste à avoir une séquence SQL en dur dans le le code mais plus généralement dans mon cas dans un fichier. A chaque fois que je récupère le SQL dont j'ai besoin, j'ai un traitement qui remplace automatiquement un certain nombre de paramètre avec un AnsiReplace par exemple.
en tout cas pour ma part sa me convient
en attendant j'avais proceder de la maniere suivante :
merci pour l'aide
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 AnsiString requete; // initialisation MaRequeteDeTest->Close(); MaRequeteDeTest->SQL->Clear(); // construction de la requete requete = "SELECT DISTINCT champs1, camps2 FROM table1, table2 WHERE var = "; requete += chaine; requete += ";"; // ajout de la requete MaRequeteDeTest->SQL->Add(requete); MaRequeteDeTest->Open();
Tout dépend de la taille de la base de données qu'on manipule et des performances qu'on souhaite avoir.
Pour ma part, j'ai pu voir une nette différence de performances entre les requêtes préparées et les autres sur une base de données Oracle assez conséquente. Je n'utilisais pas les TQuery mais directement OCI, cela dit, ce sont les mêmes principes.
Pour manipuler une petite base de données, c'est vrai que rien ne vaut la simplicité.
Partager