Delphi-PRAXiS

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 15: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 15: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 15: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 16: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 16: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 16: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 16: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 17: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 11: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 15: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?

p80286 22. Dez 2012 21:35

AW: Save-Probleme
 
Zitat:

Zitat von parethol (Beitrag 1196418)
heisst das nicht nur, dass ich noch ich so bewusst eine schreib geschützte Datei generiere?

?????

Wenn du als Attribute
Delphi-Quellcode:
faHidden or faArchive
nutzt, funktioniert auch das
Delphi-Quellcode:
.Savetofile
Gruß
K-H

parethol 27. Dez 2012 13:47

AW: Save-Probleme
 
also ich habe das Problem gefunden.
Ich hatte FileSetAttr(dir+'\test.csv', faHidden ); in meinem Programm das test.csv,- also Test.csv - gross geschrieben. hatte ich dies auf klein geändert hat es funktioniert. Ich bedanke mich hiermit für eure Hilfe.

Gruss Oli

DeddyH 27. Dez 2012 13:49

AW: Save-Probleme
 
Läuft das Programm unter Linux? Unter Windows sollten Groß- und Kleinschreibung keine Rolle spielen.

parethol 27. Dez 2012 13:53

AW: Save-Probleme
 
nein, läuft unter Windows XP. ich habe mit Delphi 7 diverse Spektakel bereits gefunden. Wahrscheindlich hiermit ein weiteres gefunden.

SearchBot 29. Dez 2012 00:26

AW: Save-Probleme
 
Das könnte für dich interessant sein:

http://technet.microsoft.com/de-de/l...(v=ws.10).aspx
(Wegen Groß/Kleinschreibung unter Windows)
:roll:

parethol 8. Jan 2013 07:12

AW: Save-Probleme
 
ich habe noch einen Nachtrag zu machen, damit es komplet korrekt Funktioniert. Ich musst vor dem Speichern die Attribute auf
Delphi-Quellcode:
SetFileAttributes(test.csv, FILE_ATTRIBUTE_NORMAL)
setzen um es danach wieder zu verstecken. So funktioniert es einwandfrei.

Gruss Oli


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:16 Uhr.

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