Delphi-PRAXiS
Seite 3 von 5     123 45      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Schule Adressbuch (https://www.delphipraxis.net/164960-schule-adressbuch.html)

DAVKO 8. Dez 2011 19:36

AW: Schule Adressbuch
 
Liste der Anhänge anzeigen (Anzahl: 1)
danke erstmal :)

jetzt sind es gleich weniger fehler, nun sagt er mir er kennt positionieren nicht und

CloseFile(datei);
Buffer[p+1].name:='';

closeile meldet er flasch und name

poste den code noch mal und mach einen anhang mit beta1.1

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

type Adresse = record
       name: string[50];
       strasse: string[100];
       plz: integer;
       ort: string[50];
     end;

var datei: file of Adresse;



implementation

 procedure TForm1.FormCreate(Sender: TObject);
var path: String;
begin
  path := ExtractFilePath(ParamStr(0));
  AssignFile(datei, path+'adressen.dat');
  if FileExists(path+'adressen.dat') then ReSet(datei)
  else ReWrite(datei);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  CloseFile(datei);
end;

procedure TForm1.positionieren(datensatz: integer);
var aktdatensatz: Adresse;
begin
  if (datensatz<0) or (datensatz>=FileSize(datei)) then exit
  else begin
    seek(datei, datensatz);
    read(datei, aktdatensatz);
    edit1.text:=aktdatensatz.name;
    edit2.text:=aktdatensatz.strasse;
    edit3.text:=IntToStr(aktdatensatz.plz);
    edit4.text:=aktdatensatz.ort;
  end;
end;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  positionieren(0);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
positionieren(FilePos(datei)-2);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  positionieren(FilePos(datei));
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
 positionieren(FileSize(datei)-1);
end;

procedure TForm1.Button5Click(Sender: TObject);
const
  BufferSize = 32;
var
  Buffer: array[0..BufferSize - 1] of Adresse;
  i, p: integer;
begin
  Seek(datei,0);
  p:=0;
  end;
  CloseFile(datei);
  Buffer[p+1].name:='';
  Buffer[p+1].strasse:='';
  Buffer[p+1].plz:=0;
  Buffer[p+1].ort:='';
  ReWrite(datei);
  for i:=0 to p do write(datei, Buffer[i]);
  positionieren(FileSize(datei)-1);
end;


procedure TForm1.Button7Click(Sender: TObject);
var datensatz: Adresse;
    nr: integer;
begin
  Seek(Datei,FilePos(Datei)-1);
  nr:=FilePos(datei);
  datensatz.name:=Edit1.Text;
  datensatz.strasse:=Edit2.Text;

  datensatz.plz:=StrToIntDef(Edit3.Text, -1);

  datensatz.ort:=Edit4.Text;
  write(datei,datensatz);
  positionieren(nr);
end;
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
const
  BufferSize = 32;

procedure TForm1.Button6Click(Sender: TObject);
var
  Buffer: array[0..BufferSize - 1] of Adresse;
  i, p: Integer;
  StartRecord, EndRecord: Integer;
  Max: Integer;
begin
  Seek(Datei, FilePos(Datei)-1);
  StartRecord := FilePos(Datei) + 1;
  EndRecord := FileSize(Datei);

  while StartRecord < EndRecord do begin

    Max := BufferSize;
    if Max > EndRecord - StartRecord then
      Max := EndRecord - StartRecord;
    Seek(Datei, StartRecord);
    for i := 0 to Max - 1 do
      Read(Datei, Buffer[i]);

    Seek(Datei, StartRecord - 1);
    for i := 0 to Max - 1 do
      Write(Datei, Buffer[i]);
    inc(StartRecord);
  end;

  Truncate(Datei);
  Positionieren(StartRecord-1);
end;
end;

end.

wicht 8. Dez 2011 19:38

AW: Schule Adressbuch
 
"positionieren" muss in die Definition von TForm1.

Also:

Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure positionieren(datensatz: integer); // HIER!!!
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

DAVKO 8. Dez 2011 19:42

AW: Schule Adressbuch
 
habe nur noch einen ehler

