Completer automatiquement certains champs d'une grosse TTable

cs_juan Messages postés 10 Date d'inscription mardi 17 octobre 2000 Statut Membre Dernière intervention 22 mai 2002 - 17 avril 2002 à 12:20
cs_Gysmo Messages postés 209 Date d'inscription lundi 11 février 2002 Statut Membre Dernière intervention 13 décembre 2002 - 18 avril 2002 à 01:28
bjour tous,
j'ai 2 questions en fait:
- j'ai une table remplie partiellement, mais je voudrais remplir certains champs qui sont associés à d'autres: pour être plus clair, voici la syntaxe que j'utilise:

begin
table1.open;
table1.first;
table1.insert;
while not table1.Eof do
begin
if table1.FieldByName('Type').AsString = 'Française' then
table1.FieldByName('RN').AsString := '2';
table1.FieldByName('RR').AsString := '2';
table1.FieldByName('NRN').AsString := '2';
table1.FieldByName('NRR').AsString := '2';
end;
end;

je veux, si mon champ "type" contient "française", associer la valeur 2 aux champs RN, RR, NRN et NRR, et d'autres valeurs si le type n'est pas le même en continuant avec des "else if". Avec la syntaxe ci-dessus, pas de message d'erreur, mais ça plante et le seul moyen que j'ai trouvé de continuer à programmer c d'éteindre et rallumer delphi... Voilà pour la première question.

- La deuxième: je génère ma table à partir de 127 procédures qui combinent des données entre elles de manière à me donner dans les enregistrements toutes les combinaisons possibles, le problème est que chaque procédure génère dans les 200 enregistrements, et que je ne peux pas les lancer toutes en une même opération, sinon ça plante de la même manière que dans ma première question... En lançant mes procédures une par une à la suite des autres, j'obtient une table contenant 32600 enregistrements, sur laquelle je suis censé appliquer pleins de filtres et de tris, ya-t-il une ruse bien connue pour accélerer les opérations ?
ben c tout pour auj...
merci tous!
juan

3 réponses

cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 2
18 avril 2002 à 00:02
--- Nono du Moulin ---
0
cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 2
18 avril 2002 à 00:12
Presmière question,
Il y à deux problèmes dans ta boucle :
Primo tu ne passe jamais sur l'enregistrement suivant, c'est donc pour ça que tu plante ton appli.
Secondo il ne faut pas appler INSERT pour modifier une ligne mais EDIT puis POST quand les modifs sont terminées. Voici donc le code

table1.open;
table1.first;
while not table1.Eof do
begin
if table1.FieldByName('Type').AsString= 'Française' then
Begin
table1.Edit;
table1.FieldByName('RN').AsString := '2';
table1.FieldByName('RR').AsString := '2';
table1.FieldByName('NRN').AsString := '2';
table1.FieldByName('NRR').AsString := '2';
table1.post
End;
Table1.Next; // ça c'est important pour arriver à la fin un jour !
end;

Deuxième question,
Il n'y a pas assez de détails pour répondre de façon précise, mais la méthode utilisée me paraît lourde a première vue : utiliser 127 procédures pour remplir une table... N'y a-t-il pas un moyen de n'en faire une seule paramètrable ?

Au fait quand tu es en mode exécution dans delphi et que le programme bloque, utilise dans Delphi la commande 'Réinitialiser le programme' du menu 'exécuter' pour le stopper dans fermer delphi.

--- Nono du Moulin ---
0
cs_Gysmo Messages postés 209 Date d'inscription lundi 11 février 2002 Statut Membre Dernière intervention 13 décembre 2002
18 avril 2002 à 01:28
Je rajouterais 2 petit truc:

Si ta Table1 ki apparait 20 fois met:

whit Table1 do begin
open;
first;
insert;
while not Eof do
begin
if FieldByName('Type').AsString = 'Française' then
FieldByName('RN').AsString := '2';
FieldByName('RR').AsString := '2';
FieldByName('NRN').AsString := '2';
FieldByName('NRR').AsString := '2';
end;
end;

Je trouve cela plus leger.

Dezio kan ca plante defois meme en faisant Ctrl+F2 ca n'arrete pas le prog, il fo defois le mettre en pause en faire la manip.

M'enfin tou ca c perso.

Babaille.
0
Rejoignez-nous