Wenn bei mir so ein Fehler immer nur sporadisch auftritt, dann schreibe ich mir alle Werte, die in den betreffenden Zeile / procedure verwendet werden (möglicherweise auch NIL od. nicht NIL) stumpf in eine Logdatei. Solange bis der Fehler auftritt. In den meisten Fällen hat mir das schon sehr geholfen. Möglichweise steht ja in USER_KN was drin, was das DataSet bzw. FireDac so gar nicht beißen kann. USER_KN scheint ja eine globale Variable zu sein. Wenn die mal nicht initialisiert ist(aus welchen Gründen auch immer), können da schon mal tolle Sachen drin stehen
Und dann such man den Fehler an dieser Stelle vergebens.
Showmessage ist zwar ganz schön, kann aber gerade bei sporadischen Fehler echt nerven