> Hi ,
> I have problems with Delphi 2.01 C/S and Informix(SE version 5)
> using SQL Links 3.5 and I-Connect 7.2 : queries with params are
> very very slow
> 1) with Query1 do
> begin
> Close;
> SQL.Clear;
> SQL.Add('select * from malade where num_malade = "127472" ');
> SQL.Open;
> end;
> answer : immediatly
> 2) num_malade := '127472';// num_malade is the primary key
> with Query1 do
> begin
> Close;
> SQL.Clear;
> SQL.Add('select * from malade where num_malade = :num_malade ');
> Params[0].AsString := num_malade;
> ou := '127472';
> SQL.Open;
> end;
> answer : after 2 or 3 minutes !!!
> This problem does not exit with Delphi-1 using SQL Links 16 bits and
> Informix-Net (16 bits) and exactly the same program.
> Thanks for help
> Merci pour toute aide
> michel .
> --------------------------------------------
> Dr. Michel CURE
> Dpartement d'Information Mdicale
> ASSOCIATION HOSPITALIERE DU BASSIN DE LONGWY
> 54350 Mont-Saint-Martin (FRANCE)
> *********************************************
Bonjour Monsieur,
Je suis un utilisateur nouveau de Delphi, et j'ai commence par l'approche
de Delphi16. Concernant votre type de probleme sachez que pour augmenter
les performances d'une requete parametree vous devriez requerir a la
methode Prepare. (voir le Guide du developpeur d'applications de bases de
donnees dont je vais vous donner quelques lignes qui pourront, je l'espere,
vous aider)
La methode Prepare envoie une requete parametree au moteur de base de
donnees pour que celui-ci l'analyse et l'optimise. Il est vivement
conseille de preparer la requete car cela augmente les performances des
requetes dynamiques qui seront executees plus d'une fois.
OBSERVATIONS
1.Si une requete a ete executee, une application doit appeler Close avant
d'appeler Prepare a nouveau.
2.Generalement, une application doit appeler Prepare une fois, par exemple
dans un evenement OnCreate de la fiche, puis initialiser les parametres
avec la propriete Params et finalement appeler Open ou ExecSQL pour
executer la requete.
2.A chaque fois que la requete doit etre executee avec differentes valeurs
de parametres, une application doit appeler Close, initialiser les valeurs
des parametres, puis executer la requete avec Open ou ExecSQL.
REMARQUES
La preparation d'une requete consomme quelques ressources de base de
donnees. C'est donc une bonne habitude de depreparer une requete lorsqu'on
ne l'utilise plus. La methode Unprepare deprepare une requete.
Lorsque vous changez le texte d'une requete au moment de l'execution,
Delphi ferme et deprepare automatiquement une requete.
ESSAYEZ ca ;-)
1.Preparez la requete dans l'evenement OnCreate de la fiche
procedure TForm1.FormCreate(Sender: TObject);
begin
Query1.Prepare;
end;
2.Definissez les parametres en reponse a un evenement. Par exemple dans
l'evenement OnClick d'un "Button1" puis utilisez le contenu d'Edit1.Text
comme parametre de substitution:
procedure TForm1.Button1Click(Sender: TObject);
begin
Query1.Close;
Query1.Params[0].AsString := Edit1.Text;
Query1.Open;
end;
PS Il ne vous reste peut-etre qu'a changer en fonction de vos besoins.
Good luck !!!