Bonjour. J'ai un petit soucis.


J'ai une boucle qui parcours + de 300000 tuples d'une table.
Dans cette table, les propriétés sont:
- ref (identifiant auto-incrémenté)
- lib (chaine initiale)
- trait (chaine traitée)

Pour l'instant, seules les colonnes ref et lib sont remplies.


Le but de ma boucle est donc de récupérer, pour chaque tuple, la valeur de la chaine lib, de la traiter (à l'aide d'une fonction...), et une fois traitée, de faire un update sur ma table pour ajouter la chaine traitée trait sur la ligne du lib correspondant.


Mon code, sous Delphi 7, est le suivant:

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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;                            //Compteur de boucle
sIn:string;                           //Chaine à traiter
nbreint:integer;                      //Nombre de tuples de la table
nbrestr:string;                       //nbreint convertir en string
 
 
begin
nbreint:=Query_nbreCOUNT.Value;
nbrestr:=IntToStr(nbreint);
 
for i:=1 to nbreint do
  begin
    with query_mot do
      begin
        //Active:=false;
        Params[0].Value:=i;
        ExecSQL;
        Active:=True;
        Open;
      end;
    mot:=query_motmot_lib.Text;
    query_mot.Active:=False;
    result:=convert(mot);
    query_trait.Params[0].Value:=result;
    query_trait.Params[1].Value:=i;
    query_trait.ExecSQL;
 
  end;
end;

La requete de mon query_nbre est:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
SELECT COUNT(*)
FROM mots

La requete de mon query_mot est:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
SELECT mot_lib
FROM mots
WHERE mot_num=:p

La requete de mon query_trait est:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
UPDATE mots
SET mot_trait=:p
WHERE mot_num=:q


Lorsque j'exécute, il me retourne le message d'erreur suivant:
Le projet importbdd.exe a provoqué une classe d'exception EDBEngineError avec le message 'Opération non applicable.
Trop de tables ouvertes.
Table: C:\...\mots.db'. Processus stoppé. Utilisez Pas-àpas ou Exécuter pour continuer.


Cepedant, lorsque je donne à i une valeur fixe, donc sans faire de boucle, ça fonctionne parfaitement.
Y'aurait-il un probleme face à un nombre très important de lignes, où est-ce moi qui ait fait une bourde qui fait que ma boucle plante ?


J'ai bien sûr sur ma form le composant Ttable activé sur ma base mot.db et le composant Tdatasource lié à mon Ttable.

A savoir aussi que je bosse avec une base Paradox.




Merci de m'éclairer. Je pete un plomb depuis hier soir.


Merci d'avance pour vos réponses.