<p>I'd like to be able to open a TDataSet asynchronously in its own thread so that the main VCL thread can continue until that's done, and then have the main VCL thread read from that TDataSet afterwards. I've done some experimenting and have gotten into some very weird situations, so I'm wondering if anyone has done this before.</p>

<p>I've seen some sample apps where a TDataSet is created in a separate thread, it's opened and then data is read from it, but that's all done in the separate thread. I'm wondering if it's safe to read from the TDataSet from the main VCL thread after the other thread opens the data source.</p>

<p>I'm doing Win32 programming in Delphi 7, using TmySQLQuery from <a href="http://www.microolap.com/products/connectivity/mysqldac/" rel="noreferrer">DAC for MySQL</a> as my TDataSet descendant.</p>

I have seen it done with other implementations of TDataSet, namely in the
Asta
components.  These would contact the server, return immediately, and then fire an event once the data had been loaded.
However, I believe it depends very much on the component.  For example, those same Asta components could not be opened in a synchronous manner from anything other than the main VCL thread.
So in short, I don't believe it is a limitation of TDataSet per se, but rather something that is implementation specific, and I don't have access to the components you've mentioned.