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

Lazarus Pascal Discussion :

Index sur un champ date dBase level7


Sujet :

Lazarus Pascal

  1. #1
    Membre du Club
    Index sur un champ date dBase level7
    Bonjour,

    Encore quelque chose qui devrait couler de source et malgré cela je bute sur des erreurs pas vraiment claires je m'explique.

    Création de la 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
        ///////////////////////////////////////////////////////
        //      Tables  oublis
        ///////////////////////////////////////////////////////
        table_a_creer := TDbf.Create(nil);
        try
          ForceDirectories('data');
          table_a_creer.FilePath := 'data' + DirectorySeparator;
          table_a_creer.TableLevel := 7;
          table_a_creer.Exclusive := True;
          table_a_creer.TableName := 'oublis.dbf';
          With table_a_creer.FieldDefs do begin
           Add('num_oubli', ftAutoInc, 0, True);
           Add('date_oubli', ftString, 10, True);
           Add('classe', ftString, 30, True);
           Add('num_eleve', ftInteger, 0, True);
           Add('nom_eleve', ftString, 30, True);
           Add('prenom_eleve', ftString, 40, True);
           Add('motif', ftString,40 , True);
           Add('nbre_oublis', ftInteger,8 , True);
          End;
          table_a_creer.CreateTable;
          table_a_creer.Open;
          table_a_creer.AddIndex('ind_num', 'num_oubli', [ixPrimary, ixUnique]);
          table_a_creer.AddIndex('ind_date_oubli','date_oubli', [ixCaseInsensitive]);
          table_a_creer.AddIndex('ind_classe_eleve','(classe + nom_eleve)', [ixCaseInsensitive]);
          table_a_creer.Close;
        finally
          table_a_creer.Free;
        end;
        If FileExists(var_dir_data + DirectorySeparator+'oublis.dbf' )
        then memo_verif_syst.Lines.Add('La table oublis a été créée avec succès')
        Else Begin
          var_tests_ok:=False;
          memo_verif_syst.Lines.Add('Table oublis inexistante ') ;
        End ;
        Try
          Db_oublis.FilePath:=var_dir_data;
          Db_oublis.FilePathFull:=var_dir_data;
          Db_oublis.Active:=True;
        Except
          memo_verif_syst.Lines.Add(' Impossible d''ouvrir la table oublis' );
        End;


    Vous remarquerez que le champ 'DATE_OUBLI' est au format String car mode date ou string (caractères) je ne m'en sors pas non plus.

    L'objectif faire un filtre permettant d'afficher les oublis d'une date donnée.

    Je m'y suis pris de cette manière
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      If onglets.ActivePageIndex=1 Then Begin
        champ_saisie.Focused;
        champ_saisie.Caption:='';
        Db_oublis.Filtered:=False;
        Db_oublis.Filter:='DATE_OUBLI = ' + var_date_saisie;
        Db_oublis.Filtered:=True;
     
      end;


    Voici le message :





    J'ai refait des dizaines de fois la création de la table ; le souci vient peut être de là car de temps à autre Lazarus me sors un message "Access Violation". Je suis donc obligé de relancer Lazarus
    Pour info les tables ne sont pas active dans l'ide
    Je procède de la manière suivante :
    Tables inactivées lors de la compil.
    Lancement du programme
    Création des tables
    Fermeture du programme. (retour à l'EDI)

    Activation des tables
    Mise à jour de datasources et datafield des <> composants dbgrid etc..
    Désactivation des tables
    Lancement du programme
    J'ai fait de la sorte pour ce programme car il doit être exécuté depuis une clé usb et les tables peuvent ne pas être présentes elles seront créées par l'utilisateur l'interface de mon prog le permet.
    pour info var_date_saisie est une variable au format String

    Je peux envoyer les sources rien de confidentiel

    En allant dans le dossier 'data' dont voici la copie écran il n'y a pas de fichier 'oubli.dbt'



    Bonne continuation et merci de vos idées

    Eric

  2. #2
    Membre expert
    Salut je suis pas expert en BDD mais il me semble que tu doives "quoter" ton filtre comme ceci
    Ne mets pas d'espace avant et après le "=". Et aussi respectes la casse dans tes noms de champs Egalement si je me souviens bien.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      Db_oublis.Filtered:=False;
      Db_oublis.Filter:='date_oubli= ' + QuotedStr(var_date_saisie);
      Db_oublis.Filtered:=True;


    A+
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  3. #3
    Membre du Club
    Bonne réponse
    Bonsoir

    Évidemment j'étais certain d'avoir testé ça aussi.
    Merci.