Einzelnen Beitrag anzeigen

Perlsau
(Gast)

n/a Beiträge
 
#19

AW: Speichern in Tabellenform

  Alt 21. Dez 2014, 19:42
1. Ja, der Datentyp einer Spalte (=Feld) bleibt stets erhalten.

2. Wenn du in deiner Anwendung einen Recordtyp als Array festgelegt hast, dessen Inhalte du in eine Tabelle speichern möchtest, ist es erforderlich, daß die Record-Felder in der Tabelle sozusagen gespiegelt werden:
Delphi-Quellcode:
type
  MyRecord = Record
    Name : String;
    Vorname : String;
    Strasse : String;
    PLZ : String;
    Ort : String;
    Geburtsdatum : TDate;
  End;

var
  Adressen : Array of Record;
Im Grunde benötigst du den Record aber gar nicht, wenn du direkt mit der Tabelle arbeitest.

3. Ist diese Vorgehensweise richtig, um ein bestimmtes Feld zu editieren, oder ginge es (etwa DB[5,2]:='test') auch einfacher?
Delphi-Quellcode:
DB.Locate('id',2,[]);
DB.Edit;
DB['person']:= 'person2';
DB.Post;
Locate ist eine Funktion und liefert True zurück, wenn der gesuchte Eintrag gefunden und lokalisiert wurde. In deinem Beispiel wertest du den Rückgabewert der Funktion nicht aus und kannst daher nicht sicher sein, ob der Eintrag mit der Id=2 auch selektiert wurde, bevor du in diesem Record einen Feldwert änderst:

Delphi-Quellcode:
if DB.Locate('id',2,[]) Then
Begin
  DB.Edit;
  DB.FieldByName('person').AsString := 'person2';
  DB.Post;
End Else
Begin
  DB.Append;
  DB.FieldByName('person').AsString := 'person2';
  DB.FieldByName('id').AsInteger := 2;
  DB.Post;
End;
DB ist vermutlich dein CustomDataSet oder MemoryDataSet. Schau dir doch einmal die Hilfe zu Datasets an, das könnte sehr nützlich sein. Und laß dich nicht verwirren: In Datenbanken bezeichnet der Ausdruck Record einen Eintrag in einer Tabelle, tabellarisch gesehen wäre das dann eine Zeile. Eine Spalte in einer Tabelle ist ein Feld.
  Mit Zitat antworten Zitat