调用OpenDatabase函数(DAO)时遇到问题。它的原型是:
virtual HRESULT STDMETHODCALLTYPE OpenDatabase(BSTR Name/*[in]*/, VARIANT Options/*[in,opt]*/,
VARIANT ReadOnly/*[in,opt]*/,
VARIANT Connect/*[in,opt]*/,
Dao_tlb::Database** ppDb/*[out,retval]*/) = 0; // [-1]
所以,当我这样做时:
if(OpenDialog1->Execute() != true) return;
所选文件名保存在 OpenDialog1-> FileName 中。然后我调用上面的函数:
pDatabasePtr = pDBEngine->OpenDatabase(WideString(OpenDialog1->FileName).c_bstr(), myOpts, myRead, myCon);
这有效!但是,问题是当我尝试将文件名设置为其他内容时:
OpenDialog1->FileName = ParamStr(1); // OpenDatabase don't work in runtime - file not recognised!
甚至在函数内设置文件名:
pDatabasePtr = pDBEngine->OpenDatabase(WideString(L"SomeDB.mdb").c_bstr(), myOpts, myRead, myCon);
在这两种情况下,我都会遇到奇怪的错误而且无法打开数据库。所以,我可能错误地将UnicodeString / WideString转换为BSTR。
那么,为什么这个函数(OpenDatabase)与
一起使用if(OpenDialog1->Execute() != true) return;
并且不适用于
OpenDialog1->FileName = ParamStr(1);
如何正确设置转换?