| Autor |
Beitrag |
FiceGoesDelphi
      
Beiträge: 485
Win XP Prof
Delphi 2006
|
Verfasst: 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  )
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.
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 public 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

_________________ <(^^<) <(^^)> (>^^)>
===================
|
|
ZeitGeist87
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: 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 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
      
Beiträge: 8554
Erhaltene Danke: 481
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: 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 
      
Beiträge: 485
Win XP Prof
Delphi 2006
|
Verfasst: Mi 04.04.07 09:42
Ach hi Stefan.... welch Überraschung
weil ich Records lernen soll ...
Danach! Wenn ich das kann ... kann ich es gerne nochmal so machen, wie du meinst!
Momentan habe ich:
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 public 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? 
_________________ <(^^<) <(^^)> (>^^)>
===================
|
|
ene
      
Beiträge: 779
Erhaltene Danke: 1
Vista, XP, W2K
Delphi, .Net, Deutsch und Englisch
|
Verfasst: Mi 04.04.07 09:50
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); For i:= Low(Personen) To High(Personen) Do Begin Personen[i].Irgendwas:= WasAnderes End; End; | Moderiert von Klabautermann: Delphi-Tags eingefügt.
|
|
ZeitGeist87
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: 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 
      
Beiträge: 485
Win XP Prof
Delphi 2006
|
Verfasst: 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
      
Beiträge: 604
Erhaltene Danke: 4
Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
|
Verfasst: 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
      
Beiträge: 238
Erhaltene Danke: 4
Win XP Pro, Vista Ultimate Trial :o)
D6 Pro, D7 Pro, Turbo, XE SE
|
Verfasst: Mi 04.04.07 09:54
Tach ...,
hier findest du Antworten auf deine Fragen incl. der Speicherung deiner kleinen 'Adressdatenbank'.
LG Mario
|
|
ene
      
Beiträge: 779
Erhaltene Danke: 1
Vista, XP, W2K
Delphi, .Net, Deutsch und Englisch
|
Verfasst: Mi 04.04.07 09:54
Das kommt von Copy'n'Paste
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| Var Personen : Array Of TPerson; i: Integer; Begin SetLength(Personen, 10); 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 
      
Beiträge: 485
Win XP Prof
Delphi 2006
|
Verfasst: Mi 04.04.07 09:55
1. Welche idee von Stefan meinst du Chris?
2. Ich denke doch schon selber
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 
_________________ <(^^<) <(^^)> (>^^)>
===================
|
|
FiceGoesDelphi 
      
Beiträge: 485
Win XP Prof
Delphi 2006
|
Verfasst: Mi 04.04.07 09:56
Hobby-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
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: Mi 04.04.07 10:08
Mal grob zum Anschauen:
Speichert bis jetzt nur (5 Minuten Programmieraufwand)
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 public 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);
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
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: 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 
      
Beiträge: 485
Win XP Prof
Delphi 2006
|
Verfasst: Mi 04.04.07 10:33
Ja das stimmt
Aber auch da wüsste ich nicht wie es geht
Ich glaube ich bin für Delphi einfach nicht geschaffen ;(
_________________ <(^^<) <(^^)> (>^^)>
===================
|
|
ZeitGeist87
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: Mi 04.04.07 10:44
fragen, lesen 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:
|
function Record2Database(Person: array of TPerson): Boolean; var statement: string; i: Integer; begin Record2Database:= false; statement:= ''; 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 exit; end; end; 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
      
Beiträge: 779
Erhaltene Danke: 1
Vista, XP, W2K
Delphi, .Net, Deutsch und Englisch
|
Verfasst: Mi 04.04.07 10:47
Sicher, dass du das Alter als String speichern willst?
|
|
ZeitGeist87
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: 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
      
Beiträge: 851
Win 2000 Win XP Vista
D7 Ent, SharpDevelop 2.2
|
Verfasst: 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
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: 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.
|
|
|