procedure TForm1.Button7Click(Sender: TObject);

da makiert er mir Button7Click

warum?

hier noch mal den ganzen code

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure positionieren(datensatz: integer);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

type
  Adresse = record
    name: string[50];
    strasse: string[100];
    plz: integer;
    ort: string[50];
  end;

var datei: file of Adresse;



implementation

{$R *.dfm}

 procedure TForm1.FormCreate(Sender: TObject);
var path: String;
begin
  path := ExtractFilePath(ParamStr(0));
  AssignFile(datei, path+'adressen.dat');
  if FileExists(path+'adressen.dat') then ReSet(datei)
  else ReWrite(datei);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  CloseFile(datei);
end;

procedure TForm1.positionieren(datensatz: integer);
var aktdatensatz: Adresse;
begin
  if (datensatz<0) or (datensatz>=FileSize(datei)) then
    exit
  else
  begin
    seek(datei, datensatz);
    read(datei, aktdatensatz);
    edit1.text:=aktdatensatz.name;
    edit2.text:=aktdatensatz.strasse;
    edit3.text:=IntToStr(aktdatensatz.plz);
    edit4.text:=aktdatensatz.ort;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  positionieren(0);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  positionieren(FilePos(datei)-2);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  positionieren(FilePos(datei));
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  positionieren(FileSize(datei)-1);
end;

procedure TForm1.Button5Click(Sender: TObject);
const
  BufferSize = 32;
var
  Buffer: array[0..BufferSize - 1] of Adresse;
  i, p: integer;
begin
  Seek(datei,0);
  p:=0;
  while not eof(datei) do
  begin
    Read(datei, Buffer[p]);
    inc(p);
  end;
  CloseFile(datei);
  Buffer[p+1].name:='';
  Buffer[p+1].strasse:='';
  Buffer[p+1].plz:=0;
  Buffer[p+1].ort:='';
  ReWrite(datei);
  for i:=0 to p do
  begin
    write(datei, Buffer[i]);
  end;
  positionieren(FileSize(datei)-1);
end;


procedure TForm1.Button7Click(Sender: TObject);
var datensatz: Adresse;
    nr: integer;
begin
  Seek(Datei,FilePos(Datei)-1);
  nr:=FilePos(datei);
  datensatz.name:=Edit1.Text;
  datensatz.strasse:=Edit2.Text;
  datensatz.plz:=StrToIntDef(Edit3.Text, -1);
  datensatz.ort:=Edit4.Text;
  write(datei,datensatz);
  positionieren(nr);
end;

procedure TForm1.Button6Click(Sender: TObject);
const
  BufferSize = 32;
var
  Buffer: array[0..BufferSize - 1] of Adresse;
  i, p: Integer;
  StartRecord, EndRecord: Integer;
  Max: Integer;
begin
  Seek(Datei, FilePos(Datei)-1);
  StartRecord := FilePos(Datei) + 1;
  EndRecord := FileSize(Datei);

  while StartRecord < EndRecord do
  begin
    Max := BufferSize;
    if Max > EndRecord - StartRecord then
      Max := EndRecord - StartRecord;
    Seek(Datei, StartRecord);
    for i := 0 to Max - 1 do
    begin
      Read(Datei, Buffer[i]);
    end;
    Seek(Datei, StartRecord - 1);
    for i := 0 to Max - 1 do
    begin
      Write(Datei, Buffer[i]);
    end;
    inc(StartRecord);
  end;
  Truncate(Datei);
  Positionieren(StartRecord-1);
end;

end.
habe den code von haentschman als berichtigung uebernommen.

wicht 8. Dez 2011 19:44

AW: Schule Adressbuch
 
Du musst hier

Delphi-Quellcode:
type
  TForm1 = class(TForm)
  [...]
ein "procedure Button7Click(Sender: TObject);" noch hinzufügen. Alles, was mit "TForm1." beginnt, gehört da rein! :stupid:

So, Besuch, ich bin raus...

DAVKO 8. Dez 2011 19:46

AW: Schule Adressbuch
 
danke wichtel dir noch einen schoenen abend.

