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 :

[XE2] [DBase] Pb de réindexation


Sujet :

Bases de données Delphi

  1. #1
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 522
    Par défaut [XE2] [DBase] Pb de réindexation
    Bonjour,

    j'ai une très vieille appli qui fonctionnait en DBase avec des index MDX (je sais, c'est obsolète !!). Récemment, j'ai constaté que la réindexation de la base ne fonctionnait plus. Pour réindexer, j'utilisais une méthode proposée dans le grand libre Dbase :

    - destruction du fichier MDX,
    - remise à zéro de l'octet 28 de la table
    - réindexation par AddIndex

    Extrait du code ancien :

    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
      {  suppression de Adres2.mdx dans Adres2.dbf en remettant l'octet 28 de adres2.dbf à 0  }
         System.Assign(Fichier,RepBa+'\'+ NomBa);
         System.reset(Fichier,1);
         Seek(Fichier,28);
         Octet := 0 ;
         BlockWrite(Fichier,Octet,1);
         System.CloseFile(Fichier);
         ...
         {Reconstruction des index}
         Try
            Table2.AddIndex('IND_NP' ,'NOM+PRENOM'  ,[ixExpression]);
         Except
            on EDataBaseError do ShowMessage('Erreur : La reconstruction des index est impossible.'+Rc+
                                             'La base est occupée par un autre utilisateur.');
         End;
    Comme j'avais une erreur à l’exécution sur le BlockRead et que cette méthode n'est plus conseillée, j'ai modifié la première partie comme suit :

    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
          {Remise à 0 de l'octet 28 de la base DBF = pas d'index}
          FicBase := RepBa+'\'+ NomBa ;
          FileHandle := SysUtils.FileOpen(FicBase,  fmOpenWrite);
         if FileHandle > 0 then
         begin
           try
             MessageDlg('Handle de fichier valide', mtInformation, [mbOk], 0);
             FileSeek(FileHandle, 28, 0);
             Buffer := PAnsiChar(System.AllocMem(1));
             Buffer[0] := '0' ;
             iBytesRead := SysUtils.FileWrite(FileHandle, Buffer^, 1);
             ShowMessage('iBytesRead : '+ IntToStr(iBytesRead)+ RC+
                         'Buffer (0) : '+ Buffer[0]);
             SysUtils.FileClose(FileHandle) ;
           finally
             FreeMem(Buffer);
           end;
         end
         else
           MessageDlg('Erreur d''ouverture du fichier '+ FicBase +RC+
                      '     Code erreur DOS négatif', mtError, [mbOk], 0);
     
     
         MessageDlg('Opération terminée', mtInformation, [mbOk], 0);
    Mon code ne doit pas être bon car à l'exécution j'ai une erreur sur AddIndex :

    Exception EDBEngineError message : l'index existe déjà

    Quelqu'un peut il m'aider ?

    Merci

    Charly

  2. #2
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 522
    Par défaut
    J'ai trouvé - j'étais un peu débile :

    en ligne 10 c'est :

    Buffer[0] := Char(0) ;

    qu'il faut mettre et non

    Buffer[0] := '0' ;

    si cela peut servir à d'autres ...

    merci à ceux qui ont regardé

    @+

    Charly

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [DBASE III] génération fichier indexation .ntx
    Par olivierlemee dans le forum Autres SGBD
    Réponses: 5
    Dernier message: 30/09/2005, 16h16
  2. Pilote Dbase et Level
    Par AraXav dans le forum Bases de données
    Réponses: 2
    Dernier message: 02/06/2004, 15h38
  3. Transefert de données de DBASE IV vers Mysql
    Par sessime dans le forum Bases de données
    Réponses: 2
    Dernier message: 04/03/2004, 09h43
  4. [dBase]il y a mieux que la commande sql UPDATE ?
    Par sana72 dans le forum Autres SGBD
    Réponses: 4
    Dernier message: 12/12/2002, 11h59
  5. paradox vs dbase ?
    Par do dans le forum Paradox
    Réponses: 3
    Dernier message: 05/06/2002, 10h10

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