i ist global und wird meines Wissens automatisch mit 0 initialisiert. Ich nehme an du hast in der Tabelle einen Tabellenkopf, also solltest du ihn mit 1 initialisieren. Das geht so:
Delphi-Quelltext
1: 2:
| var I : integer = 1; |
(Achtung: In älteren Delphiversion geht das nicht. Da muss man const I : integer = 1 schreiben. I wird dann in älteren Versionen nicht wirklich als Konstante, sondern als eine Variable mit einem Anfangswert interpretiert)
Bevor du irgend was in die Tabelle schreibst, musst du die Tabellengrösse anpassen (um 1 erhöhen).
Delphi-Quelltext
1: 2:
| tab.rowcount := i + 1; |
Übrigens: Du speicherst ja alles doppelt, einmal in der Tabelle und einmal im Array. Das wäre nicht für alle Felder notwendig. Wenn du eine Zeile aus der Tabelle löschst dann stimmt die Nummerierung auch nicht mehr...
Du solltest die "Rohdaten" als Objekt an eine Zelle anhängen oder zu mindest eine Verknüpfung von der Zelle aufs Record mittels einem Pointer erstellen. Dann kannst du die Tabelle auch ohne Probleme sortieren, etc.. Falls du nicht mit Objekten oder Pointern hantieren willst, kannst du's auch mal so probieren:
Delphi-Quelltext
1:
| Tab.Objects[0,i] := TObject(I); |
Das Tab ist kein owner des Objektes, also kannst du es so machen, ohne dass es Ärger gibt.
Auf die Rohdaten kannst du dann mittels schuelersatz[Integer(Tab.Objects[0,Tabelle_Zeilennummer])] zugreifen.
Gruss,
Simon