Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Zugriff auf eine Accessdatenbank per oledb

Empfohlene Antworten

Veröffentlicht

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.

Ist pIDBInitialize noch gültig ? Schau mal im Debugger...

Warum wird pIDBProperties vorher released ?

  • Autor

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?

Eine Frage:

"Siehst Du Deine MessageBox" ? Also ist der Fehler E_FAIL ?

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.