Не могу понять, почему вылетает...
...#define _DBInitPropNum 5...
// Открывает БД
bool CJanusDB::OpenDB(std::string DBFileName)
{
std::string temp;
char Char;
for(unsigned int i=DBFileName.size();i>0;i--)
{
Char = DBFileName[i];
if(Char=='\\')
{
temp = DBFileName.substr(0,i+1);
break;
}
}
temp = _T("DBQ=") + DBFileName + _T(";DefaultDir=") + temp
+ _T(";Driver={Driver do Microsoft Access (*.mdb)};DriverId=25;FIL=MS Access;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;");
USES_CONVERSION;
BSTR ProviderStr = A2W(temp.c_str());
//File = A2W(DBFileName.c_str());
CoCreateInstance(CLSID_MSDASQL,NULL,CLSCTX_INPROC_SERVER,IID_IDBInitialize,(void**)&pDBInitialize);
for(int i=0;i<_DBInitPropNum;i++)
{
VariantInit(&InitProperties[i].vValue);
InitProperties[i].dwOptions = DBPROPOPTIONS_REQUIRED;
InitProperties[i].colid = DB_NULLID;
}
InitProperties[0].dwPropertyID = DBPROP_INIT_PROMPT;
InitProperties[0].vValue.vt = VT_I2;
InitProperties[0].vValue.iVal = DBPROMPT_PROMPT;
InitProperties[1].dwPropertyID = DBPROP_INIT_PROVIDERSTRING;
InitProperties[1].vValue.vt = VT_BSTR;
InitProperties[1].vValue.bstrVal = ProviderStr;
InitProperties[2].dwPropertyID = DBPROP_AUTH_USERID;
InitProperties[2].vValue.vt = VT_BSTR;
InitProperties[2].vValue.bstrVal = SysAllocString((LPOLESTR)L"");
InitProperties[3].dwPropertyID = DBPROP_AUTH_PASSWORD;
InitProperties[3].vValue.vt = VT_BSTR;
InitProperties[3].vValue.bstrVal = SysAllocString((LPOLESTR)L"");
InitProperties[4].dwPropertyID = DBPROP_INIT_MODE;
InitProperties[4].vValue.vt = VT_I4;
InitProperties[4].vValue.lVal = DB_MODE_READWRITE;
rgInitPropSet[0].guidPropertySet = DBPROPSET_DBINIT;
rgInitPropSet[0].cProperties = _DBInitPropNum;
rgInitPropSet[0].rgProperties = InitProperties;
HRESULT res;
pDBInitialize->QueryInterface(IID_IDBProperties,(void**)&pIDBProperties);
res = pIDBProperties->SetProperties(1,rgInitPropSet); //вылетает тут -------------------------------
pIDBProperties->Release();
res = pDBInitialize->Initialize();
switch(res)
{
case S_OK: return true; break;
default:
{
CloseDB();
return false;
}
}
return true;
}
Оле инициализируется раньше.
Именно вылетает а не подключается... Может непрально проперти вписываю?