Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi kann eintrag aus stringgrid nicht in txt-datei speichern (https://www.delphipraxis.net/126946-kann-eintrag-aus-stringgrid-nicht-txt-datei-speichern.html)

Molzer 5. Jan 2009 14:15


kann eintrag aus stringgrid nicht in txt-datei speichern
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo!!

Probier schon so lange herrum, kann mir wer helfen?
Fehler von Deppugger-Exeption:
..eine Exception der Klasse EInOutError mit der Meldung 'E/A-Fehler 32' aufgetreten.

Da ich Anfänger bin kann natürlich mehr falsch sein :oops: ,
bitte das zu entschuldigen... danke (anbei ein bild

Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;

type
  TDB=class
  name,titel:string;
  end;



type
  TForm2 = class(TForm)
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    s: TStringGrid;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
  DB:TDB;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}
var f:textfile;
i:integer;
procedure TForm2.FormCreate(Sender: TObject);
begin
DB:=TDB.Create;
s.Cells[0,0]:='aa';
s.Cells[0,1]:='1';
s.Cells[0,2]:='2';
s.Cells[1,0]:='Titel';
s.Cells[2,0]:='Name' ;

end;
procedure TForm2.Button1Click(Sender: TObject);
begin
if opendialog1.execute then
begin
  assignfile (f,opendialog1.FileName);
  reset(f);
  rewrite(f);
  begin
        with DB do
        begin
          WriteLn(F,Titel+'|',Name);

end;
end;
end;
end;
end.

nahpets 5. Jan 2009 14:22

Re: kann eintrag aus stringgrid nicht in txt-datei speichern
 
Hallo,

kommentiere mal das Reset(f) aus, dass dürfte in Deinem Zusammenhang überflüssig (und die Fehlerursache) sein. Du möchtest eine Datei erstellen, Reset will aber eine bestehende Datei öffnen. Wenn Du jetzt hergehst, und die Datei öffnest und dann überschreibst, scheitert das anscheinend.

Molzer 5. Jan 2009 14:33

Re: kann eintrag aus stringgrid nicht in txt-datei speichern
 
würde aber gerne eine bestehende datei überschreiben,bzw etwas dran hängen.
oder ist es besser sie vorher einzulesen, dazu fehlt mir aber noch der text..

fg

Molzer 5. Jan 2009 14:37

Re: kann eintrag aus stringgrid nicht in txt-datei speichern
 
ohne dem kommt "e/a fehler 32"

Luckie 5. Jan 2009 14:46

Re: kann eintrag aus stringgrid nicht in txt-datei speichern
 
Zitat:

Zitat von Molzer
würde aber gerne eine bestehende datei überschreiben,bzw etwas dran hängen.

Dann musst du eine Fallunterscheidung machen. Wenn datei existiert, dann bestehende öffnen und Daten anhängen und wenn sie nicht existiert, eine neue Datei erstellen.

nahpets 5. Jan 2009 14:57

Re: kann eintrag aus stringgrid nicht in txt-datei speichern
 
Hallo,

wenn die Datei existiert, kannst Du mit Append(f) Daten anhängen, existiert sie noch nicht, dann mit ReWrite(f) eine neue Datei erstellen (eine bestehende Datei wird ohne Nachfrage überschrieben). Zum Lesen wird Reset(f) benutzt. Jeder dieser Befehle schließt die gleichzeitige Benutzung der anderen aus.

Versuchs mal so in der Art:
Delphi-Quellcode:
   
AssignFile(f,opendialog1.FileName);
If Not FileExists(opendialog1.FileName) Then Begin
  ReWrite(f);
End Else Begin
  Append(f);
End;
Try
  WriteLn(f,'irgendeintext');
Except
  On e : Exception Do Begin
    ShowMessage(e.Message);
  End;
End;
CloseFile(f);

DeddyH 5. Jan 2009 15:16

Re: kann eintrag aus stringgrid nicht in txt-datei speichern
 
Eben, das CloseFile hat im Ursprungscode auch noch gefehlt.

Molzer 5. Jan 2009 17:56

Re: kann eintrag aus stringgrid nicht in txt-datei speichern
 
nein, leider fehler E/A 102..
bleibt bei append(f) hängen..

hab in der hilfe bissl unter e/a gesucht, bin aber net viel schlauer als vorher... :shock:

was noch ist: in zeile "WriteLn (F, Name);" kann ich nicht writeln(F, Titel+'|',Name+'|',Song+'|');
song und title mag er nicht, warum das? wenn doch name nimmt..

fg

Delphi-Quellcode:
type
  TForm2 = class(TForm)
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    s: TStringGrid;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
  DB:TDB;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}
var f:textfile;
i:integer;
procedure TForm2.FormCreate(Sender: TObject);
begin
DB:=TDB.Create;
s.Cells[0,0]:='';
s.Cells[0,1]:='1';
s.Cells[0,2]:='2';
s.Cells[1,0]:='Titel';
s.Cells[2,0]:='Name';
s.Cells[3,0]:='Song';
end;
procedure TForm2.Button1Click(Sender: TObject);
begin
if opendialog1.execute then
begin
If Not FileExists(opendialog1.FileName) Then Begin
  ReWrite(f);
End Else Begin
  Append(f);
End;
Try
  WriteLn (F, Name);
Except
  On e : Exception Do Begin
    ShowMessage(e.Message);
  End;
End;
CloseFile(f);
end;
end;
end.

DeddyH 5. Jan 2009 17:59

Re: kann eintrag aus stringgrid nicht in txt-datei speichern
 
Wo ist denn das AssignFile?

[edit] Außerdem ist Deine Einrückung etwas unübersichtlich.
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
begin
  if opendialog1.execute then
    begin
      AssignFile(f,opendialog1.FileName); //diese Zeile hat gefehlt
      If Not FileExists(opendialog1.FileName) Then Begin
        ReWrite(f);
      End Else Begin
        Append(f);
      End;
      Try
        WriteLn (F, Name);
      Except
        On e : Exception Do Begin
          ShowMessage(e.Message);
        End;
      End;
      CloseFile(f);
    end;
end;
[/edit]

Molzer 5. Jan 2009 18:08

Re: kann eintrag aus stringgrid nicht in txt-datei speichern
 
Danke, hundertmal gelesen und nicht aufgefallen b :wall:
jetzt schreibt er mir "Form2 |" in die datei und nicht das was ich meinem stringgrid habe??

da ist wohl meine db unbrauchbar??

fg

Molzer 5. Jan 2009 18:14

Re: kann eintrag aus stringgrid nicht in txt-datei speichern
 
hab die zeile mit

Delphi-Quellcode:
Try with db do
    WriteLn (F,Name+'|',song+'|',titel+'|');
ergänzt und jetzt schreibt er mir leider nur das unterm anführungszeichen und nicht das was
ich ins stringgrid schreibe..

fg

DeddyH 5. Jan 2009 18:16

Re: kann eintrag aus stringgrid nicht in txt-datei speichern
 
Du setzt die Properties von DB ja auch nirgends.

[edit] Außerdem führt die Verwendung von with im Zusammenhang mit der Property Name hier wohl zu einer Verwechslung. Lass das with besser weg und schreib es aus.
Delphi-Quellcode:
WriteLn(F,DB.Name + '|' + DB.titel + '|'); //was soll denn song sein?
[/edit]

Molzer 5. Jan 2009 18:27

Re: kann eintrag aus stringgrid nicht in txt-datei speichern
 
song habe ich neu dazugefügt!

hab das jetzt ohne with gemacht, keine wellen mehr, aber leider nichts aus dem stringgrid..

danke für deine hilfe!!!

fg

DeddyH 5. Jan 2009 18:32

Re: kann eintrag aus stringgrid nicht in txt-datei speichern
 
Ich versteh Dich immer noch nicht. Du legst DB neu an, befüllst aber die Properties nicht, sondern schreibst in ein StringGrid. Beim Speichern willst Du aber die nicht befüllten Properties von DB abspeichern anstatt der Zellen des Grids :gruebel:

Molzer 5. Jan 2009 18:37

Re: kann eintrag aus stringgrid nicht in txt-datei speichern
 
ich habs mit

Delphi-Quellcode:
WriteLn (F,s.Cells[1,1]+'|',db.song+'|',db.titel+'|');
da schreibt er mir den text aus der zelle..
das wäre aber bei 20 zeilen mühsam, hab aber keine idee wie ich das mit der db hinbekomme.. leider :cheer:

fg

DeddyH 5. Jan 2009 18:40

Re: kann eintrag aus stringgrid nicht in txt-datei speichern
 
Kannst Du mal einen Screenshot des Grids anhängen?

Molzer 5. Jan 2009 18:44

Re: kann eintrag aus stringgrid nicht in txt-datei speichern
 
Liste der Anhänge anzeigen (Anzahl: 1)
würde es gerne auf 20 zeilen erweitern...
denke da ist wohl einer for i=1 to angebraucht?

DeddyH 5. Jan 2009 18:47

Re: kann eintrag aus stringgrid nicht in txt-datei speichern
 
Das sehe ich auch so, dann kannst Du Dir die Klasse sparen (eine einzige Instanz würde ja eh nicht reichen).
Delphi-Quellcode:
for i := s.FixedRows to Pred(s.RowCount) do
  WriteLn (F,Format('%s|%s|%s',[s.Cells[1,i],s.Cells[2,i],s.Cells[3,i]]));
So in der Art.

Molzer 5. Jan 2009 18:51

Re: kann eintrag aus stringgrid nicht in txt-datei speichern
 
vielen dank für deine hilfe!!!


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:40 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-2025 by Thomas Breitkreuz