![]() |
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:
Folgende Fehlermeldung tritt auf:
//-------------------------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; 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 |
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))?
|
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.
|
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:
das sind die einzigen zwei Syntaxblöcke welche mit dem Zugriff auf die Daten zu tun haben.
//-------------------------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; Beisst sich hierbei etwas gegenseitig? Neu boot hat nichts gebracht. Gruss |
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.
|
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? |
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.
|
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:
Innerhalb dieser Prozedur wird nur der Parameter dateiname benützt; so wird das eine saubere Sache.
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); 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. |
AW: Save-Probleme
Zitat:
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 |
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:
Gibt es keine anderen Befehle die Attribute zu setzen? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz