Even though thread Variables Id1 & Id2 declared after thread start, these variable still would be recognized by procedure TD3GetDtThr.Execute. How come?
You can't be certain of that.
Maybe the TThread.Execute is already started, maybe not.
But I wouldn't count on it.
Try to put a sleep(1000) after the TD3GetDtThr.Create() and see what happens then.
(Now the Id1 and Id2 are assigned just microseconds after creating the thread and that
could be just before the TThread.Execute, but don't count on that.)