Guybrush Threepwood Geschrieben 2. September 2002 Geschrieben 2. September 2002 Hi, ich versuche ein Programm zu schreiben, welches per oledb datensätze aus einer Accessdatenbank ausliest. Ich benutze Win98, Visual C++ 6.0 und Office 2000. Mein Problem ist das ich nicht genau weiß welche Properties ich bei der Initialisierung setzen muß. Als Datasource habe ich bisher einfach die Datenbank mit Pfad angegeben(keine Ahnung ob das so geht, da in allen Beispielen "OLE_DB_NWind_Jet" angegeben wird, was aber laut msdn library vordefiniert auf eine Beispiel Datenabnk zeigt). Immer wenn ich das Programm ausführe schlägt die Funktion pIDBInitialize->Initialze() fehl und gibt E_FAIL zurück, was in der msdn nur als "A provider-specific error occurred" erklärt wird. Kann es sein das ich für das Ganze noch irgendetwas installieren muß? Hier ist einfach mal ein Stück vom Code, vielleicht kann mir ja einer von helfen(BITTE!!!). HRESULT Initialize() { if (CoInitialize(0) != S_OK) { MessageBox(hMainWindow,"Konnte COM nicht initialisieren!","Schwerer Ausnahmefehler!",MB_APPLMODAL); return -1; } if (CoCreateInstance(CLSID_MSDAINITIALIZE, NULL, CLSCTX_INPROC_SERVER, IID_IDataInitialize,(void**)&pIDataInit) != S_OK) { MessageBox(hMainWindow,"Instanz konnte nicht erstellt werden!","Schwerer Ausnahmefehler!!!",MB_APPLMODAL); return -1; } if (pIDataInit->CreateDBInstance(CLSID_MSDASQL, NULL,CLSCTX_INPROC_SERVER, NULL, IID_IDBInitialize,(IUnknown**)&pIDBInitialize) != S_OK) { MessageBox(hMainWindow,"DB Instanz konnte nicht erstellt werden!","Schwerer Ausnahmefehler!!!",MB_APPLMODAL); return -1; } return 0; } /////////////////////////////Ende Initialize//////////////////////////// HRESULT SetProp() { const ULONG nProps = 4; DBPROP InitProperties[nProps]; DBPROPSET rgInitPropSet; for (int 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_INIT_DATASOURCE; InitProperties[1].vValue.vt = VT_BSTR; InitProperties[1].vValue.bstrVal = SysAllocString(OLESTR("c:\\online~2.mdb")); InitProperties[2].dwPropertyID = DBPROP_AUTH_USERID; InitProperties[2].vValue.vt = VT_BSTR; InitProperties[2].vValue.bstrVal = SysAllocString(OLESTR("")); 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) { MessageBox(hMainWindow,"Interface konnte nicht geladen werden!","Schwerer Ausnahmefehler!!!",MB_APPLMODAL); return -1; } if (pIDBProperties->SetProperties(1, &rgInitPropSet) != S_OK) { MessageBox(hMainWindow,"Einstellungen konnten nicht gesetzt werden!","Schwerer Ausnahmefehler!!!",MB_APPLMODAL); return -1; } pIDBProperties->Release(); if (pIDBInitialize->Initialize() == E_FAIL) //Hier kommt der Fehler!!! { MessageBox(hMainWindow,"Initialisierung fehlgeschlagen!","Schwerer Ausnahmefehler!!!",MB_APPLMODAL); return -1; } return 0; } [/PHP] Vielen Dank schonmal im Voraus. Zitieren
gugelhupf Geschrieben 2. September 2002 Geschrieben 2. September 2002 Ist pIDBInitialize noch gültig ? Schau mal im Debugger... Warum wird pIDBProperties vorher released ? Zitieren
Guybrush Threepwood Geschrieben 2. September 2002 Autor Geschrieben 2. September 2002 In den meisten Beispielen wurde pIDBProperties vorher released, also hab ich das auch mal gemacht. Wenn ich es nicht mache klappts aber auch nicht. Wo genau kann ich denn sehen ob pIDBInitialize noch gültig ist, wenn ich auf das Debug Fenster klicke steht da nichts. Kann ich nicht einfach überprüfen ob pIDBInitialize gleich null ist? Zitieren
gugelhupf Geschrieben 2. September 2002 Geschrieben 2. September 2002 Eine Frage: "Siehst Du Deine MessageBox" ? Also ist der Fehler E_FAIL ? Zitieren
Guybrush Threepwood Geschrieben 2. September 2002 Autor Geschrieben 2. September 2002 Auf beide Fragen ja. Gruß wasweißich Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.