000
03.05.2003, 13:33 Uhr
~gast
Gast
|
Hi,
ich versuche vergeblich mit oledb auf eine Accessdatenbank zuzugreifen. Irgendwie bekomme ich bein initialisieren immer den Fehler DB_SEC_E_AUTH_FAILED, weiß aber nicht warum. Wenn ich auf eine ODBC Datenquelle zugreife, die mit der Datenbank verbunden ist klappts einwandfrei.
Hier mal ein Stück Code:
C++: |
IDBProperties* pIDBProperties = NULL; const ULONG nProps = 4; DBPROP InitProperties[nProps]; DBPROPSET rgInitPropSet; WCHAR* wDaten; int iSize; iSize = MultiByteToWideChar(CP_ACP,0,szDatenquelle,-1,NULL,0); wDaten = new WCHAR[iSize]; if (MultiByteToWideChar(CP_ACP,0,szDatenquelle,-1,wDaten,iSize) == NULL) { printf("Datenquellenumwandlungsfehler"); return -1; }
for (ULONG i=0; i<nProps; 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_NOPROMPT;
InitProperties[1].dwPropertyID = DBPROP_AUTH_USERID; InitProperties[1].vValue.vt = VT_BSTR; InitProperties[1].vValue.bstrVal = SysAllocString(OLESTR(""));
InitProperties[2].dwPropertyID = DBPROP_INIT_DATASOURCE; InitProperties[2].vValue.vt = VT_BSTR; InitProperties[2].vValue.bstrVal = SysAllocString(wDaten);
InitProperties[3].dwPropertyID = DBPROP_AUTH_PASSWORD; InitProperties[3].vValue.vt = VT_BSTR; InitProperties[3].vValue.bstrVal = SysAllocString(OLESTR(""));
rgInitPropSet.guidPropertySet = DBPROPSET_DBINIT; rgInitPropSet.cProperties = nProps; rgInitPropSet.rgProperties = InitProperties;
if (pIDBInitialize->QueryInterface(IID_IDBProperties,(void**)&pIDBProperties) != S_OK) { printf("Eigenschafteninterface konnte nicht geladen werden!"); return -1; }
if (pIDBProperties->SetProperties(1, &rgInitPropSet) != S_OK) { printf("Eigenschaften konnten nicht gesetzt werden!"); return -1; }
pIDBProperties->Release();
if (pIDBInitialize->Initialize() != S_OK)//Hier tritt Fehler auf { printf("Initialisierung fehlgeschlagen!"); return -1; }
|
pIDBInitialize wurde folgendermaßen initialisiert:
C++: |
if (CoInitialize(0) != S_OK) { printf("Konnte COM nicht initialisieren!"); return false; } CLSID msjet; CLSIDFromProgID(L"Microsoft.Jet.OLEDB.4.0",&msjet);
if (CoCreateInstance(msjet, NULL, CLSCTX_INPROC_SERVER, IID_IDBInitialize ,(void**)&pIDBInitialize) != S_OK) { printf("MSDA Instanz konnte nicht erstellt werden!"); return false; }
|
Ich hoffe ihr könnt mir helfen. |