通过传递数据库句柄(TDatabase::Handle)给dll,以及在dll中多线程访问的问题?
一个主窗口,连接数据库。有一个TSession对象MSession,以及所属的TDatabase对象MDatabase。想通过参数传递将数据库的句柄 MDatabase->Handle 传递给dll,以实现数据库连接的共享,并且每个dll中的访问是线程独立的,也就是说与主窗口不在一个线程中。遇到如下问题:
1、dll中数据库句柄的使用,动态创建一个数据库对象,然后将句柄赋值。而创建的记录集(TTable, TQuery)找不到动态创建的数据库名称。不过我创建了一个窗口,然后添加将数据库组件。dll初始化的时侯就创建窗口,将数据库句柄赋值后打开(TDatabase::Open()),可以正常通过数据库名(TDatabase::DatabaseName)访问。是否有更好的办法?
2、多线程对数据库经行查询的时侯(不同的线程不会访问同一个表,也就是说每个线程有单独的表数据,只是要共享连接而已),有不确定的时侯查询不出数据,时而对时而错。但是在查询(TQuery::Open())和判断(TQuery::RecordCount == 0)之间对数据库进行任何操作(如调用主窗口函数插入数据,或者加两句:MQuery->Database->StartTransaction(); MQuery->Database->Commit();)以后正常(得到正常的记录数)。请问如何解决?
多写高手不吝赐教!