wie genau fuege ich diesen ein?

edit: hab es danke, wandel das ganze nun mal ein wenig um und hofe mach keine fehler...

himitsu 8. Dez 2011 19:47

AW: Schule Adressbuch
 
Das Positionieren wurde ja schon gemacht, nun nochmal die Variable.

Delphi-Quellcode:
unit Unit1;

interface

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

type
  Adresse = record
    name: string[50];
    strasse: string[100];
    plz: integer;
    ort: string[50];
  end;

  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
  private
    { Private-Deklarationen }
    datei: file of Adresse;
    procedure positionieren(datensatz: integer);
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
...

PS: Er meckerte doch Positionieren kenne er nicht.
Recht hat er,
denn schaut mal an der Stelle, wo das bemängelt hatte "hoch" ... ihr werdet dort nirgendwo eine Deklaration finden. (notfalls auch mal auf die Rechtschreibung schauen)
Und schwups, wäre der Fehler klar gewesen, denn was man "noch" nicht kennt, das kann man auch nicht finden.

himitsu 8. Dez 2011 19:55

AW: Schule Adressbuch
 
Tipp (wenn man sich seinen Quellcode komplett "zerschossen" hat):

* neue Form erstellen

* Folgendes dort rein:
Delphi-Quellcode:
type
  Adresse = record
    name: string[50];
    strasse: string[100];
    plz: integer;
    ort: string[50];
  end;

  TForm1 = class(TForm)
   
  private
    { Private-Deklarationen }
    datei: file of Adresse;
    procedure positionieren(datensatz: integer);
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation
* mit dem Cursor auf
Delphi-Quellcode:
positionieren
und Strg+Shift+C

* in die alte Form gehn

* alle Komponenten (im Fenster) makieren, kopieren und in der neuen Form einfügen

* ab jetzt das Projekt nicht speichern

* dann über den OI alle Events neu erzeugen
* * doppelt auf die Buttons klicken
* * über den OI OnCreate und OnDestroy anlegen

* aus dem alten Projekt die Prozedurinhalte in die neuen Prozeduren kopieren (Jede einzeln)

* nun kann man wieder speichern (habt ihr zwischendurch gespeichert, dann muß man die noch leeren Prozeduren erneut erstellen, da sie entfernt wurden, weil der Compiler dachte die braucht keiner ... oder man schreibt erstmal überall schnell ein
Delphi-Quellcode:
//
zwischen BEGIN und END )
Oder man erstellt nur die jeweilige Prozedur, für welche man grade den Code neu einfügen will.

DAVKO 8. Dez 2011 20:23

AW: Schule Adressbuch
 
Liste der Anhänge anzeigen (Anzahl: 1)
so mal die geaenderte version als anhang.

hab folgendes problem.

auch wenn er keine fehler anteigt, geht das programm nicht richtig. er speichert nix sondern zeigt nur eine ehlermeldung an. habt ihr da eine erklärung?
kann wer helfen?

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Edit5: TEdit;
    Label5: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure positionieren(datensatz: integer);
    procedure Button7Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

type
  Adresse = record
    Vorname: string[50];
    Nachname: string[50];
    Wohnort: string[100];
    Alter: integer;
    Geburtstag: string[50];
  end;

var datei: file of Adresse;



implementation

{$R *.dfm}

 procedure TForm1.FormCreate(Sender: TObject);
var path: String;
begin
  path := ExtractFilePath(ParamStr(0));
  AssignFile(datei, path+'adressen.dat');
  if FileExists(path+'adressen.dat') then ReSet(datei)
  else ReWrite(datei);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  CloseFile(datei);
end;

procedure TForm1.positionieren(datensatz: integer);
var aktdatensatz: Adresse;
begin
  if (datensatz<0) or (datensatz>=FileSize(datei)) then
    exit
  else
  begin
    seek(datei, datensatz);
    read(datei, aktdatensatz);
    edit1.text:=aktdatensatz.Vorname;
    edit2.text:=aktdatensatz.Wohnort;
    edit3.text:=IntToStr(aktdatensatz.Alter);
    edit4.text:=aktdatensatz.Geburtstag;
    edit5.text:=aktdatensatz.Nachname;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  positionieren(0);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  positionieren(FilePos(datei)-2);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  positionieren(FilePos(datei));
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  positionieren(FileSize(datei)-1);
end;

