Nein, das geht auch mit TStrings. Da eine Objektreferenz ja auch nur ein Zeiger ist, welcher wiederum aus einer ganzen Zahl besteht, kann man durch den gezeigten Cast auch Zahlen (also den Primärschlüssel, wenn numerisch) hinterlegen.
Pseudocode:
ListBox.Items.AddObject(Datensatz.Stringfeld, Pointer(Datensatz.ID));
Um die hinterlegte ID wieder auszulesen, geht man den umgekehrten Weg:
ID := integer(ListBox.Items.Objects[ListBox.ItemIndex]);
Mit dieser ID kann man dann eine
Query befüllen und sich die Daten holen. Die Beispiele sind nicht getestet, daher keine Garantie