Ole DB
От: Sheridan Россия  
Дата: 10.07.04 07:57
Оценка:
Не могу понять, почему вылетает...
...#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;
}

Оле инициализируется раньше.
Именно вылетает а не подключается... Может непрально проперти вписываю?
-= ICQ:1887019 =--= http://djhacker.boom.ru/ =--= -=...avanced lamer...=- =-
Matrix has you...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.