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

Discussion :

Index sur un champ date dBase level7 [Lazarus]


Sujet :

Lazarus

  1. #1
    Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    octobre 2008
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : octobre 2008
    Messages : 74
    Points : 50
    Points
    50
    Par défaut 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 émérite
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    septembre 2015
    Messages
    1 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : septembre 2015
    Messages : 1 122
    Points : 2 949
    Points
    2 949
    Billets dans le blog
    2
    Par défaut
    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
    Homme Profil pro
    Consultant informatique
    Inscrit en
    octobre 2008
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : octobre 2008
    Messages : 74
    Points : 50
    Points
    50
    Par défaut Bonne réponse
    Bonsoir

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

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

Discussions similaires

  1. [perf] poser un index sur un champ date
    Par kaymak dans le forum Administration
    Réponses: 4
    Dernier message: 04/02/2009, 11h02
  2. Index sur une colonne Date
    Par sjaeger dans le forum Oracle
    Réponses: 11
    Dernier message: 10/11/2005, 14h55
  3. Tri dans une DBGrid sur un champ date au format jj/mm
    Par Jeankiki dans le forum Bases de données
    Réponses: 10
    Dernier message: 31/10/2004, 12h32
  4. n INDEXs sur chaque champ ou 1 seul INDEX sur n ch
    Par fourchette dans le forum Requêtes
    Réponses: 2
    Dernier message: 22/04/2004, 10h55
  5. [CR] Problème de sélection sur un champ date
    Par noluc dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 21/11/2003, 16h56

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