Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Records (https://www.delphipraxis.net/90287-records.html)

The Lord 14. Apr 2007 18:40


Records
 
Hallo DP-lers!

Ich habe eigentlich noch nie wirklich mit Records gearbeitet, jedoch wollte ich es gerne ändern.
Im Prinzip ist das Programm, was ich zum üben schreiben möchte eine Adressbuchverwaltung.

Ich habe dafür einen Typ 'Datensatz' deklariert:

Delphi-Quellcode:
type Datensatz = record
       vorname: string[25];
       nachname: string[25];      
       tag: integer;
       monat: integer;
       jahr: integer;    
       bild: string[100];
     end;
Danach habe ich die Variable 'datei' deklariert:

Delphi-Quellcode:
var datei: file of Datensatz;

Des Weiteren habe ich laut Tutorial folgende Prozeduren erstellt:
Delphi-Quellcode:
//Zum Öffnen der Datei

procedure TForm1.FormCreate(Sender: TObject);
begin
  AssignFile(datei,'daten.dat');
  if FileExists('daten.dat') then ReSet(datei)
  else ReWrite(datei);
end;

//Zum Schließen der Datei


procedure TForm1.FormDestroy(Sender: TObject);
begin
  CloseFile(datei);
end;
Weitergehend verstehe ich das Umgehen mit den Records nicht wirklich.
Also wenn ich jetzt mehrere Personen abspeichern will, wie mache ich das?
Und wie kann ich diese wider aufrufen?
Eigentlich will ich nur Strings aus Edit-Feldern speichern und dann den gewünschten Datensatz wieder in diese Felder laden.

Kann mir das jemand nochmal erklären?

Danke :)

PS: Tutorial

Klaus01 14. Apr 2007 19:12

Re: Records
 
Also:

Delphi-Quellcode:
var
  data : Datensatz;
..
  Read(datei,data);
  Write(datei,data);

data.vorname:=edit1.text;
data.nachname:=edit2.text;
..
Mit FileSize(datei) bekommst Du heraus wie viele Datensätze Deine Datei enthält.
Mit Seek(datei,DatensatzNummer) kannst Du direkt zu einem Datensatz gelangen.

Grüße
Klaus

CCRDude 14. Apr 2007 19:18

Re: Records
 
Erstmal vorweg: den Dateinamen ohne jeden Pfad ist schonmal gefährlich, denn falls mal ne Verknüpfung drauf erstellt wird, vielleicht mit anderem Arbeitspfad, sucht das Programm die schon woanders, und dann wundert man sich natürlich, warum das Programm die Daten auf einmal nicht mehr findet...

Die Daten im Programmverzeichnis an sich sind natürlich auch so eine don't-do-Sache, aber fürs üben...

Bleibt zu meinem Vorredner noch EoF (End-of-File) zu erwähnen, will man einfach alle Daten nacheinander auslesen:
Delphi-Quellcode:
while not EoF(datei) do begin
   Read(datei, satz);
   Verarbeite(satz);
end;
Und in ganz weiter Ferne merkt man dann irgendwann, daß es mit einer TCollection irgendwie komfortabler ist ;)

The Lord 14. Apr 2007 19:56

Re: Records
 
Delphi-Quellcode:
var z : integer;
    person : Datensatz;

z:=FileSize(datei);

Seek(datei,z);
Write(datei,person);
person.vorname:=edit1.text;
Schreibe ich so am Ende der Datei den String aus Edit1 ?

dominikkv 14. Apr 2007 20:24

Re: Records
 
Delphi-Quellcode:
type TDatensatz = record
       vorname: string[25];
       nachname: string[25];      
       tag: integer;
       monat: integer;
       jahr: integer;    
       bild: string[100];
     end;

var Tabelle: Array of TDatensatz;

//...

procedure SaveToFile(Dest: string);
var f: file of TDatensatz;
    I: Cardinal;
begin
  try
    assignFile(f, Dest);
    reWrite(f); //oder reset(f)
    for I := low(Tabelle) to high(Tabelle) do
      write(f, Tabelle[i]);  
  finally
    closeFile(f);
  end;
end;


function LoadFromFile(Source: string);
var f: file of TDatensatz;
    I: Cardinal;
begin
  I := 0;
  try
    assignFile(f, Source);
    reset(f);
    SetLength(Tabelle, FileSize(f));
    while not eof(f) do
      begin
        read(f, Tabelle[I]);
        Inc(I);
      end;  
  finally
    closeFile(f);
  end;
end;

procedure irgendwas;
begin
  LoadFromFile('C:\Test.dat');
 
  if high(Tabelle) > 0 then
    begin
      Tabelle[0].Vorname := editVorname.text;
      editNachname.Text := Tabelle[0].Nachname;
    end;

  SaveToFile('C:\Test.dat');
end;
[edit] paar fehler beseitigt^^[/edit]

TonyR 14. Apr 2007 20:33

Re: Records
 
Ich will bloß mal kurz sagen, dass es nach dem Lesen dieses wunderbaren Tutorials eigentlich keine probleme mehr geben sollte! Jedenfalls nicht, wenn man es ordentlich durchgelsen hat und auch mal ein bisschen rumgebastelt hat!!!
Ich hatte damals auf jeden Fall sofort typisierte Dateien anwenden können... mithilfe jenes Tutorials von dsdt!!!

The Lord 15. Apr 2007 10:52

Re: Records
 
Im Prinzip funktionieren Records doch wie INI-Files. Nur das es jetzt nicht mehr egal ist, ob man es an Anfang oder Ende schriebt!?

Ok danke, ich glaube ich werde es hinbekommen. :dp:

The Lord 1. Mai 2007 11:34

Re: Records
 
Es funktioniert doch noch nicht :(

1. Fehlermeldung:

Delphi-Quellcode:
function LoadFromFile(Source: string);
benötigt Ereigenistyp. Ist das dann auch 'string' ?

2. Fehler:

Delphi-Quellcode:
procedure SaveToFile(Dest: string);
var f: file of TDatensatz;
    I: Cardinal;
begin
  try
    assignFile(f, Dest);
    reWrite(f); //oder reset(f)
    for I := low(Tabelle) to high(Tabelle) do
      write(f, Tabelle[i]);
  finally
    closeFile(f);
  end;
end;
Das Programm stürzt wegen Zeile 9 ab.


Delphi-Quellcode:
LoadFromFile('C:\test.dat');
  if high(Tabelle) > 0 then
    begin
      Tabelle[0].Vorname := Edit1.Text;
      //Edit2.Text := Tabelle[0].Nachname;
    end;
  SaveToFile('C:\test.dat');
So kann man doch nur an die Stelle 0 der Tabelle schreiben!?


Helft mir bitte :)

mkinzler 1. Mai 2007 11:38

Re: Records
 
Delphi-Quellcode:
Tabelle[1].

The Lord 1. Mai 2007 11:40

Re: Records
 
