Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Save-Probleme (https://www.delphipraxis.net/172250-save-probleme.html)

parethol 20. Dez 2012 16:34

Save-Probleme
 
Hallo zusammen,

ich brauche ganz dringend eure Hilfe. Ich muss ein kleines Programm bis morgen Abend releasen. Ich hatte es eigentlich so weit, dass alles funktionierte. Nun ist im letzten moment eine neue Anforderung dazu gekommen und dabei ein Problem aufgetreten. Das Program soll ein paar Daten sammeln und danach in ein .csv File abspeichern, damit es vom Enduser in ein Excel importiert werden kann (nicht mein Vorschlag, die zuständige Person wollte dies so....)

Vorher ging es wie es in der Syntax steht:

Code:
 //-------------------------Save----------------------------------
   begin     //
   List := TStringList.Create;
    try
    data:= Form1.Label5.Caption + ';'+TimeToStr(Now())+';'+ form1.Edit2.Text + ';' + selftest + ';' + form1.Edit1.Text + ';' + rad + ';' + sur + ';' + light + ';'+ ics + ';' + index + ';' + transf1 +';' + transf2 + ';' + transf3 + ';' + interrupt + ';' + emo + ';' + door+ ';' +  move + ';' + call+ ';' + '';
// variabeln

 
     List.LoadFromFile(GetCurrentDir + '\test.csv');
     List.Add(data);
     List.SaveToFile(GetCurrentDir + '\test.csv');
     form3.Visible:=false;
     form4.visible:=true;
 
    finally
     List.Free;
   end;       //
 end;
 end;
end;
end;
Folgende Fehlermeldung tritt auf:
Im Projekt prog.exe ist eine Exception der Klasse EFCreateError aufgetreten. Meldung "C:/progsys/test.csv" kann nicht erstellt werden. Zugriff verweigert. Prozess wurde angehalten. Mit einzelnen Anweisungen oder Start fortsetzen.


Danke für eure rasche Hilfe und Antwort.

Oli

DeddyH 20. Dez 2012 16:40

AW: Save-Probleme
 
Hast Du mal neu gebootet? Oder sind evtl. die Dateiattribute geändert worden? Übrigens ist GetCurrentDir keine gute Option, vielleicht suchst Du ExtractFileDir(ParamStr(0))?

Björn Ole 20. Dez 2012 16:45

AW: Save-Probleme
 
Du hast keine Rechte nach C:/progsys/test.csv zu schreiben, Entweder das Programm mit Adminrechten starten, oder die CSV woanders hin speichern, z.B. auf den Desktop.

parethol 20. Dez 2012 17:25

AW: Save-Probleme
 
also die Attribute habe ich nur auf Hide gesetzt, damit nicht jeder in dem File herum schreiben kann. Das csv File wird dann per Datei import im Excel eingelesen. somit kann jeder sein eigenes Excelfile selber gestalten, mit filtern, grösse usw und die Rohdaten werden nicht verfälscht.

ich habe es so programmiert, dass dort wo das .exe geöffnet wird eine neue "Datenbank" gemacht wird.


Delphi-Quellcode:
if FileExists(GetCurrentDir+ '\test.csv')= false
then begin
    List := TStringList.Create;
    try
     List.Add('A;B;C;D;E;F;G);
     List.SaveToFile(GetCurrentDir+ '\test.csv');
     FileSetAttr(GetCurrentDir+ '\test.csv', faHidden);
    finally
     List.Free;
   end;
  end;

und der bereits beschriebene Block

Delphi-Quellcode:
 //-------------------------Save----------------------------------
   begin    //
   List := TStringList.Create;
    try
    data:= Form1.Label5.Caption + ';'+TimeToStr(Now())+';'+ form1.Edit2.Text + ';' + selftest + ';' + form1.Edit1.Text + ';' + rad + ';' + sur + ';' + light + ';'+ ics + ';' + index + ';' + transf1 +';' + transf2 + ';' + transf3 + ';' + interrupt + ';' + emo + ';' + door+ ';' +  move + ';' + call+ ';' + '';
// variabeln

 
     List.LoadFromFile(GetCurrentDir + '\test.csv');
     List.Add(data);
     List.SaveToFile(GetCurrentDir + '\test.csv');
     form3.Visible:=false;
     form4.visible:=true;
 
    finally
     List.Free;
   end;      //
 end;
 end;
end;
end;
das sind die einzigen zwei Syntaxblöcke welche mit dem Zugriff auf die Daten zu tun haben.

Beisst sich hierbei etwas gegenseitig?


Neu boot hat nichts gebracht.



Gruss

DeddyH 20. Dez 2012 17:28

AW: Save-Probleme
 
Auf die Gefahr, dass ich mich wiederhole: GetCurrentDir ist eine Schnapsidee, das kann zwischendurch z.B. von einem TOpenDialog geändert werden, ohne dass man das mitkriegt. Nimm doch einen absoluten Pfad, am besten einen, der von Microsoft auch für Daten angedacht ist.

parethol 20. Dez 2012 17:33

AW: Save-Probleme
 
@ DeddyH, das GetDir werd ich noch erledigen. Bin am Schreibtisch zusammen räumen, habe nichts mehr getextet im Code.

Andere Frage, wie kann es sein, dass es vor meinen paar Variabeln die ich noch geaddet habe finktioniert hat und jetzt nicht mehr?

DeddyH 20. Dez 2012 17:35

AW: Save-Probleme
 
Ich habe keine Ahnung, aus irgendeinem Grund hast Du keinen Zugriff mehr auf die Datei. Das kann an Benutzerrechten, exklusivem Zugriff eines anderen Programms oder oder oder liegen, da kann man aus der Ferne nur raten.

sx2008 20. Dez 2012 18:36

AW: Save-Probleme
 
Delphi kennt sogenannte Prozeduren und Funktionen und diese sollte man auch benützen!!
Wenn du irgendwas speichern möchtest ist es eine gute Idee den kompletten Dateinamen (inkl. Pfad) als Parameter zu übergeben.
Delphi-Quellcode:
procedure TForm1.SaveCsvDaten(const dateiname:string);
begin
  // hier den Code zum speichern der Daten einfügen
end;

// und später der Aufruf
SaveCsvDaten('C:\test.csv'); // nur zum Test einen festen Dateinamen benützen
// oder so
if SaveDialog1.Execute then
  SaveCsvDaten(SaveDialog1.FileName);
Innerhalb dieser Prozedur wird nur der Parameter dateiname benützt; so wird das eine saubere Sache.
Ausserdem wäre es sinnvoll die Daten als einen Record zu übergeben; also einen weiteren Parameter einzusetzen. (aber das wäre Schritt 2)
Aber Schritt 1 ist ganz klar die Prozedur mit dem übergebenen Dateinamen.

p80286 21. Dez 2012 12:10

AW: Save-Probleme
 
Zitat:

Zitat von parethol (Beitrag 1196287)
also die Attribute habe ich nur auf Hide gesetzt, damit nicht jeder in dem File herum schreiben kann.

Dann solltest Du auch ReadOnly nutzen, oder gleich die entsprechenden ADS-Rechte vergeben.

Was die "Nichtverfügbarkeit" angeht, nutze einen anderen Dateinamen (test.csv?) schreibe einmal und dann noch einmal.
Wenn das schief geht, dann laß die Finger von den Attributen, wenn's dann immer nich nicht klappt, dann schau mal ganz genau nach wo überall diese Datei genutzt wird. Vielleicht gibt#s da irgendwo noch ein fehlendes closefile?

Gruß
K-H

parethol 21. Dez 2012 16:18

AW: Save-Probleme
 
scheint als ob ich das Problem gefunden habe, es liegt am setzen der Attribute. wenn ich die Programmzeile auskomentiere, tritt das Problem nicht mehr auf.

Zitat:

Dann solltest Du auch ReadOnly nutzen, oder gleich die entsprechenden ADS-Rechte vergeben.
heisst das nicht nur, dass ich noch ich so bewusst eine schreib geschützte Datei generiere?

Gibt es keine anderen Befehle die Attribute zu setzen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:55 Uhr.
Seite 1 von 2  1 2   

Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf