Zitat:
ExcelWorksheet1.Cells.Item[i,1].value := string(q_crack_bei_km['ppa_Verfahren']);
Das Ziel ist ja ein Variant/OleVariant und das andere ein
Objekt.
Grundsätzlich solltest du einfach immer davon ausgehn, daß es nicht einfach so eine Konvertierunbg von Ojekt in was Anderes gibt.
Vor einer Weile wurde zwar
TObject.ToString eingeführt, aber dieses wurde noch nahezu nirgendwo verwendet/überschrieben, denn dieses muß für jeden Objekttyp einzeln implementiert werden, da es von alleine nicht weiß, wie der Inhalt dieses Objektes in ein String umgewandelt werden könnte.
Somit ist es auch nicht sicher, was die String(...)-Konvertierung zurückgibt, da sie am Ende "hoffentlich" auf ToString gemäppt wird.
(Sollte hier direkt der Objektzeiger in einen Stringzeiger gecastet werden, dann hast du ein großes Problem)
Wenn es sich bei dir um TField-Nachfahren handelt, solltest du besser immer .Value verwenden, oder notfalls einfach immer .AsString (was ja auch bei Integer und Co. ginge).