begin process at 2012 02 11 16:42:26
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Delphi

 > 

Base de données

 > 

SQL Server

 > 

Problème de lenteur des réquêtes SQL avec Delphi 7


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème de lenteur des réquêtes SQL avec Delphi 7

mardi 20 juillet 2010 à 09:17:29 | Problème de lenteur des réquêtes SQL avec Delphi 7

agellos

Amis programmeurs, bonjour,

cela doit être la trois ou quatrième fois que je laisse un message sur un forum de ma vie, pour un problème de programmation, car j'ai toujours trouvé une réponse quelque part enfoui dans le net. Mais là, je cale, sur une chose qui me paraît pourtant simple.

J'ai un projet à faire sous Delphi 7, avec une communication avec une base de données locale (MS SQL 2000). Dans cette base de données, se trouvent plusieurs tables (organisées pareilles). Chaque table est conséquente, puisque j'en ai une qui atteint maintenant les 150 millions de lignes, et cela ne cesse d'augmenter.

Dans mon application Delphi j'aimerais récupérer tous les numéros id qui correspondent aux critères de recherche de l'utilisateur. Pour ce faire, j'utilise un SELECT, mais mon application plante, car la recherche des éléments est trop longue (par ailleurs, la mémoire programme utilisée passe de 9 Mo à 50 Mo en peu de temps).

Donc j'aimerais savoir si quelqu'un peu me dire, s'il existe une solution rapide pour récupérer ces id ?

Voici le bout de code qui récupère les id :

Code Delphi :
requeteSQL:='SELECT '+produit+'.id FROM '+produit+' WHERE (id_produit = '+inttostr(numIdProduit)+') AND (id_machine = '+inttostr(numMachine)+') AND (id_mesure = '+inttostr(numMesure)+')'; 
with Query do begin
    Close;
    SQL.Clear;
    SQL.Text:=requeteSQL;
    Open;
    nbRecords:=RecordCount;
    if nbRecords<>0 then begin
      log.Caption:=log.Caption+#13+'Records id : '+IntToStr(nbRecords)+' lignes';
      while not Eof do begin
        numId:=FieldByName('id').AsInteger;
        Next;
      end;
    end else begin
      log.Caption:=log.Caption+#13+'!!!Recherche... => données inexistentes !!!';
    end;
    Close;
  end;


requeteSQL => String
Query => TADOQuery


Au préalable, je récupère quatre informations : le nom de la table (var produit), un numéro de produit (var numIdProduit), un numéro de machine (var numIdMachine) et un numéro de type de mesure (var numIdMesure)
mais la requêtes ne renvoie jamais mon résultat (car mon appli plante).

Voici l'organisation de ma table dans laquelle je fait ma recherche :


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ id + id_produit + id_machine + id_mesure + autres_donnees +
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+_1__+_15_________+_16_________+_2_________+................+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ etc.......................................................+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++




Pour de plus amples informations, je peux répondre à vos questions, si je ne suis pas assez clair.

Merci d'@vance

@++;

P.S : je suis débutant en Delphi
mardi 20 juillet 2010 à 18:52:38 | Re : Problème de lenteur des réquêtes SQL avec Delphi 7

WhiteHippo

Membre Club
Bonjour

Pourquoi utilises-tu un FieldByName ? Tu sais déjà que la requete ne contiendra qu'une seule colonne de résultat (de part ton SELECT), donc, il me semble qu'un accès direct à Fields serait plus efficace (Même si, cela ne solutionnera pas entièrement ton problème) plutot que de demander à chaque fois de rechercher où se trouve le champ Id :
Code Delphi :
NumId := Fields[0].Value

Cordialement.
"L'imagination est plus importante que le savoir." Albert Einstein
lundi 26 juillet 2010 à 20:14:29 | Re : Problème de lenteur des réquêtes SQL avec Delphi 7

Delphiprog

Administrateur CodeS-SourceS
Bonsoir,

Pourrais-tu préciser quels sont les index déclarés sur les tables objets des recherches avec la requête ci-dessus ?
S'il n'y en a pas, cela explique en grande partie la lenteur des requêtes...

D'autre part, à quoi cela sert-il de parcourir l'ensemble de données renvoyé par la requête si tu n'en fait rien ?
Code Delphi :
while not Eof do begin
  numId:=FieldByName('id').AsInteger;
  Next;
end;



May Delphi be with you

Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.


Cette discussion est classée dans : sql, recherche, delphi, id, produit


Répondre à ce message

Sujets en rapport avec ce message

Recherche lien ou tutoriel delphi==>SQL server [ par couf ] Bonjour à Tous, J'ai une application à faire et de l'autre coté le SGBD est sql serverproblème je veux savoir si il existe un tutoreil delphi sql serv probleme delphi ==> table SQL [ par taoren03 ] J'ai une table SQL toto Avec 4 champs NOM, Dénomination, lien, et ID Donc je dois faire un programme sous Delphi qui regarde pour chaque ligne si le glscene, opengl, delphi ... galere [ par f0xi ] bonjour a tous! aprés plusieurs essais et nombreuses recherche sur le net je me trouve face a un trés gros probleme. j'ai reussis a installer GLScen recherche d'une base de donnée [ par ayadi001 ] Bonjour, j'ai une application de gestion, les tables en Paradox, je voudrais faire une recherche avec une partie de mots, j'ai fais la requette suiva recherche requette SQL [ par ayadi001 ] Bonjour, récement j'ai posé une question sur les forums, puisque j'ai pas trouvé la sollution, mais l'un des membre à clotoré le sujet sans qu'il y a REQUETE SQL AVEC DELPHI ET ADO division d'une somme d'un count [ par sarita1987 ] Bonjour à tous, j'espère trouver de l'aide ici parce-que je traine sur ce probéleme depuis presque une semaine.ma requete fait une somme d'un count et executer un scripte.SQL avec delphi avec un composant [ par aris1979 ] bonjour je cherche un exemple simple avec delphi , qui me permet d'executé un scripte sql de création de base de donne sql server avec delphi requette sql avec delphi [ par ridadz2003 ] Bonjour. avant tout je conner presque rien au principe de programmation delphi et je me suis habituer a travailler que avec php et mysql. bon voila j' Je recherche un Delphi 5 [ par solilog ] Bonjour,Je viens de détruire mon vieux CD de Delphi 5 Entreprise et je dois terminer une appli commencée, et elle utilise le QuickReport qui n'est plu


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,323 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales