Pour ton problème d'indice
souvent lorsqu'on supprime on fait
for I := Obj.Count - 1 downto 0 do
Comme tu ne souhaite que supprimer un seul élément, le Exit est aussi une solution
sinon, tu pouvais simplifier
1 2 3
| FOR I := 0 to DM1.IBTable7.IndexDefs.Count - 1 do
if DM1.IBTable7.IndexDefs[I].Name = 'IDX_NOM' then
BEGIN // FOR |
en tout simplement
1 2
| if DM1.IBTable7.IndexDefs.IndexOf('IDX_NOM') >= 0 then
begin |
ou encore Find plus pénible car déclenchent une Exception
Pourquoi utilise WITH si tu n'exploites pas ses possibilité !
1 2 3 4 5 6
| WITH SQL DO
begin
SHOWMESSAGE(DM1.IBTable7.IndexDefs[I].Name);
IBQUERY1.SQL.Clear;
IBQUERY1.SQL.Add('DROP INDEX IDX_NOM');
END; |
devrait être
1 2 3 4 5 6 7
|
WITH SQL DO
begin
SHOWMESSAGE(DM1.IBTable7.IndexDefs[I].Name);
Clear;
Add('DROP INDEX IDX_NOM');
END; |
Tu as 20 Tables ouvertes qui utilisent l'index ou juste IBTable7 ?
Je n'utilise plus le TTable ou TIBTable depuis au moins 8 ans, avec les bases de données distantes mieux vaut des SQL les plus restreints que possible avec des TQuery ou TIBQuery
Sinon, change ton mot de passe d'opération admin "HMD2015", maintenant, tout le monde le connait !
Fait attention à tous ces StartTransaction, tu risques d'avoir des transactions très longues, je ne sais pas si c'est une bonne pratique !
En tout, je plains celui qui devra reprendre le code, TForm8, Panel15, IBTable1 à IBTable20, des noms tellement clair, utile et explicite !
Une indentation douteuse aussi !
C'est pour moi un code qui sera inmaintenable,
si tu es amateur, c'est excusable, mais comme tu dois travailler ponctuellement sur ton projet, te replonger dedans doit être difficile,
si tu es un professionnel, comment dire sans être méchant ... euh c'est pas possible !
Partager