IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bases de données Delphi Discussion :

Utilitaire pour renouveler les index d'une base de données paradox


Sujet :

Bases de données Delphi

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    Points : 35
    Points
    35
    Par défaut Utilitaire pour renouveler les index d'une base de données paradox
    Salut tm,
    est ce qu'il existe un utilitaire qui renouvele tout les index d'une base de données paradox?
    merci d'avance

  2. #2
    Membre expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Points : 3 329
    Points
    3 329
    Par défaut
    la réponse est données sur le Forum

  3. #3
    Membre actif Avatar de touhami
    Inscrit en
    Avril 2002
    Messages
    327
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 327
    Points : 264
    Points
    264
    Par défaut
    Bonjour ,
    pour la reindexation des tables Paradox , la question est déjà posée sur ce lien
    et par l'ocasion je te conseil d'evité de travaillé avec les tables Paradox et de passé immédiatement vers autre type de base de données telque : Access ou FireBird.
    Bon developpement.

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Parfois DbiRegenIndex foire parfois ...

    Dans ces cas bien chiant, Le plus simple, c'est d'avoir avec son programme, des fichiers DB vides (avec les PY, et autres), de les copier dans le répertoire de la base sous un autre nom,
    tu supprimes de la table defectueuse, les fichiers autre que DB et MMO, et tu l'ouvre, tu recopie cette table dans la vide, tu supprime l'ancienne et tu renommes la copie pour qu'elle est son nom de production ... et pouf, tu as récupéré 99% des données le % qui trainent étant des enregs désactivés qui n'étaient actif que via l'index, et inversement des enregs actifs qui était désactivés par l'index, cela sauve des données mais avec quelques erreurs ...

    Ce code peut inspirer

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    //----------------------------------------------------------------------------------------------------------------
    function SynchronizeTableWithIndexOutOfDateLastChance(TableToRepare: TTable): Boolean;
    var
       PathDB, PathDBSansIndex, PathDBModele : String;
       BackUpPathDBSansIndex : String;
       SearchItem:  TSearchRec;
       TableWithoutIndex: TTable;
       iField: Integer;
       Compteur: Integer;
    begin
         Result := False;
         try
            PathDB := SetSlash(GetPathAlias());
            if DirectoryExists(PathDB) then begin
     
               // Suppression d'eventuel Fichier Temporaire
               PathDBSansIndex := SetSlash(PathDB + DATABASE_TO_REPARE_DIRECTORY);
               try
                  if FindFirst(PathDBSansIndex + '*', faAnyFile - faDirectory, SearchItem ) = 0 then begin
                     repeat
                           if (SearchItem.Name <> '.') and (SearchItem.Name <> '..')  then begin
                              if DeleteFile( PChar(PathDBSansIndex + ExtractFileName(SearchItem.Name))) then begin
                                 Beep;
                              end;
                           end;
                     until not ( FindNext(SearchItem) = 0 ); // Continuer tant que FindNext renvoi 0
                  end;
               finally
                      FindClose(SearchItem);
               end;
     
               // Recopier les Fichiers de cette Table en dehors de la Base de Données
               try
                  if FindFirst(PathDB + ChangeFileExt(TableToRepare.TableName, '*'), faAnyFile - faDirectory, SearchItem ) = 0 then begin
                     repeat
                           if (SearchItem.Name <> '.') and (SearchItem.Name <> '..')  then begin
                              if MoveFile( PChar(PathDB + ExtractFileName(SearchItem.Name)), PChar(PathDBSansIndex + ExtractFileName(SearchItem.Name)) ) then begin
                                 if UpperCase(ExtractFileExt(SearchItem.Name)) <> '.DB' then begin
                                    RenameFile( PChar(PathDBSansIndex + ExtractFileName(SearchItem.Name)), PChar(PathDBSansIndex + ExtractFileName(SearchItem.Name) + '.stwiood'));
                                 end;
                              end;
                           end;
                     until not ( FindNext(SearchItem) = 0 ); // Continuer tant que FindNext renvoi 0
                  end;
               finally
                      FindClose(SearchItem);
               end;
     
               // Utiliser des fichiers Vierges
               PathDBModele := SetSlash(PathDB + DATABASE_EMPTY_DIRECTORY );
               try
                  if FindFirst(PathDBModele + ChangeFileExt(TableToRepare.TableName, '*'), faAnyFile - faDirectory, SearchItem ) = 0 then begin
                     repeat
                           if (SearchItem.Name <> '.') and (SearchItem.Name <> '..')  then begin
                              if CopyFile( PChar(PathDBModele + ExtractFileName(SearchItem.Name)), PChar(PathDB + ExtractFileName(SearchItem.Name)), True ) then begin
                                 SetFileAttributes( PChar(PathDB + ExtractFileName(SearchItem.Name)), FILE_ATTRIBUTE_NORMAL);
                                 beep;
                              end;
                           end;
                     until not ( FindNext(SearchItem) = 0 ); // Continuer tant que FindNext renvoi 0
                  end;
               finally
                      FindClose(SearchItem);
               end;
     
               // Création d'une Table Temporaire pour Lire les Données SANS Index
               TableWithoutIndex := TTable.Create(DMServeur);
               try
                  TableWithoutIndex.DatabaseName := PathDBSansIndex;
                  TableWithoutIndex.TableName := TableToRepare.TableName;
                  try
                     // Ouverture de la Table Vierge
                     TableToRepare.Close();
                     TableToRepare.Exclusive := True;
                     TableToRepare.EmptyTable();
                     TableToRepare.Open();
                     TableToRepare.First();
                     try
                        // Récupération des Données
                        try
                           TableWithoutIndex.Open();
                           TableWithoutIndex.IndexName := '';
                           TableWithoutIndex.First();
                           while not TableWithoutIndex.Eof do begin
                                 TableToRepare.Append();
                                 for iField := 0 to TableWithoutIndex.FieldCount - 1 do begin
                                     TableToRepare.Fields[iField].AsVariant := TableWithoutIndex.Fields[iField].AsVariant;
                                 end;
                                 TableToRepare.Post();
     
                                 TableWithoutIndex.Next();
                           end;
                           Result := True;
                        except
                              FichierLog('REPARATION', 'Except STWIOOD, Copy', Exception(ExceptObject).Message);
                              Result := False;
                        end;
                     finally
                            TableToRepare.Close();
                            TableToRepare.Exclusive := False;
                     end;
                  except
                        FichierLog('REPARATION', 'Except STWIOOD, Open', Exception(ExceptObject).Message);
                        Result := False;
                  end;
               finally
                      TableWithoutIndex.Close();
                      TableWithoutIndex.Free();
               end;
     
               try
                  // Recopier les Fichiers de cette Table sans Index dans un BackUp
                  BackUpPathDBSansIndex := PathDBSansIndex + 'BackUp\DBOutOfDate\Table ' + FormatDateTime('yyyy-mm-dd (dddd d mmmm)',Now()) + '\';
                  Compteur := 1;
                  while DirectoryExists( BackUpPathDBSansIndex + 'No ' + IntToStr(Compteur) ) do begin
                        Compteur := Compteur + 1;
                  end;
                  BackUpPathDBSansIndex := BackUpPathDBSansIndex + 'No ' + IntToStr(Compteur) + '\';
                  if not DirectoryExists(BackUpPathDBSansIndex) then begin
                     ForceDirectories(BackUpPathDBSansIndex);
                  end;
                  try
                     if FindFirst(PathDBSansIndex + ChangeFileExt(TableToRepare.TableName, '*'), faAnyFile - faDirectory, SearchItem ) = 0 then begin
                        repeat
                              if (SearchItem.Name <> '.') and (SearchItem.Name <> '..')  then begin
                                 if MoveFile( PChar(PathDBSansIndex + ExtractFileName(SearchItem.Name)), PChar(BackUpPathDBSansIndex + ExtractFileName(SearchItem.Name)) ) then begin
                                    if UpperCase(ExtractFileExt(SearchItem.Name)) = '.STWIOOD' then begin
                                       // Suppression de l'extension spéciale sans Index
                                       RenameFile( PChar(BackUpPathDBSansIndex + ExtractFileName(SearchItem.Name)), PChar(BackUpPathDBSansIndex + ChangeFileExt(ExtractFileName(SearchItem.Name),'')));
                                    end;
                                 end;
                              end;
                        until not ( FindNext(SearchItem) = 0 ); // Continuer tant que FindNext renvoi 0
                     end;
                  finally
                         FindClose(SearchItem);
                  end;
               except
                     FichierLog('REPARATION', 'Except STWIOOD, BackUP', Exception(ExceptObject).Message);
               end;
     
            end;
         except
               FichierLog('REPARATION', 'Except STWIOOD, Global', Exception(ExceptObject).Message);
               Result := False;
         end;
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. Script pour vider les tables d'une base de données
    Par benlakhel dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 22/02/2013, 13h11
  2. comment maintenir les indexes d'une base de donnée
    Par moi.moi dans le forum Administration
    Réponses: 1
    Dernier message: 14/08/2012, 15h36
  3. Comment faire pour afficher les informations d'une base de donnée
    Par bonnet85 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 28/03/2008, 09h24
  4. Problème avec les indexes sur une base de données.
    Par osoudee dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 09/02/2006, 09h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo