Autor Beitrag
FiceGoesDelphi
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 485

Win XP Prof
Delphi 2006
BeitragVerfasst: Mi 04.04.07 09:31 
Morgen ;)
Wenn euch der Thread nicht passt und ihr meckern wollt, dass es sowas doch schon 100 mal gibt, dann wünsche ich euch noch einen schönen Tag und bis dann mal.
Für alle anderen (Stefan :lol: )
ich möchte weiter lernen und habe deswg jetzt die Aufgabe zu lernen wie man Records speichern, einlesen und wieder ausgeben kann. Das kann man am besten mit so einem Karteikasten lernen. Meinen Ansatz, welchen ich in der letzten Minute geschrieben habe könnt ihr hier sehen.

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
unit Unit1;

interface

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

type
  TPersonen = Record
    Name: String;
    Vorname: String;
    Geburtsort: String;
    Telefon: Integer;
    Wohnort: String;
    Postleitzahl: Integer;
    Geburtsdatum: TDate;
  end;
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var Personen : Array [1..10] of TPersonen;
    f: file of TPersonen;
    i: integer;
    datei: String;
begin
  for I := 0 to 10 do begin
    Personen[i].Name := TEdit1.text
end;

end.


Ich weiß das hier viel falsch ist usw. Aber das ist mein kleiner Ansatz. Bin ja noch laaaangeee nicht fertig!
Schöne grüße an Stefan und Chris, die wahrscheinlich die einzigen sind, die hier schreiben ;)
:rofl:

_________________
<(^^<) <(^^)> (>^^)>
===================
ZeitGeist87
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1593
Erhaltene Danke: 20

Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
BeitragVerfasst: Mi 04.04.07 09:37 
Hallo!

Ich weiß gar nicht, ob dus wusstest, aber ichs bins: Stefan :)

Zum eigentlichem Thema:

Records sind ja schön und gut, aber warum löst du das ganze nicht über Suche in der Entwickler-Ecke INI-Files?

Aber vom Ansatz ist deine Idee nicht verkehrt.

Ich würde nur das array of TPersonen global anlegen und dynamisch machen, denn wenn ich 10 Personen anlegt habe, kann ich keinen 11 mehr eintragen.

Du könntest aber auch es unter einem bestimmen Format speichern, alles mit Komma getrennt in einer Zeile und beim Auslesen dann parsen.

Also es gibt zig Möglichkeiten, das Ganze zu lösen.

LG
Stefan

_________________
Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 04.04.07 09:41 
Haut mich, wenn ich was falsches sage, aber gehen Konstrukte mit "File of Record" nur dann, wenn die Records konstante Größe haben? Das schließt die Verwendung von (Ansi)Strings afaik aus. Dinge wie String[42] dürften aber gehen.

_________________
We are, we were and will not be.
FiceGoesDelphi Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 485

Win XP Prof
Delphi 2006
BeitragVerfasst: Mi 04.04.07 09:42 
Ach hi Stefan.... welch Überraschung :roll: :lol:

weil ich Records lernen soll ... :roll: ;)
Danach! Wenn ich das kann ... kann ich es gerne nochmal so machen, wie du meinst!
Momentan habe ich:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
unit Unit1;

interface

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

type
  TStrasse = Record
    Strasse: String;
    Hausnummer: Integer;
  end;
  TPersonen = Record
    Name: String;
    Vorname: String;
    Strasse: TStrasse;
    Geburtsort: String;
    Telefon: Integer;
    Wohnort: String;
    Postleitzahl: Integer;
    Geburtsdatum: TDate;
  end;
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var Personen : Array [1..10] of TPersonen;
    f: file of TPersonen;
    i: integer;
    datei: String;
begin
  for I := 0 to 10 do begin
    Personen[i].Name := TEdit1.text;
    Personen[i].Vorname := TEdit2.text;
    Personen[i].Strasse := TEdit3.text;

  end;
end;

end.


wobei ich N00B mal wieder den Befehl vergessen habe der hier eigentlich richtig wäre:
"IchWillDasHier := DasStehtWasInTEdit1.ist"
wenn du verstehst ^^


EDIT:
Würde ich gerne machen! Also das Array of Tpersonen dynamisch halten. Nur wie geht das genau? :oops:

_________________
<(^^<) <(^^)> (>^^)>
===================
ene
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 779
Erhaltene Danke: 1

Vista, XP, W2K
Delphi, .Net, Deutsch und Englisch
BeitragVerfasst: Mi 04.04.07 09:50 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var Personen : Array [1..10] of TPersonen;

Var Personen : Array Of TPerson; i: Integer;
Begin
  SetLength(Personen, 10); //Dimensioniert auf
  For i:= Low(Personen) To High(Personen) Do Begin
    Personen[i].Irgendwas:= WasAnderes
  End;
End;


Moderiert von user profile iconKlabautermann: Delphi-Tags eingefügt.
ZeitGeist87
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1593
Erhaltene Danke: 20

Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
BeitragVerfasst: Mi 04.04.07 09:52 
setlength() musst du nicht machen, da du die Größe bei der Deklaration schon angegeben hast.

LG
Stefan

_________________
Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
FiceGoesDelphi Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 485

Win XP Prof
Delphi 2006
BeitragVerfasst: Mi 04.04.07 09:53 
Danke Jan!
Kannst du mir die "10" erklären? Ich dachte ich machs dynamisch. Also das auch 20 oder 100 Personen eingetragen werden können. In wie weit ist die "10" da jetzt wichtig und was macht sie?

Ich hab eben einfach immer "Tedit1.text" geschrieben .. das "t" war zu viel -.-

_________________
<(^^<) <(^^)> (>^^)>
===================
freak4fun
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 604
Erhaltene Danke: 4

Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
BeitragVerfasst: Mi 04.04.07 09:53 
Wie wäre es mal mit selber denken? ;) Schau dir die Fehlermeldung und deine Variablenbezeichner an und gut.

BTW: Stefans Idee ist gut. :)

MfG
freak

_________________
"Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen


Zuletzt bearbeitet von freak4fun am Mi 04.04.07 09:55, insgesamt 1-mal bearbeitet
Hobby-Programmierer
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 238
Erhaltene Danke: 4

Win XP Pro, Vista Ultimate Trial :o)
D6 Pro, D7 Pro, Turbo, XE SE
BeitragVerfasst: Mi 04.04.07 09:54 
Tach ...,
hier findest du Antworten auf deine Fragen incl. der Speicherung deiner kleinen 'Adressdatenbank'.

LG Mario
ene
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 779
Erhaltene Danke: 1

Vista, XP, W2K
Delphi, .Net, Deutsch und Englisch
BeitragVerfasst: Mi 04.04.07 09:54 
Das kommt von Copy'n'Paste

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
Var Personen : Array Of TPerson; i: Integer;
Begin
  SetLength(Personen, 10); //Dimensioniert auf
  For i:= Low(Personen) To High(Personen) Do Begin
    Personen[i].Irgendwas:= WasAnderes
  End;
End;


Das ist dann ein dynamisches Array. Um das Array zu löschen kannst du dann Personen:= Nil schreiben.

Ansonsten habe ich nicht so weit reingeschaut um zu wissen, woher die 10 kommt, man kann dort auch mit einer Variablen arbeiten. SetLength(Personen, x);


Zuletzt bearbeitet von ene am Mi 04.04.07 09:56, insgesamt 1-mal bearbeitet
FiceGoesDelphi Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 485

Win XP Prof
Delphi 2006
BeitragVerfasst: Mi 04.04.07 09:55 
1. Welche idee von Stefan meinst du Chris?
2. Ich denke doch schon selber :angel: :(
3. Ich beschäftige mich seit maximal 6 wochen mit Delphi
4. Ich denke sooooo schlecht bin ich nicht, wenn man die Zeit bedenkt.
5. Ich mag dich auch ;) :rofl:

_________________
<(^^<) <(^^)> (>^^)>
===================
FiceGoesDelphi Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 485

Win XP Prof
Delphi 2006
BeitragVerfasst: Mi 04.04.07 09:56 
user profile iconHobby-Programmierer hat folgendes geschrieben:
Tach ...,
hier findest du Antworten auf deine Fragen incl. der Speicherung deiner kleinen 'Adressdatenbank'.

LG Mario


Thx :)
Ich werds mir mal durchlesen :!:

_________________
<(^^<) <(^^)> (>^^)>
===================
ZeitGeist87
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1593
Erhaltene Danke: 20

Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
BeitragVerfasst: Mi 04.04.07 10:08 
Mal grob zum Anschauen:

Speichert bis jetzt nur (5 Minuten Programmieraufwand)

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
unit Unit1;

interface

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

type RPerson = record
      Vorname: string[50];
      Name: string[50];
      PLZ: string[5];
      Alter: Integer;
end;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Button1: TButton;
    Edit4: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  Person: array of RPerson;
  perdatei: file of RPerson;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
 setlength(Person, high(Person)+1+1);

 Person[high(Person)].Vorname:= pchar(edit1.text);
 Person[high(Person)].Name:= edit2.text;
 Person[high(Person)].PLZ:= edit3.text;
 Person[high(Person)].Alter:= strtoint(edit4.text);

 //Speichern
 assignfile(perdatei, 'C:\Personen.txt');
 rewrite(perdatei);
 for i:= low(Person) to high(Person) do
  write(perdatei, Person[i]);

 closefile(perdatei);
end;

end.


LG
Stefan

_________________
Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
ZeitGeist87
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1593
Erhaltene Danke: 20

Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
BeitragVerfasst: Mi 04.04.07 10:21 
Du könntest auch den Record nehmen und dann in die DB schreiben^^
Und beim Start alles in den Record laden^^

Mal so nebenbei^^...Es wurde ja nicht gesagt, wie du den abspeichern sollst oder^^

_________________
Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
FiceGoesDelphi Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 485

Win XP Prof
Delphi 2006
BeitragVerfasst: Mi 04.04.07 10:33 
Ja das stimmt :D
Aber auch da wüsste ich nicht wie es geht :(
Ich glaube ich bin für Delphi einfach nicht geschaffen ;(

_________________
<(^^<) <(^^)> (>^^)>
===================
ZeitGeist87
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1593
Erhaltene Danke: 20

Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
BeitragVerfasst: Mi 04.04.07 10:44 
fragen, lesen

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
{
  Vorraussetzung: Person: array of TPerson; (global)
      Datenbankstruktur
}


function Record2Database(Person: array of TPerson): Boolean;
var statement: string;
    i: Integer;
begin
 
 Record2Database:= false;
 statement:= '';
 //bei MySQL 5.x kannst evtl. mit Transactiontracking arbeiten;
 //Starte Transactiontracking
 for i:= low(Person) to high(Person) do
 begin
  statment:= 'Insert into Personen (Vorname, Name, PLZ, Alter) values (''' + Personen[i].Vorname + ''', ''' + Personen[i].Name + ''', ''' + Personen[i].PLZ + ''', ''' + inttostr(Personen[i].Alter) + ''' )';
  query1.sql.text:= statement;
  try
   query1.execsql;
  except
   on e: exception do
   begin
    //rollback work
    //Fehlermeldung
    exit;
   end;
  end;
  //commit work
  //Alles OK
  record2Database:= true;
 end;
end;


LG
Stefan

_________________
Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
ene
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 779
Erhaltene Danke: 1

Vista, XP, W2K
Delphi, .Net, Deutsch und Englisch
BeitragVerfasst: Mi 04.04.07 10:47 
Sicher, dass du das Alter als String speichern willst?
ZeitGeist87
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1593
Erhaltene Danke: 20

Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
BeitragVerfasst: Mi 04.04.07 10:49 
Schon mal mit Datenbanken gearbeitet? :)

Der MySQL-Engine musst dus als String übergeben, sie wandelt selber um

LG
Stefan

_________________
Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
noidic
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 851

Win 2000 Win XP Vista
D7 Ent, SharpDevelop 2.2
BeitragVerfasst: Mi 04.04.07 10:54 
Die Frage ist gut, du anscheinend noch nicht oft :)

Werte für Felder sollte man nach Möglichkeit als den Typ übergeben, der auch hinterher in dem Feld stehen soll. Also varchar/char - Feleder mit Strings befüllen, integer-Felder mit Integers usw.

Klar gehts auch, alles als String zu übergeben, schön ist das aber nicht :)

Außerdem wäre es sehr schick, das Statement nicht auf diese Weise zusammenzustückeln, sondern als Konstante zu definieren und die Werte dann als Parameter zu setzen.

Aber ich weiss nicht, ob das zuviel Codestrukturierung für diesen Thread ist ;)

_________________
Bravery calls my name in the sound of the wind in the night...
ZeitGeist87
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1593
Erhaltene Danke: 20

Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
BeitragVerfasst: Mi 04.04.07 10:56 
Dann zeig mir bitte das Statement, in welches du den Integer an das Query-Object übergibst und ich nehm alles zurück!

Ich arbeitete seit 3 Jahren täglich mit Datenbanken..außer wenn ich Urlaub hab!

Und letztenendes war das ganze mit dem "zusammenstückeln" nur n Aufzeig dafür, wie überhaupt so ein Statement aussieht.

Man kann das natürlich unendlich aufblähen, ist schon klar!

LG
Stefan

_________________
Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.