AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Schule Adressbuch

Ein Thema von DAVKO · begonnen am 7. Dez 2011 · letzter Beitrag vom 9. Dez 2011
Antwort Antwort
Seite 1 von 2  1 2      
DAVKO

Registriert seit: 7. Dez 2011
14 Beiträge
 
#1

AW: Schule Adressbuch

  Alt 8. Dez 2011, 19:12
hier die datei als anhang. danke
Angehängte Dateien
Dateityp: rar Adressbuch beta 1.rar (12,2 KB, 3x aufgerufen)

Geändert von DAVKO ( 8. Dez 2011 um 19:25 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#2

AW: Schule Adressbuch

  Alt 8. Dez 2011, 19:25
Du benutzt Prozeduren (z.B. TForm1.FormCreate, TForm1.FormDestroy), die nicht in der Klassendefinition vorhanden sind. Erweitere deinen Kram im interface-Abschnitt.
Oben unter

Delphi-Quellcode:
{ ...}
procedure Button6Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
musst du noch

Delphi-Quellcode:
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
schreiben.

Nach "procedure TForm1.Button7Click(Sender: TObject);" hast du am Ende zwei mal "end;" geschrieben - das gehört da aber nur einmal hin - jedes "begin" erfordert ein "end" - da ist eins zu viel.

Dann gibt es noch diese lustige Stelle:

Delphi-Quellcode:
procedure TForm1.Button5Click(Sender: TObject);
begin
const
  BufferSize = 32;

procedure TForm1.Button5Click(Sender: TObject);
Das ist so nicht möglich. Mach mal das obere Zeug (alles über dem zweiten "procedure [...]" weg und tu das "const Buffersize = 32;" direkt unter das zweite Procedure, dass es so aussieht:

Delphi-Quellcode:
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;
Weiter habe ich nicht probiert, bin ja nun selber schwer mit Delphi beschäftigt
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.431 Beiträge
 
Delphi 12 Athens
 
#3

AW: Schule Adressbuch

  Alt 8. Dez 2011, 19:32
...ich war grad dabei.
Im Anhang mal eine korrigierte Unit. (incl. der oben beschriebenen Fehler). Ich habe einfach mal sortiert, begin/end eingefügt. Auch wenn es manchmal nicht notwendig wäre erhöht es durchaus die Übersichtlichkeit, da der Block (z.B. Schleife) besser zu sehen ist. Keine Prüfung der Logik ! Falls ich noch was übersehen habe... ist schon spät
Angehängte Dateien
Dateityp: pas Unit1.pas (3,9 KB, 3x aufgerufen)
  Mit Zitat antworten Zitat
DAVKO

Registriert seit: 7. Dez 2011
14 Beiträge
 
#4

AW: Schule Adressbuch

  Alt 8. Dez 2011, 19:36
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.
Angehängte Dateien
Dateityp: rar Adressbuch beta 1.1.rar (14,7 KB, 2x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#5

AW: Schule Adressbuch

  Alt 8. Dez 2011, 19:38
"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;
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
DAVKO

Registriert seit: 7. Dez 2011
14 Beiträge
 
#6

AW: Schule Adressbuch

  Alt 8. Dez 2011, 19:42
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.
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#7

AW: Schule Adressbuch

  Alt 8. Dez 2011, 19:44
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!

So, Besuch, ich bin raus...
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
DAVKO

Registriert seit: 7. Dez 2011
14 Beiträge
 
#8

AW: Schule Adressbuch

  Alt 8. Dez 2011, 19:46
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...

Geändert von DAVKO ( 8. Dez 2011 um 19:49 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.340 Beiträge
 
Delphi 12 Athens
 
#9

AW: Schule Adressbuch

  Alt 8. Dez 2011, 19:47
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.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 8. Dez 2011 um 20:01 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.340 Beiträge
 
Delphi 12 Athens
 
#10

AW: Schule Adressbuch

  Alt 8. Dez 2011, 19:55
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 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 // zwischen BEGIN und END )
Oder man erstellt nur die jeweilige Prozedur, für welche man grade den Code neu einfügen will.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 8. Dez 2011 um 20:03 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:57 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