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.


Anmelden zum Antworten