procedure TForm1.Button5Click(Sender: TObject);
const
  BufferSize = 32;
var
  Buffer: array[0..BufferSize - 1] of Adresse;
  i, p: integer;
begin
  Seek(datei,0);
  p:=0;
  while not eof(datei) do
  begin
    Read(datei, Buffer[p]);
    inc(p);
  end;
  CloseFile(datei);
  Buffer[p+1].Vorname:='';
  Buffer[p+1].Wohnort:='';
  Buffer[p+1].Alter:=0;
  Buffer[p+1].Geburtstag:='';
  Buffer[p+1].Nachname:='';
  ReWrite(datei);
  for i:=0 to p do
  begin
    write(datei, Buffer[i]);
  end;
  positionieren(FileSize(datei)-1);
end;


procedure TForm1.Button7Click(Sender: TObject);
var datensatz: Adresse;
    nr: integer;
begin
  Seek(Datei,FilePos(Datei)-1);
  nr:=FilePos(datei);
  datensatz.Vorname:=Edit1.Text;
  datensatz.Wohnort:=Edit2.Text;
  datensatz.Alter:=StrToIntDef(Edit3.Text, -1);
  datensatz.Geburtstag:=Edit4.Text;
  datensatz.Nachname:=Edit5.Text;
  write(datei,datensatz);
  positionieren(nr);
end;

procedure TForm1.Button6Click(Sender: TObject);
const
  BufferSize = 32;
var
  Buffer: array[0..BufferSize - 1] of Adresse;
  i, p: Integer;
  StartRecord, EndRecord: Integer;
  Max: Integer;
begin
  Seek(Datei, FilePos(Datei)-1);
  StartRecord := FilePos(Datei) + 1;
  EndRecord := FileSize(Datei);

  while StartRecord < EndRecord do
  begin
    Max := BufferSize;
    if Max > EndRecord - StartRecord then
      Max := EndRecord - StartRecord;
    Seek(Datei, StartRecord);
    for i := 0 to Max - 1 do
    begin
      Read(Datei, Buffer[i]);
    end;
    Seek(Datei, StartRecord - 1);
    for i := 0 to Max - 1 do
    begin
      Write(Datei, Buffer[i]);
    end;
    inc(StartRecord);
  end;
  Truncate(Datei);
  Positionieren(StartRecord-1);
end;

end.

himitsu 8. Dez 2011 21:14

AW: Schule Adressbuch
 
Zitat:

auch wenn er keine fehler anteigt, geht das programm nicht richtig. er speichert nix sondern zeigt nur eine ehlermeldung an. habt ihr da eine erklärung?
Nein, da wir diesen Fehlertext nicht kennen. (irgendwer hat vergessen uns diesen zu nennen)

Tipp: Strg+C in dem Exceptionfenster machen und hier dann Strg+V.



Ansonsten: Debuggen !!!

Der Debugger zeigt doch bestimmt eine Fehlerstelle an?
Davor einen Haltepunkt (F5) machen
und das Programm neu starten (im Debugger).

Danach kann man schön mit F7 durch den Code steppen und kann sich nebenbei die Variablen ansehn (z.B. die Maus drüberhalten), ob sie die erwarteten Werte enthalten
und/oder sich oben mal das Menü "Start" genauer ansehn.

Bummi 8. Dez 2011 21:21

AW: Schule Adressbuch
 
Liste der Anhänge anzeigen (Anzahl: 1)
Evnets von FromCreate und Fromdestroy waren nicht angehängt.
Button7 (Speichern) war im Code implementiert, der Button selbst fehlt.
Keine Ahnung wie der Code zusammenkopiert wurde.
Von weiteren privaten Benachrichtigungen diesbezüglich bitte ich abzusehen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:46 Uhr.
Seite 3 von 5     123 45      

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