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 :
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.
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;
L'objectif faire un filtre permettant d'afficher les oublis d'une date donnée.
Je m'y suis pris de cette manière
Voici le message :
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;
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
Partager