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.