OLE DB Projekt...
-
Hallo an alle,
Ich arbeite gerade an einem Datenbank-Projekt mit "SDI-Anwendung,OLEDB u. Access Datenbank.
Habe erst angefangen mich mit Datenbank-Anwendungen zu beschäftigen u. bitte deshlb um Eure hilfe.Es funktioniert auch alles wunderbar ( MoveFirst(),MoveLast(),
MoveNext(),MovePrev() ).Aber wenns ums löschen u. einfügen von Datensätzen geht, hapert es schon.
Beim Aufruf von "m_pSet->Delete();" passiert z.B. nichts.Beim anlegen der Anwendung habe ich den Modus: ReadWrite eingestellt.
Habe ich keine Schreibrechte?Hier etwas Code:
class COLEDBSetAccessor { public: TCHAR m_Autoren[51]; TCHAR m_ISBN[26]; TCHAR m_Titel[101]; // Folgende vom Assistenten generierte Datenmember enthalten // Statuswerte für die entsprechenden Felder in der // Spaltenzuordnung. Sie können diese Werte als NULL-Werte, die von der // Datenbank zurückgegeben werden, oder für vom Compiler ausgegebene // Fehlerinformationen verwenden. Weitere Informationen finden Sie // in der Visual C++-Dokumentation unter Datenmember. // HINWEIS: Diese Felder müssen vor dem // Einfügen von Daten initialisiert werden. DBSTATUS m_dwAutorenStatus; DBSTATUS m_dwISBNStatus; DBSTATUS m_dwTitelStatus; // Folgende vom Assistenten generierte Datenmember enthalten Längenwerte // für die entsprechenden Felder in der Spaltenzuordnung. // HINWEIS: Für Spalten mit variablen Längen müssen diese // Felder vor dem Einfügen von Daten initialisiert werden. DBLENGTH m_dwAutorenLength; DBLENGTH m_dwISBNLength; DBLENGTH m_dwTitelLength; void GetRowsetProperties(CDBPropSet* pPropSet) { //CDBPropSet propset(DBPROPSET_ROWSET); pPropSet->AddProperty(DBPROP_CANFETCHBACKWARDS, true, DBPROPOPTIONS_OPTIONAL); pPropSet->AddProperty(DBPROP_CANSCROLLBACKWARDS, true, DBPROPOPTIONS_OPTIONAL); pPropSet->AddProperty(DBPROP_UPDATABILITY, DBPROPVAL_UP_CHANGE | DBPROPVAL_UP_INSERT | DBPROPVAL_UP_DELETE); } HRESULT OpenDataSource() { CDataSource _db; HRESULT hr; //#error Sicherheitsproblem: Die Verbindungszeichenfolge enthält möglicherweise ein Kennwort // Die Verbindungszeichenfolge enthält möglicherweise einfache Textkennwörter und/oder // andere vertrauliche Informationen. Entfernen Sie #error, nachdem Sie die // Verbindungszeichenfolge überprüft haben. Sie können das Kennwort // in einem anderen Format speichern oder eine andere Benutzerauthentifizierung verwenden. hr = _db.OpenFromInitializationString(L"Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=C:\\Buecher.mdb;Mode=ReadWrite;Extended Properties=\"\";Jet OLEDB:System database=\"\";Jet OLEDB:Registry Path=\"\";Jet OLEDB:Database Password=\"\";Jet OLEDB:Engine Type=4;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password=\"\";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False"); if (FAILED(hr))/*Share Deny None*/ { #ifdef _DEBUG AtlTraceErrorRecords(hr); #endif return hr; } return m_session.Open(_db); } void CloseDataSource() { m_session.Close(); } operator const CSession&() { return m_session; } CSession m_session; BEGIN_COLUMN_MAP(COLEDBSetAccessor) COLUMN_ENTRY_LENGTH_STATUS(3, m_Autoren, m_dwAutorenLength, m_dwAutorenStatus) COLUMN_ENTRY_LENGTH_STATUS(1, m_ISBN, m_dwISBNLength, m_dwISBNStatus) COLUMN_ENTRY_LENGTH_STATUS(2, m_Titel, m_dwTitelLength, m_dwTitelStatus) END_COLUMN_MAP() };
PS: Beim ersten kompilieren der Anwendung wird immer der Fehler: Passwort....
angezeigt.
Habe dann die Zeile #error im Code auskommentiert,weil ich beim erstellen der Anwendung kein Passwort angegeben habe.//#error Sicherheitsproblem: Die Verbindungszeichenfolge enthält möglicherweise ein Kennwort // Die Verbindungszeichenfolge enthält möglicherweise einfache Textkennwörter und/oder // andere vertrauliche Informationen. Entfernen Sie #error, nachdem Sie die // Verbindungszeichenfolge überprüft haben. Sie können das Kennwort // in einem anderen Format speichern oder eine andere Benutzerauthentifizierung verwenden.
-
Habe jetzt rausgefunden, woran es lag.
Diese zwei Zeilen in den Code (OLEDDSet.h) eingefügt:
void GetRowsetProperties(CDBPropSet* pPropSet) { pPropSet->AddProperty(DBPROP_CANFETCHBACKWARDS, true, DBPROPOPTIONS_OPTIONAL); pPropSet->AddProperty(DBPROP_CANSCROLLBACKWARDS, true, DBPROPOPTIONS_OPTIONAL); /*Neu*/ pPropSet->AddProperty(DBPROP_IRowsetChange, true, DBPROPOPTIONS_OPTIONAL); /*Neu*/ pPropSet->AddProperty(DBPROP_UPDATABILITY, DBPROPVAL_UP_CHANGE | DBPROPVAL_UP_INSERT | DBPROPVAL_UP_DELETE); }
Jetzt ist das Einfügen u. Ändern der von Datensätzen möglich.