Hi William,
> I don't understand the purpose of shared mode then.
I used to use the shared mode to have the values of project variables and test items state personalized on the per-machine base. In general, this was very handy because it allowed, for example, to connect to server A when test project is opened from machine1 and connect to server B when the same project is opened from machine2 without the necessity to write even a line of code.
The only problem that I had with this was that it was not possible to set the values of the project variables/test items when test project is opened in TestExecute, so I had to either edit then via TestComplete or via direct project file corrections.
The case here is that this functionality seems to be dismissed in later versions of TestComplete for some reason and, while the Support case should exist, I am not sure if and when it will be fixed.
Besides the 'static' settings through project variables and test items, I also found it to be pretty convenient to share data between tests through the temporary project variables. Again, with the project opened in the shared mode, temporary project variables can keep different values when test code is executed from different computers and again, without the necessity to write any single line of code.
Unfortunately, the problem here is that TestComplete separates the values of the project variables on the 'per-machine' base without distinguishing user names. The result of this is that the value of the project variable can be overwritten when the project is opened on the same terminal server computer by different users in different sessions.
This is something that I really love to be improved by SmartBear.
As for your initial question:
I used to use native ADO objects (connection and the recordset) opened with the SHARE_DENY_NONE option in the connection string. This option prevents file locking and makes it possible to query the same file concurrently.