Bonjour,

Envoyé par
diablo-dz
voila j'ai trouver une solution a mon problème
Ce serait bien mais la solution proposée est horrible dans un environnement Client/Serveur et est l'archétype de ce qu'il ne faut absolument pas faire !
Oubliez les réflexes acquis avec Paradox, dbase et consorts !
Il faut minimiser le volume de données qui doit transiter entre le serveur et le(s) client(s)
cela surcharge le réseau (tout le monde n'a pas du gigabits !)
cela surcharge le client (tout le monde n'a pas i7, 16 Go de RAM et un disque SSD rapide !)
Laissez le serveur faire la recherche dans les tables et vous renvoyer que les lignes pertinentes (s'il y en a)
Il sera nettement plus efficace que votre recherche locale par code !
N'oubliez pas que pour un client çà va, pour 10 ça ralentit fortement, et au delà, c'est catastrophique.
Comme l'a dit SergioMaster, utilisez une requête paramétrée.
Enfin, le code Delphi n'en sera pas plus important, mais plus compréhensible...
Je reprends votre procédure et cela donne :
1 2 3 4 5 6 7 8 9 10 11
| procedure Txxxxx.Button1Click(Sender: TObject);
begin
if ADOQuery1.Active then
ADOQuery1.Close;
// Je suppose que la requête SQL a été initialisé à la conception
// ADOQuery1.SQL := 'SELECT * FROM EMPLOYE WHERE num_dos = :Numero';
ADOQuery1.Parameters.ParamValues['Numero'] := edit1.text;
ADOQuery1.Open;
if ADOQuery1.RecordCount = 0 then
MessageDlg('Employe non trouvé', mtInformation, [mbOK], 0);
end; |

Envoyé par
diablo-dz
Et pour effectué la modification
une simple requête sql avec le composant ADOquery
Oui ! de même pour une recherche... 

Envoyé par
diablo-dz
... ADOtable
Non, cela revient à ramener sur le poste client toutes les lignes contenus dans la table sélectionnée et c'est contraire à la règle que j'ai initialement énoncée.
S'il y a 1 milliards de lignes, le client va se retrouver paralysé. L'utilisateur va arrêter sauvagement son application, des transactions vont restées dans un état suspendu inachevé, à terme c'est la base de données qui sera bloquée, corrompue !!!
Partager