Bonjour,
Je ne sais pas si je dois poster ici ou sur Interbase, mais je pense plus à un problème spécifique Delphi.
L'algo suivant est censé sur un dataset comportant un champ 'numero_ligne', décaler les numéros de ligne selon la position où l'on veut insérer.
dans
1,2,3,4,5
si je prévois d'insérer après 3, je dois obtenir :
1,2,3,5,6
Si on fait cet exemple ça marche.
En revanche si je tente d'insérer avant 1, ça boucle indéfiniment.
Le test sur bof est inopérant.
Le pire, c'est que je pense qu'il a dû fonctionner à une époque.
Y a-t-il quelque chose qui pourrait expliquer ça ?
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
32
33 procedure TDB_piece_client.decaler_lignes(P_Table_Ligne : TDataset; P_nb_lignes : integer); Var L_Numero_Ligne_Initiale:Integer; L_Numero_Ligne:Integer; begin P_table_ligne.DisableControls; // Récupération du numéro de la ligne d'insertion L_Numero_Ligne_Initiale:=P_Table_Ligne.FieldByName('NUMERO_LIGNE').asinteger; // On se place à la fin du recordset P_Table_Ligne.Last; // Tant qu'on n'est pas sur la ligne d'insertion repeat if (P_table_ligne.State <> dsEdit) and (P_table_ligne.State <> dsInsert) then P_table_ligne.edit; L_Numero_Ligne:=P_Table_Ligne.FieldByName('NUMERO_LIGNE').asinteger; // On décale le numéro de ligne du nombre d'insertion désiré P_Table_Ligne.FieldByName('NUMERO_LIGNE').asinteger:=L_Numero_Ligne+P_nb_lignes; // on remonte d'une ligne dans la grille //P_table_Ligne.MoveBy(-1); P_table_Ligne.Prior; until (P_Table_Ligne.FieldByName('NUMERO_LIGNE').asinteger < L_Numero_Ligne_Initiale) or P_table_ligne.bof; If Not P_table_ligne.bof Then P_table_Ligne.MoveBy(+1); P_table_ligne.EnableControls; end;
Partager