Bonjour,
J'étais sous W10 et je suis en train de passer sous W11.
J'utilise Delphi 6 Personal Edition.
Actuellement, j'essaie d'utiliser "My Little Base" pour gérer un petit système de bases de données utilisant un fichier CSV.
Je l'ai téléchargé ici: http://mylittlebase.free.fr/
Mais c'est disponible ) de multiples endroits.
Le programme de démo fonctionne bien.
J'ai donc commencé à créer un premier programme à titre d'essai.
Il s'agit d'un fichier de contacts simpliste, juste pour explorer les concepts.
Je peux créer une nouvelle base (sauvegardé dans un fichier CSV) avec 3 enregistrements, lors du démarrage initial du programme.
Lors du démarrage suivant, le programme est supposé réouvrir et charger la base existante.
Et là, patatras, j'ai une erreur de droit d'accès en ouverture, sur mon propre fichier, créé par mon propre programme !
Je suis dans un compte Admin, et j'exécute mon programme avec les privilèges Admin.
J'ai vérifié: j'ai tous les droits d'accès sur le fichier:
Voici le fichier créé lors du premier passage:
Et lors de la réouverture du fichier au deuxième passage, il y a une erreur IoResult=3 lors de la commande Reset après Assign du fichier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Nom;Prenom;Tel 1;Tel 2;Mail 1;Mail 2 Dupont;;0601328562;0125688500;jacques.dupont@orange.fr;jdupont32@gmail.com Dupont;;0154896524;0756892545;annemarie.dupont@orange.fr; Martinet;;;;paul.martinett@laposte.fr;
Cela de passe dans la fonction TMlb2.LoadFromCSVFile contenue dans l'unité mlb2.pas:
(j'ai mis quelques ShowMessage pour localiser le problème, et j'ai testé la valeur de IoResult par le debuggeur).
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69 function TMlb2.LoadFromCSVFile(filename1: string): Boolean; var F: TextFile; fline, token: string; is_first_line: boolean; i, k: LongInt; begin init_error; showmessage('mlb2.LoadFromCSVFile a '+filename1); AssignFile(F, filename1); showmessage('mlb2.LoadFromCSVFile b'); {$i-} Reset(F); {$i+} showmessage('mlb2.LoadFromCSVFile c'); If (Trim(filename1)='') or (IoResult<>0) then begin {CloseFile(F);} MLBError := MLB_ERROR_IO; // <======== ici, "Accès au fichier refusé" dans commande Reset !!!!!!!!! MLBErrorComment := '1-Unable to open the file for reading'; Result := False; Exit; end else begin nameFromFilename(filename1); Result := True; Init; is_first_line := True; While Not Eof(F) Do begin ReadLn(F, fline); if (not is_first_line) and (Trim(fline)<>'') then begin AddRow; end else begin end; i := 1; k := 0; token := ''; while (i<=length(fline)) do begin if (fline[i] = '\') then begin if (i<length(fline)) then begin if (UpperCase(fline[i+1])='N') then begin token := token + #13 + #10; end else begin token := token + fline[i+1]; end; Inc(i, 1); end else begin token := token + fline[i]; end; end else if (fline[i]=CSVSeparator) then begin if is_first_line then begin AddField(token); end else begin lastrow.Strings[k] := token; end; Inc(k, 1); token := ''; end else begin token := token + fline[i]; end; Inc(i, 1); end; if is_first_line then begin AddField(token); end else begin lastrow.Strings[k] := token; end; is_first_line := False; end; CloseFile(F); end; end;
Je n'arrive pas à comprendre pourquoi je n'arrive pas à ouvrir mon propre fichier, alors que le programme
Voici ma procédure de TForm1.FormCreate qui fait le travail:
Là encore, quelques ShowMessage pour suivre à la trace...
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
47
48
49 procedure TForm1.FormCreate(Sender: TObject); begin ContactFile := Extractfilepath(ParamStr(0))+'Contacts.csv'; modified := false; Contacts.Init; Contacts.AddField('Nom'); Contacts.AddField('Prenom'); Contacts.AddField('Tel 1'); Contacts.AddField('Tel 2'); Contacts.AddField('Mail 1'); Contacts.AddField('Mail 2'); Contacts.AddRow; Contacts.SetData('Nom','Dupont'); Contacts.SetData('Prénom','Jacques'); Contacts.SetData('Tel 1','0601328562'); Contacts.SetData('Tel 2','0125688500'); Contacts.SetData('Mail 1','jacques.dupont@orange.fr'); Contacts.SetData('Mail 2','jdupont32@gmail.com'); Contacts.AddRow; Contacts.SetData('Nom','Dupont'); Contacts.SetData('Prénom','Annemarie'); Contacts.SetData('Tel 1','0154896524'); Contacts.SetData('Tel 2','0756892545'); Contacts.SetData('Mail 1','annemarie.dupont@orange.fr'); Contacts.SetData('Mail 2',''); Contacts.AddRow; Contacts.SetData('Nom','Martinet'); Contacts.SetData('Prénom','Paul'); Contacts.SetData('Tel 1',''); Contacts.SetData('Tel 2',''); Contacts.SetData('Mail 1','paul.martinett@laposte.fr'); Contacts.SetData('Mail 2',''); modified := true; showmessage('fichier a été créé'); end else begin if Contacts.LoadFromCSVFile(ContactFile) then showmessage('fichier a été chargé') else showmessage('Load error '+inttostr(Contacts.MLBError)+' '+Contacts.MLBErrorComment); end; if not Contacts.GoFirst then showmessage('error GoFirst'); showmessage(Contacts.GetData('Nom')); Form1.Caption := 'Contacts - '+ContactFile; if modified then Form1.Caption := 'Contacts - '+ContactFile + ' ' + '* (' + inttostr(Contacts.RowCount) + ' contacts)' else Form1.Caption := 'Contacts - '+ContactFile + ' (' + inttostr(Contacts.RowCount) + ' contacts)'; end;
Le projet complet est dans un fichier ZIP en pièce jointe.
Je n'avais pas encore rencontré ce genre de problème de droit d'accès tant que j'étais sous W10.
Qu'est-ce que j'ai manqué ?
Partager