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 :

[Delphi 7] [DBase 4] Index multiple


Sujet :

Bases de données Delphi

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 181
    Par défaut [Delphi 7] [DBase 4] Index multiple
    Bonjour à tous.
    Je rencontre ce qui me semble être un bête problème de syntaxe pour définir un index multiple pour une table de type DBF. Suite à des recherches diverses, j'ai essayé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Table1.AddIndex('Index_Nom_Prenom','Nom'+'Prénom',[]);
    ce qui me vaut le message :
    Table1 : Champ 'NomPrenom' non trouvé (il y a de la concaténation dans l'air )

    puis ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Table1.AddIndex('Index_Nom_Prenom','Nom,Prénom',[]);
    ce qui me vaut le message :
    Descripteur d'index incorrect

    D'avance merci.
    Amicalement.

    Alain

  2. #2
    Expert confirmé
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Par défaut
    Salut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Table1.AddIndex('Index_Nom_Prenom','Nom;Prénom',[]);

    @+

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 181
    Par défaut
    Salut Cl@udius.
    Autant pour moi ! J'ai écrit une virgule au lieu d'un point-virgule dans mon message, mais c'est bien un point-virgule que j'ai utilisé dans mon code. En clair, ta proposition me renvoie mon deuxième message, à savoir : Descripteur d'index incorrect
    Mon problème reste donc entier

    En tout cas, merci pour la promptitude de ta réponse. (Fait beau dans le 65 ?)

  4. #4
    Expert confirmé
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Par défaut
    Re,

    As-tu vérifié que l'index que tu essayes de créer n'existe pas déjà ?

    @+

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 181
    Par défaut
    Oui, d'ailleurs mon projet est très simple : je crée une petite table et j'essaye juste d'ajouter un index multiple et rien d'autre pour l'instant (je ne rencontre pas de pb avec les index simples).

    PS : je suis en apprentissage de Delphi, mais je développais avant sous Clipper5 (qui acceptait la syntaxe avec + )

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 598
    Billets dans le blog
    65
    Par défaut
    j'en suis pas sûr a 100% mais je crois que ton nom d'index est trop long

  7. #7
    Expert confirmé
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Par défaut
    Re,

    C'est bizarre, je viens de faire un test et je créé un index multiple sans problème !

    Qu'est-ce tu utilises comme compo ? Ta table est physiquement créée au moment la création de l'index ?

    @+ Claudius

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 181
    Par défaut
    Merci pour ton hypothèse, SergioMaster, j'ai nommé mon index X (c'est plus court !), mais même résultat !

    Cl@audius, voici la totalité de mon code (les composants utilisés sont un TTable, un TDatasource et un TDBGrid)

    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
     
    procedure TForm1.FormActivate(Sender: TObject);
    begin
      if SearchFile('RundBlick.dbf')=False then // ça, c'est une fonction de recherche de fichier
        begin
          with TableRundBlick do // 
            begin
              Active := False;
              TableType := ttDBase;
              TableName := 'RundBlick.dbf';
              if not TableRundBlick.Exists then 
                begin
                  with FieldDefs do
                    begin
                      Clear;
                      with AddFieldDef do
                        begin
                          Name := 'Nom'; 
                          DataType := ftString;
                          Size := 25;
                        end;
                      with AddFieldDef do
                        begin
                          Name := 'Prenom';
                          DataType := ftString;
                          Size := 25;
                        end;
                      with AddFieldDef do
                        begin
                          Name := 'Age';
                          DataType := ftString;
                          Size := 3;
                        end;
                    end;
                  CreateTable;
                end;
              TableRundBlick.AddIndex('Index_Nom_Prenom','Nom;Prenom',[]);
            end;
        end;
     
      TableRundBlick.TableName:='RundBlick.dbf';
      DBGrid1.DataSource:=DataSourceRundBlick;
      DataSourceRundBlick.DataSet:=TableRundBlick;
      TableRundBlick.Active:=True;
      TableRundBlick.Edit;
    end;

  9. #9
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 598
    Billets dans le blog
    65
    Par défaut
    puisque c'est au moment de ta création pourquoi ne fait tu pas un truc genre

    with IndexDefs do begin
    Clear;
    Add('CLE_1','NOM;PRENOM',[]);
    end;

    avant de créer ta table

  10. #10
    Expert confirmé
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Par défaut
    Essaye de créer ton index en même temps que ta 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
     
    with FieldDefs do
      // ... définition des champs
    end;
     
    // définition de l'index
    with AddIndexDef do begin
      Name := 'IDX_NOM';   // A limiter à 8 caractères je pense, comme le souligne Sergio
      Fields :='Nom;Prenom';
      Options :=[];
    end;
     
    // Création de la Table
    CreateTable;
    A tester !

    [edit] Grillé par Sergio [/edit]
    @+

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 181
    Par défaut
    Merci à tous deux pour votre... acharnement !
    J'avais commencé mes essais par votre dernière proposition c'est à dire avec le code Cl@udius (sauf que j'avais omis la ligne Options :=[]
    Je viens donc de réessayer : même résultat !
    Puisque Cl@udius ne rencontre aucun pb, j'en arrive à conclure que mon problème est peut-être dû à une erreur beaucoup plus simple, plus basique (je vous rappelle que je débute en Delphi, tout seul, et qu'il me manque sans doute des concepts de base tout simples). Je vous adresse donc ma déclaration USES.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Grids, DBGrids, DB, DBTables, StdCtrls;

  12. #12
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 598
    Billets dans le blog
    65
    Par défaut
    non c'est pas tes clauses uses , tu te serais fait 'jeter' en compilant

  13. #13
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 118
    Par défaut
    salut,
    Essayez avec la fonction Dbegenerateindex ?

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 181
    Par défaut
    Bonjour fthdz
    Merci pour votre contribution, mais je ne connais pas cette fonction et l'aide Delphi non plus

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 42
    Par défaut
    Bon ben j'arrive à point nommé ...

    Je rencontre exactement le même problème pour l'ajout d'un index, mais à une table existante. Au détail près qu'il s'agit d'un index avec une seule colonne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    If Not Finded then
      T.AddIndex(Index.name, Index.ColumnList, Index.IndexOptions);
    Le message d'erreur est :

    Nom d'index/repère incorrect

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 181
    Par défaut
    Comment sont définies tes expressions Index.Name, Index.ColumnList, Index.IndexOptions ?

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 181
    Par défaut
    Bonjour.
    Voici un message que j'ai difficilement trouvé sur le forum :
    -----------
    Morisse
    23/01/2006, 16h35
    Je ne sais pas si tu as résolu ton Pb mais je te joins le message suivant trouvé dans l'aide de Delphi 7
    Les tables dBASE ne supportent que les index primaires et les index uniques véritables lorsque le niveau de table est égal ou supérieur à 7 (concurrent de dBASE 7 Visuel). Les tables dBASE ne gèrent pas les index ne tenant pas compte des différences majuscule/minuscule. Vous devez utiliser la constante ixExpression lorsque l'index est basé sur plusieurs champs ou utilise des fonctions du langage de manipulation de données dBASE (c'est-à-dire, pour les index d'expression). Les index dBASE multi-champ ne peuvent pas être créés simplement avec une liste de noms de champs (séparés par des points-virgules) dans le paramètre Fields de AddIndex. La constante ixExpression n'est applicable qu'aux tables dBASE.
    Bon courage
    -----------
    En fait, mon pb a été résolu dès que j'ai ajouté ixExpression dans la section with IndexDefs do de mon code, soit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    with IndexDefs do begin
      with AddIndexDef do begin
        Name := 'IDX_MULT';   
        Fields :='Nom;Prenom'; // ou bien Fields :='Nom+Prenom';
        Options :=[ixExpression];
      end;
    end;
    Merci donc à Morisse et à tous ceux qui ont bien voulu se pencher sur mon cas

    Bon week-end.

    Alain

  18. #18
    Expert confirmé
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Par défaut
    Citation Envoyé par alainvh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        Options :=[ixExpression];
    Bien vu Alain, merci pour l'info !

    @+ Claudius

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 42
    Par défaut
    Citation Envoyé par alainvh
    Comment sont définies tes expressions Index.Name, Index.ColumnList, Index.IndexOptions ?
    Ils sont définis comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      TIndexDef = record
        name: String;
        ColumnList:String;
        tablename: String;
        IndexOptions: TIndexOptions;
      end;
    Et TIndexDef .ColumnList est une chaine qui contient la liste de colonnes séparée par ";".

    J'ai tenté de faire un Open de la table avant de créer l'index, j'ai le droit à un beau message "L'index n'existe pas" ce qui ne me choque pas parce que justement je cherche à le créer

    J'ai aussi tenté de positionner IndexOptions à [ixExpression] mais ça marche pas mieux.

    AddindexDef est-il utilisable si la table existe déjà ? D'après l'aide c'est pas le cas.

  20. #20
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 118
    Par défaut
    bonjour,

    J'ai tenté de faire un Open de la table avant de créer l'index, j'ai le droit à un beau message "L'index n'existe pas" ce qui ne me choque pas parce que justement je cherche à le créer
    Essayez de supprimer completement la table du reperoire et d'importer une nouvelle table,puis executer le code normallement elle va générer un fichier .MDX.
    bon moi j'ai eu ce probleme et j'ai résolu en utilisant ces etapes!!

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Copier un index multiple [Delphi7] [DBase]
    Par alainvh dans le forum Bases de données
    Réponses: 4
    Dernier message: 15/01/2010, 10h45
  2. [Lazarus] Création d'index multiples tables de type dBase
    Par ovni76 dans le forum Lazarus
    Réponses: 7
    Dernier message: 13/04/2009, 14h33
  3. Index multiples sous Word 2007
    Par jreynaud40 dans le forum VBA Word
    Réponses: 0
    Dernier message: 10/10/2007, 09h44
  4. Dbase et index multiples
    Par jeff&Natacha dans le forum Autres SGBD
    Réponses: 1
    Dernier message: 29/04/2005, 10h47
  5. index multiple
    Par mona dans le forum Débuter
    Réponses: 5
    Dernier message: 26/04/2005, 19h45

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