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 :

Probleme de mise à jour base de donnée


Sujet :

Bases de données Delphi

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2009
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Probleme de mise à jour base de donnée
    salut , j'ai un probleme d'index de base de donnée , j'ai crée une base de donnée (Paradox) sous delphi 5 ; aprés plusieurs enregistrement , quand j'ai ouvert la base de donnée , elle m'écrit ('index n'est pas à jour') , alors s'il vous plait , comment je fais pour mettre à jour l'index ? ; quelques chode comme REINDEX sous DBASE VI par exemple ; merçi ...

    ====================================================
    le fichier en question est en paradox , indéxé avec plusieurs index secondaires ; j'ai le probleme d'indexe principale , celui qu'il faut cocher avec une étoile (index primaire) , je crois que le probleme est là c-à-dire l'index primaire, si on peut l'appeler comme ça, celui la est defectueux , comment je peux récupérer mes données et de les indéxés une deuxieme fois et je continue de saisir des données ? !!!

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2009
    Messages : 577
    Points : 1 073
    Points
    1 073
    Par défaut
    Bonjour,

    Il est difficile de répondre à ta question.

    Déjà, Paradox est une technologie en fin de vie et de nombreux intervenants, de ce site, ne travaillent plus avec. Alors, il reste les souvenirs, mais souvent insuffisants pour apporter une réponse satisfaisante.

    Pour en revenir à ta question, il serait bien de présenter le schéma de la table concernée. Comment, tu en assures l'alimentation.

    Cette table comprend un ou plusieurs index. Existe-t-il un index auto-incrémenté ? etc.

    Donnes nous toutes les informations pour comprendre ta démarche.

    A+

  3. #3
    Fxg
    Fxg est déconnecté
    Membre éclairé
    Homme Profil pro
    ingénieur financier
    Inscrit en
    Septembre 2003
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur financier

    Informations forums :
    Inscription : Septembre 2003
    Messages : 511
    Points : 838
    Points
    838
    Par défaut
    bonjour
    est ce que c'est un problème ponctuel de corruption des index ou récurrents à chaque fermeture / ouverture ?

    Pour corriger les index tu peux utliser la DLL TUTIL32.DLL. Tu peux aussi les supprimer et les recréer.

    Tu trouveras un très bon programme de correction en cherchant sur google : Pdxrbld.exe

    IL en existe aussi un autre, avec les sources, et qui te montre donc l'utilisation de la DLL mais j'ai oublié son nom.

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 727
    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 727
    Points : 25 630
    Points
    25 630
    Par défaut
    dbiReindexes ?
    Ce n'est une FAQ par hazard ? ah non, elle n'est pas publiée !

    Voici un vieux code de 2003, l'idée est d'avoir DEUX DB, lors de l'installation, tu déploies la base de données d'origine (vide ou alors juste les données minimales), et du déplois une seconde fois pour celle que je tu vas modifier par la suite

    lors d'un "Index out of Date", tu recopies le fichier Table.DB SANS les fichiers Index, il est plus prudent de conserver le fichier DB, d'autres outils pourront peut-être mieux le récupérer que ce code.
    Tu recopies les fichiers vierges (DB, PX, PY ...) puis tu recopie la Table.DB Sans Index vers la Nouvelle Table

    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 SynchronizeTableWithIndexOutOfDate(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;

Discussions similaires

  1. Mise à jour base de donné a partir d'un detailsview
    Par xavpiaf dans le forum ASP.NET
    Réponses: 1
    Dernier message: 04/03/2008, 18h14
  2. [MySQL] Mise à jour base de données
    Par edenfusion dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 25/11/2007, 12h15
  3. Réponses: 3
    Dernier message: 31/08/2007, 17h11
  4. Mise à jour base des données modifiées dans le DataGridView
    Par dolyne.b dans le forum Windows Forms
    Réponses: 9
    Dernier message: 26/04/2007, 16h58
  5. [SQL server][TDbRichEdit] Mise à jours base de donnée
    Par Revan012 dans le forum Bases de données
    Réponses: 9
    Dernier message: 11/06/2004, 13h12

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