Probleme mit IADORecordBinding::AddNew()



  • Heyho liebe Community!
    Ich möchte gern via ADO und dem RecordBinding Datensätze bzw. Objekte in eine Access Datenbank einfügen. Die Verbindung ist erfolgreich hergestellt worden und es wird auch keine Exception bei der Ausführung des folgenden Codes geworfen

    try
    {
    // Open Recordset		
    GetInstance()->m_pRecordset->Open("TableName",_variant_t((IDispatch *)GetInstance()->m_pConnection, true), adOpenKeyset, adLockOptimistic, adCmdTable); 
    // open an IADORecordBinding interface pointer for binding Recordset to a class
    			GetInstance()->m_pRecordset->QueryInterface(__uuidof(IADORecordBinding),(LPVOID*)&m_picRs);
    // bind the Recordset to a C++ Class object
    GetInstance()->m_picRs->BindToRecordset(Objekt);
    
    // Daten aus dem Objekt in den (aktuellen)Datensatz übertragen
    GetInstance()->m_picRs->AddNew(Objekt);
    }
    catch(CException *ex)
    {
    	char array[1024];
    	unsigned int *pI=NULL;
    	ex->GetErrorMessage(array,1024,pI);
    	// für spätere Fehlerabfrage via GetLastError()
    	strLastError = array;
    
    	delete Objekt;
    }
    catch(_com_error &e)
    {
    	_bstr_t error;
    	error = e.Description();
    	// für spätere Fehlerabfrage via GetLastError()
    	strLastError.Format(_T("%s"), (LPCTSTR)error);
    	strLastError += "\r\n(CADOInterface::SetData)";
    	delete Objekt;
    }
    

    Ich habe schon viel rumprobiert, z.B. nochn Update(), von der RecordBinding Instanz, hinterher gemacht, jedoch wirft ein Update() von meiner Recordset Instanz bzw. der Recordsetpointer, eine Exception beim Aufruf von Update().
    Nun erfolgt die Abarbeitung ohne Fehler und die Funktion endet mit Erfolg.
    Jedoch sehe ich die Datensätze in der Access Tabelle nicht.
    Habt ihr eine Idee?

    Zusatz: Das erste Datenfeld in meiner Access Tabelle ist ein Autowert den ich nicht mit in die entsprechende Klasse übernommen habe, sonst jedoch jedes Datenfeld, da, falls ich versuche für dieses Feld einen Wert einzufügen, ein Fehler auftritt.

    Bei der Variablen Objekt handelt es sich um einen Zeiger, der als Parameter übergeben wird. Die Verbindung wurde in einer anderen Funktion hergestellt und die Klasse zur Verwaltung der ADO Funktionalität wurde als Singleton implementiert.

    Liebe Grüße,
    inva

    *EDIT*
    Kurios ist jedoch, dass, wenn ich nach einigen Versuchen übers Programm einen Datensatz einzufügen, manuell einen Datensatz eintrage, ist die vom Autowert generierte fortlaufende Nummer nicht eins größer als die zuletzt eingetragene bzw. die vom letzten Datensatz, sondern, zumindest vermute ich so, um die Anzahl der Versuche des Programms einen Datensatz einzufügen, größer. Also, war die letzte z.B. 6, ich habe dann via Programm versucht Datensätze einzufügen, will nun manuell einen Datensatz eintragen erhalte ich als fortlaufende Nummer nicht die 7 sondern z.B. 10.



  • Hat niemand eine Idee warum die Datensätze anscheinend eingefügt, mir aber nicht angezeigt werden?

    Grüße,
    inva


Anmelden zum Antworten