MFC - > ODBC -> CRecordset - > ERROR



  • Guten Tag,

    ich hoffe jemand von euch kann mir weiter helfen.

    ich versuche mich in ODBC einzuarbeiten und scheitere schon recht früh.

    das open der DB klappt.

    das open des Recordssets geht auch noch gut.

    bRes=dyn.IsOpen(); gibt mir daraufhin 1 zurück. (also offen)

    "i=dyn.GetRecordCount();" gibt mir die Anzahl der Datenseätze in i wieder.
    diese Anzahl stimmt schonmal nicht mit der Realität überein.
    ich bekomme 1 zurück. Dabei sind 3 DS in der tab.

    ganz seltsam wird es wenn ich bRes=dyn.CanAppend(); aufrufe.
    bRes ergibt mir FALSE/0 . das heißt ich kann keinen DS ins Recordset anfügen.
    bekomme dementsprechen beim AddNew() einen Assert, der mir sagt ich könne in einem schreibgeschützten Recordsset keine daten ändern/anfügen.

    Ich hab mir für die besagte tabelle in der db eine klasse abgeleitet von CRecordset vom wizzard erstellen lassen.

    typ : m_nDefaultType = snapshot;

    CDatabase db;
    	BOOL bRes=FALSE;
    	int i=0;
    
    	bRes=db.OpenEx("DSN=mydb;UID=marcy;PWD=test",0  );
    
    	CAdressen dyn(&db);
    
    	bRes=dyn.Open(AFX_DB_USE_DEFAULT_TYPE, "select * from marcy.tmp_adressen",CRecordset::none);
    
    	bRes=dyn.IsOpen();	
    
    	i=dyn.GetRecordCount();
    	bRes=dyn.CanAppend();
    
    	dyn.AddNew();
    
    	dyn.Close();
    	db.Close();
    

    Umgebung :

    VC++ 6
    Oracle 9i
    winXP Prof
    ODBC muss sein.

    wie bekomm ich die kuh zum fliegen?

    Marcy



  • GetRecordCount() kennt nur die Anzahl der Datensätze, die bereits einmal aufgerufen wurden und das ist direkt nach Open() eben nur der erste. Willste alle, musste mit MoveNext() einmal durch alle durchlaufen. Genaueres dazu in der MSDN.



  • danke für die schnelle info/hilfe!!!!!
    und woran kann es liegen, dass ich kein AddNew(); machen kann?

    marcy



  • ich komme nun diesen Fehler beim Aufruf dyn.AddNew();

    "Nur Keyset-gesteuerte Cursor können aktualisiert werden"

    marcy 😕



  • Aus irgendeinem Grund öffnet er dein Recordset anscheinend schreibgeschützt. Keine Ahnung, warum, sieht eigentlich ganz gut aus. Vielleicht kommt noch einer, der sieht, warum das so ist und ne gute Antwort hat.

    Andererseits könntest du auch versuchen, bis dahin mit den verschiedenen Parametern rumzuspielen. Bei Open(...) usw., da hast du ja meistens die Standardparameter drin, vielleicht mag er die nicht. Vielleicht hilft da ein CRecordset::dynaset oder ähnliches..

    Könnte u.U. auch daran liegen, dass deine Tabelle keinen Primärschlüssel hat. Mag er manchmal auch nicht.

    Könnte auch an dem marcy. von "select * from marcy.tmp_adressen" liegen. Würde ich mal weg lassen.



  • Ich tippe auch darauf, dass die Tabelle einen Primär-Index haben müsste.
    Das mit dem "Keyset-gesteuert..." klingt schwer danach.

    Füge doch der Tabelle einfach mal eine ID-Spalte zu, und mach diese dann zum Primärschlüssel (falls du sonst noch keinen hast).
    Dann sollte es eigentlich funktionieren.



  • ich habe nun einen primary key auf die Tabelle erstellt (Spalte "ID" TYP NUMBER) und stehe leider immernoch vor dem gleichen Problem ...

    ERROR :

    ur Keyset-gesteuerte Cursor können aktualisiert werden
    State:S1C00,Native:0,Origin:[Microsoft][ODBC driver for Oracle]

    "C:\WINNT\system32\msctf.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden.
    Datensatzgruppe kann nur gelesen werden.



  • Hast Du mal dein Recordset auf CRecordset::dynaset geändert. Wenn Du mit Access als DB arbeitest, dann sollte es dann laufen.

    Gruß



  • es geht um oracle (V 9i) nicht um access..
    habe dennoch deinen vorschlag umgesetzt..ohne erfolg.



  • Habe Oracle nur mit API-Funtionen angesprochen und da geht es. Da die DatenCouch immer etwas eigenwillig ist solltest Du es vielleicht mit einer API Wrapperklassen von http://www.codeproject.com/database/ versuchen. Denke da hast Du mehr Glück.

    Gruß



  • Danke für den tipp..
    hab die wrapper class schon integriert und es geht..

    danke jungs für eure hilfe!

    Kiss

    marcy


Anmelden zum Antworten