ok, da nehm ich halt ne Schleife. Aber das Programm stürzt ja ab. Ich kann es gar nicht ausprobieren :(

mkinzler 1. Mai 2007 11:44

Re: Records
 
Zitat:

function ...benötigt Ereigenistyp. Ist das dann auch 'string' ?
Hier fürde sich eine Boolean anbieten oder statt function procedure scheiben.
Wie hast du Tabelle deklariert ?

The Lord 1. Mai 2007 11:49

Re: Records
 
Delphi-Quellcode:
type TDatensatz = record
       vorname: string[25];
       nachname: string[25];      
       tag: integer;
       monat: integer;
       jahr: integer;    
       bild: string[100];
     end;

var Tabelle: Array of TDatensatz;
Hab es so versucht, wie oben beschrieben!

mkinzler 1. Mai 2007 11:51

Re: Records
 
Wie groß ist der (dynamsiche) Array?

The Lord 1. Mai 2007 11:56

Re: Records
 
Zitat:

Zitat von mkinzler
Wie groß ist der (dynamsiche) Array?

Ich habe ja die Größe gar nicht deklariert.

Reicht
Delphi-Quellcode:
var Tabelle: Array[1..100] of TDatensatz;
?

mkinzler 1. Mai 2007 11:59

Re: Records
 
Kommt auf die Anzahl der Datensätze an. Bei der dynamsichen Methode kann man mit setLength die Größe ändern.

The Lord 1. Mai 2007 12:24

Re: Records
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von mkinzler
Kommt auf die Anzahl der Datensätze an. Bei der dynamsichen Methode kann man mit setLength die Größe ändern.

Ok, dann nehm ich 'setLength'.
Jedoch habe ich immer noch einen Fehler, wenn ich schreiben will!

*schnipp*

[edit=Sharky]Bild als Anhang eingefügt. Mfg, Sharky[/edit]

mkinzler 1. Mai 2007 12:29

Re: Records
 
http://www.wintotal.de/Tipps/tipp765.html

The Lord 1. Mai 2007 12:58

Re: Records
 
Zitat:

1784 0x06F8 Der angegebene Benutzerpuffer ist für den angeforderten Vorgang nicht zulässig.
Was muss ich jetzt tun, damit es funktioniert? Ich komm da alleine nicht drauf :(

Klaus01 1. Mai 2007 16:01

Re: Records
 
Und in der Tabelle steht auch was drin?

Kannst Du einmal Deinen SourceCode anhängen?

Grüße
Klaus

The Lord 1. Mai 2007 23:27

Re: Records
 
Delphi-Quellcode:
type TDatensatz = record
       vorname: string[25];
       nachname: string[25];
       initialen: string[5];
       tag: integer;
       monat: integer;
       jahr: integer;
       position: string[5];
       amt: string[5];
       verein: string[50];
       status: string[10];
       bild: string[100];
     end;


var
  Form1: TForm1;
  datei: file of TDatensatz;
  tabelle: array of TDatensatz;
  f: file of integer;
Hier deklariere ich meine Variablen und Typen!






Delphi-Quellcode:
{Speicher- und Ladefunktionen}

procedure SaveToFile(Dest: string);
var f: file of TDatensatz;
    I: Cardinal;
begin
  try
    assignFile(f, Dest);
    reWrite(f); //oder reset(f)
    for I := low(Tabelle) to high(Tabelle) do
      write(f, Tabelle[i]);
  finally
    closeFile(f);
  end;
end;


procedure LoadFromFile(Source: string);
var f: file of TDatensatz;
    I: Cardinal;
begin
  I := 0;
  try
    assignFile(f, Source);
    reset(f);
    SetLength(Tabelle, FileSize(f));
    while not eof(f) do
      begin
        read(f, Tabelle[I]);
        Inc(I);
      end;  
  finally
    closeFile(f);
  end;
end;
Hier die beiden Prozeduren!



Delphi-Quellcode:
{Daten in Record speichern}

  LoadFromFile('C:\test.dat');
  if high(Tabelle) > 0 then
    begin
      Tabelle[0].Vorname := Edit1.Text;
      //Edit2.Text := Tabelle[0].Nachname;
    end;
  SaveToFile('C:\test.dat');
Hier will ich mit einem Button Daten speichern!


Ich habe alles aus diesem Thread. Aber ich verstehe das immer noch nicht so ganz :(

Sharky 2. Mai 2007 05:19

Re: Records
 
Hai The Lord,

kannst Du das Bild bitte als Anhang an dein Posting hängen? Nicht jeder hat eine DSL-Leitung und möchte sich um den Thread lesen zu können eine 100 kByte Datei runterladen müssen.

Danke.

CCRDude 2. Mai 2007 08:34

Re: Records
 
Hab schon Ewigkeiten nur noch mit Streams bzw. vorher BlockRead/BlockWrite gearbeitet, aber kann es nicht sein, daß das eigentlich so lauten müsste?
Delphi-Quellcode:
reWrite(f, SizeOf(TDatensatz));

Klaus01 2. Mai 2007 09:17

Re: Records
 
Zitat:

Zitat von CCRDude
Hab schon Ewigkeiten nur noch mit Streams bzw. vorher BlockRead/BlockWrite gearbeitet, aber kann es nicht sein, daß das eigentlich so lauten müsste?
Delphi-Quellcode:
reWrite(f, SizeOf(TDatensatz));

Nicht zwingend, denn wenn die Datei existiert kann eine typisierte Datei auch mit reset zum Schreiben geöffnet werden.
Es kann nur mit reset keine Datei erstellt werden.

Grüße
KLaus

CCRDude 2. Mai 2007 09:57

Re: Records
 
Ich glaub Du hast den springenden Punkt übersehen: die Größe der Datensätze anzugeben hat null zu tun damit, ob die Dateien existieren. Daß der Parameter für die Datensatzgröße auch für Reset und nicht nur für Rewrite zu verwenden ist, hatte ich jetzt als selbstverständlich angesehen ;)

Oder willst Du damit sagen, daß ein Reset die Größe automatisch errät? Da das aber nicht am Dateiinhalt liegen könnte, verstehe ich auch dann nicht, warum Du auf den Hinweis zwischen Reset und Rewrite hinweist, schließlich müsste Rewrite die dann auch wissen :shock:

Klaus01 2. Mai 2007 10:13

Re: Records
 
Hallo CCRDude,
nun Deinen springenden Punkt habe ich nicht gesehen.

Zitat:

Zitat von CCRDude
Oder willst Du damit sagen, daß ein Reset die Größe automatisch errät? Da das aber nicht am Dateiinhalt liegen könnte, verstehe ich auch dann nicht, warum Du auf den Hinweis zwischen Reset und Rewrite hinweist, schließlich müsste Rewrite die dann auch wissen

Hier noch ein Zitat aus der Delphi Hilfe:
Zitat:

RecSize is an optional expression, which can be specified only if F is an untyped file. If F is an untyped file, RecSize specifies the record size to be used in data transfers. If RecSize is omitted, a default record size of 128 bytes is assumed.
Da "The Lord" mit typisierten Dateien arbeitet ist die Angabe der RecSize, bei Reset und Rewrite, nicht notwendig.

Grüße
Klaus

CCRDude 2. Mai 2007 10:27

Re: Records
 
Ah ok, sorry, hab wie gesagt schon ewig nicht mehr auf diese Weise Dateien angefasst, war daher nur ne entfernte Idee ;)

The Lord 2. Mai 2007 13:43

Re: Records
 
Zitat:

Zitat von Sharky
Hai The Lord,

kannst Du das Bild bitte als Anhang an dein Posting hängen? Nicht jeder hat eine DSL-Leitung und möchte sich um den Thread lesen zu können eine 100 kByte Datei runterladen müssen.

Danke.


Ich kann nur 24h lang den Beitrag editieren. Tut mir leid! Muss vielleicht ein Moderator das Bild zu einem Link machen!


Und gibt es schon eine Lösung für das Problem? :(

The Lord 3. Mai 2007 11:50

Re: Records
 
Endlich! Ich habe es jetzt geschafft. Habe einfach alles von vorne gemacht und es funktioniert. Aber trotzdem bedanke ich mich natürlich für eure Bemühungen :)


:dp:

magsec_87 7. Jul 2007 16:10

Re: Records
 
Hallo ich habe genau so ein problem, nur dass bei mir immer angezeigt wird: "Datezugriff Verweigert"

Ich hab keine Ahnung woran das liegen könnte!!



Delphi-Quellcode:
type woerterbuch = record
            de: array[1..5] of string[25];
            en: array[1..5] of string[25];
            end;
     vokabellist = record
            de: array[1..5] of string[25];
            en: array[1..5] of string[25];
            gewesen : boolean;
            klasse : word;
            end;

var
 
  l        : TListItem;
  datei_name: string;
  data     : woerterbuch;
  woerter  : file of woerterbuch;
  vlist    : file of vokabellist;

  loades   : record
            de     : array[1..5] of string[25];
            en     : array[1..5] of string[25];
            gewesen : boolean;
            klasse : word;
            end;

Delphi-Quellcode:
assignFile(woerter,'Datenbank.rec');
  for i:=1 to 5 do
    begin
    data.de[i]:=loades.de[i];
    data.en[i]:=loades.en[i];
    write(woerter,data);
    end;
  reset(woerter);

  with listview1.items.add do
    begin
    if (sprache1_lbl.Caption='Deutsch') then
      begin
      l.Caption:=ltempd;
      l.SubItems.Add(ltempe);
      end;
    if (sprache1_lbl.Caption='Englisch') then
      begin
      l.Caption:=ltempe;
      l.SubItems.Add(ltempd);
      end;
Kann mir vielleicht jemand helfen???
Danke!

mfg
magsec_87

grenzgaenger 7. Jul 2007 18:34

Re: Records
 
sag mal, wo kommt denn der fehler???

hab meine kristallkugel, leider in der firma gelassen...

magsec_87 7. Jul 2007 19:27

Re: Records
 
Bei
Delphi-Quellcode:
write(woerter,data);

sirius 8. Jul 2007 08:47

Re: Records
 
Du solltest erst die Datei öffnen (reset, rewrite) und dann schreiben.

Ich vermute du verwechselst da was:
reset - öffnen der Datei
closefile - schließen der Datei

magsec_87 8. Jul 2007 15:51

Re: Records
 
Danke, aber selbst mit reset funzt es leider nicht... :wall:


Ich hab jetzt nochmal ein neus kleineres programm geschrieben. Nur zum füllen der Datenbank

(enthält: edit1:**,edit2.**,Listview.**,ein button zum einlesen)
edit1..: deutsch
edit2..:englich (Wörterbuch Datenbank)

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Button1: TButton;
    ListView1: TListView;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

type woerterbuch = record
            de: array[1..5] of string[25];
            en: array[1..5] of string[25];
            end;
     vokabellist = record
            de: array[1..5] of string[25];
            en: array[1..5] of string[25];
            gewesen : boolean;
            klasse : word;
            end;

var
  Form1     : TForm1;
  l        : TListItem;
  data     : woerterbuch;
  woerter  : file of woerterbuch;
  vlist    : file of vokabellist;
  loades   : record
            eng,deu  : string;
            de     : array[1..5] of string[25];
            en     : array[1..5] of string[25];
            gewesen : boolean;
            klasse : word;
            end;


implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
    ltempe,ltempd:string;
begin
 for i:=1 to 5 do
  begin
  if (pos(edit1.Text,','))>0 then
    begin
    loades.de[i]:=copy(edit1.Text,0,pos(edit1.Text,',')-1);
    ltempe:=edit1.Text;
    delete(ltempd,0,pos(edit1.Text,',')+1);
    edit1.Text:=ltempd;
    end else
    loades.de[i]:=copy(edit1.Text,0,length(edit1.Text));
  end;

  for i:=1 to 5 do
  begin
  if (pos(edit2.Text,','))>0 then
    begin
    loades.en[i]:=copy(edit2.Text,0,pos(edit2.Text,',')-1);
    ltempe:=edit2.Text;
    delete(ltempe,0,pos(edit2.Text,',')+1);
    edit2.Text:=ltempe;
    end else
    loades.en[i]:=copy(edit2.Text,0,length(edit2.Text));
  end;

  assignFile(woerter,'Datenbank.rec');
  reset(woerter);
  if FileExists('Datenbank.rec') then ReSet(woerter)
  else ReWrite(woerter);
  for i:=1 to 5 do
    begin
    data.de[i]:=loades.de[i];
    data.en[i]:=loades.en[i];
    write(woerter,data);
    end;

  closefile(woerter);

  with listview1.items.add do
      begin
      l.Caption:=ltempd;
      l.SubItems.Add(ltempe);
      end;
end;

end.
Leider tritt immer noch irgendein Fehler auf! Das Programm erstellt noch nichtmals die datei!? :gruebel:

Kann mir bitte jemand helfen!!! :hello:
DANKE!!!

MFG
magsec_87

:arrow: PS: Die einleseform:zB: "Hallo, Hi, Guten Tag" <bis zu fünf Wortteile getrennt durch kommas!!

sirius 8. Jul 2007 17:03

Re: Records
 
Was machst denn du da?
Delphi-Quellcode:
// Dateivariable initialisieren
assignFile(woerter,'Datenbank.rec');

//Datei öffnen (hier kracht es, wenn die Datei nicht vorhanden ist)
reset(woerter);

//und jetzt erst fragen, ob die Datei überhaupt existiert
if FileExists('Datenbank.rec') then ReSet(woerter)
else ReWrite(woerter);
Erst schießen und dann fragen, wen man getroffen hat mögen auch die Rechner nicht :mrgreen:

magsec_87 8. Jul 2007 21:45

Re: Records
 
Ja hast recht, aber auch wenn ich for der abfrage das reset weglasse bleibt der trotzdem hängen!!!
weist du auchdarauf eine lösung??
Kann es vielleicht mit dem speichertyp zusammenliegen??? Ich weis nämlich nicht ob man arrays speichern kann!

bitsetter 8. Jul 2007 22:06

Re: Records
 
Hi,

bei mir kam hier ein Fehler:
Delphi-Quellcode:
 
var
  li : TListItem;
...
  closefile(woerter);

  li := ListView1.Items.Add;//so geht es bei mit
  li.Caption:= ltempd;
  li.SubItems.Add(ltempe);

  (*with listview1.items.add do
      begin
      l.Caption:=ltempd;
      l.SubItems.Add(ltempe);
      end; *)

magsec_87 9. Jul 2007 14:09

Re: Records
 
Es funktioniert leider immer noch nicht, obwohl ich jetzt keine arrays mehr speichr und eure vorschläge berücksichtigt habe.
Einziger positiver effekt: Keine Fehlermeldung mehr, dafür macht das programm jetzt garnichts mehr.

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Button1: TButton;
    ListView1: TListView;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

type woerterbuch = record
            de1,de2,de3,de4,de5,de,en1,en2,en3,en4,en5,en:string[25];
            end;
     vokabellist = record
            de1,de2,de3,de4,de5,de,en1,en2,en3,en4,en5,en:string[25];
            gewesen : boolean;
            klasse : word;
            end;

var
  Form1     : TForm1;
  l        : TListItem;
  data     : woerterbuch;
  woerter  : file of woerterbuch;
  vlist    : file of vokabellist;
  loades   : record
            eng,deu  : string;
            de     : array[1..5] of string[25];
            en     : array[1..5] of string[25];
            gewesen : boolean;
            klasse : word;
            end;


implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
    ltempe,ltempd:string;
begin
if (edit1.text<>'') or (edit2.text<>'') then
begin

  if (pos(edit1.Text,','))>0 then
  begin
    for i:=1 to 5 do
    begin
    loades.de[i]:=copy(edit1.Text,0,pos(edit1.Text,',')-1);
    ltempd:=edit1.Text;
    delete(ltempd,0,pos(edit1.Text,',')+1);
    edit1.Text:=ltempd;
    showmessage('ltempd: '+ltempd);
    end;
    if pos(edit1.Text,',')=0 then
    begin
    ltempd:=edit1.Text;
    loades.de[1]:=copy(edit1.Text,0,length(edit1.Text));
    loades.de[2]:='';
    loades.de[2]:='';
    loades.de[3]:='';
    loades.de[4]:='';
    end;
  end;

  if (pos(edit2.Text,','))>0 then
  begin
    for i:=1 to 5 do
    begin
    loades.en[i]:=copy(edit2.Text,0,pos(edit2.Text,',')-1);
    ltempe:=edit2.Text;
    delete(ltempe,0,pos(edit2.Text,',')+1);
    edit2.Text:=ltempe;
    end;
    if pos(edit2.Text,',')=0 then
    begin
    ltempe:=edit2.Text;
    loades.en[1]:=copy(edit2.Text,0,length(edit2.Text));
    loades.en[2]:='';
    loades.en[2]:='';
    loades.en[3]:='';
    loades.en[4]:='';
    end;
  end;

  assignFile(woerter,'Datenbank.rec');
 
  if FileExists('Datenbank.rec') then ReSet(woerter)
  else ReWrite(woerter);
    begin
    data.de:=ltempd;
    data.de1:=loades.de[1];
    data.de2:=loades.de[2];
    data.de3:=loades.de[3];
    data.de4:=loades.de[4];
    data.de5:=loades.de[5];

    data.en:=ltempe;
    data.en1:=loades.en[1];
    data.en2:=loades.en[2];
    data.en3:=loades.en[3];
    data.en4:=loades.en[4];
    data.en5:=loades.en[5];

    write(woerter,data);
    end;

  closefile(woerter);

  l := ListView1.Items.Add;
  l.Caption:= ltempd;
  l.SubItems.Add(ltempe);
 
end;
end;

end.
Wieder die glsichen vorraussetzungen: Listview;zwei edits: eins für deutsch andere englisch; und ein buttton fürs speichern und eintragen

Langsam verzweifle ich.

bitsetter 9. Jul 2007 22:03

Re: Records
 
Hallo,
Zitat:

Zitat von magsec_87
Delphi-Quellcode:
if (pos(edit1.Text,','))>0 then

Soll das nicht andersrum sein?

Delphi-Quellcode:
if (pos(',', edit1.Text))>0 then
Das hast du gleich an etlichen Stellen zu stehen.

Zitat:

Zitat von magsec_87
Delphi-Quellcode:
delete(ltempd,0,pos(edit1.Text,',')+1);

Zitat:

Wenn index größer als die Länge von String oder kleiner als 1 ist, werden keine Zeichen gelöscht.
Also ab 1 geht es los und nicht bei 0.
Delphi-Quellcode:
delete(ltempd, 1, pos(',',edit1.Text));
Zitat:

Zitat von magsec_87
Delphi-Quellcode:
loades.en[1]:=copy(edit2.Text,0,length(edit2.Text));

Was soll das denn bringen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:34 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