DB mit CRecordset - Fehler beim schreiben



  • Hallo

    Ich habe eine DB-Anbindung an mein SDI-Projekt (mit DB-Unterstützung)
    Wenn ich ein Flag-Feld eines Datensatzes von 0 auf 1 setzen will, klappt das bei 3-4 Datensätzen und danach erhalte ich die Fehlermeldung:

    Es waren keine Zeilen von der Aktualisierung- oder Löschoperation betroffen.

    Beim Debuggen, hat das Feld aber den Wert 0. Ich setz es auf 1, dann beim Update kommt dieser Fehler und in der DB bleibt 0 stehen.

    Wer kann mir helfen?
    Danke...Chris

    Hier mal der Quellcode des entsprechenden Teils
    (es geht darum, eine Tabelle mit Kursen zu durchwandern, die abgearbeiteten Einträge als bearbeitet markieren und wenn alle Einträge einer entsprechenden WKN abgearbeitet sind, die Einträge wieder zurückzuwandern)

    // Börsenkurse und Zustand aktualisieren
    LRESULT CBoerseView::OnUpdateData(WPARAM wParam, LPARAM lParam)
    {
    
        // TaktSound
        //::PlaySound(MAKEINTRESOURCE(IDR_SND_TICK), NULL, SND_RESOURCE | SND_ASYNC);
    
        // Prüfen auf Börsenbeginn
        if ((m_pSet->m_BoersenSchluss) && (SimZeit.GetDayOfWeek() != 1) && 
            (SimZeit.GetDayOfWeek() != 7) && (SimZeit.GetHour() == 9))
        {
            // Zustand BörsenSchluss in DB schreiben
            m_pSet->Edit();
            m_pSet->m_BoersenSchluss = false;
            m_pSet->Update();
            m_Status = "Die Börse ist eröffnet";
            //Sound Börsenstart
            ::PlaySound(MAKEINTRESOURCE(IDR_SND_BELL), NULL, SND_RESOURCE | SND_ASYNC);
        }
    
        // Prüfe auf Börsenschluss
        if ((SimZeit.GetHour() == 17) && !(m_pSet->m_BoersenSchluss)) 
        {
            // Zustand BörsenSchluss in die DB schreiben
            m_pSet->Edit();
            m_pSet->m_BoersenSchluss = true;
            m_pSet->Update();
            m_Status = "Die Börse ist geschlossen";
        }
    
        // Dialogfeld aktualisieren
        UpdateData(false);
    
        CritSect.Lock();
    
        // Börsenkurse berechnen
        if (!m_pSet->m_BoersenSchluss) 
        {
            //Variablen definieren
            CBWertpapiereSet* BWSet = new CBWertpapiereSet;
            CGrundKurseSet* GKSet = new CGrundKurseSet;
            CIntradaySet* ISet = new CIntradaySet;
            CString str, str1;
            CBoersenWertpapier BWertpapier;
            bool t; int Richtung;
    
            //falls Sets nicht geöffnet sind, erstmal öffnen
            if (!BWSet->IsOpen()) BWSet->Open();
            if (!GKSet->IsOpen()) GKSet->Open();
    
            //Für alle WKN
            while (!BWSet->IsEOF()) {        
    
                // Falls alle Kurse der WKN abgearbeitet, Flags umsetzen und Durchlauf wiederholen
                do {
                    //Kennzeichen, ob Flags umgesetzt werden mussten und Durchlauf wiederholt werden muss
                    t = false;
    
                    //Where Klausel zusammensetzen und Daten filtern
                    str = "WKN = " + (BWSet->m_WKN) + " AND Bearb = 0 ORDER BY Datum";
                    GKSet->m_strFilter = str;
                    GKSet->Requery();
    
                    //Sind alle Kurse abgearbeitet?
                    if (GKSet->IsEOF())
                    {
                        // JA, Zeichen für Wiederholung setzen
                        t = true;
                        //Where-Klausel setzen, alle Daten zur WKN filtern
                        str = "WKN = " + (BWSet->m_WKN);
                        GKSet->m_strFilter = str;
                        GKSet->Requery();
    
                        //für alle Einträge
                        while (!GKSet->IsEOF()) 
                        {
                            //Setze Bearb-Flag zurück, und kehre die Richtung um
                            GKSet->Edit();
                            GKSet->m_Bearb = 0;
                            if (GKSet->m_Richtung == 0)
                                GKSet->m_Richtung = 1;
                            else GKSet->m_Richtung = 0;
                            GKSet->Update();
                            GKSet->MoveNext();
                        }
                    }
    
                    Richtung = GKSet->m_Richtung;
                //mussten die Flags umgesetzt werden, wiederhole alles
                } while (t);
    
                //Richtung bestimmt die Sortierreihenfolge des Datums, füge sie Filter hinzu und Filtere
                if (GKSet->m_Richtung == 0) str1 = " ASC"; else str1 = " DESC";
                str += str1;
                GKSet->m_strFilter = str;
                GKSet->Requery();
    
                //Initialisiere das Wertpapier mit den Daten (wenn Richtung = 1, dann Schluss-/StartKurs tauschen)
                BWertpapier.InitBoersenWertpapier(BWSet->m_Name, atol(BWSet->m_WKN), GKSet->m_Datum,
                                                    GKSet->m_EroeffK, GKSet->m_SchlussK);
                //Wertpapier in Menge einfügen
                GetDocument()->GetBWMenge()->EinfuegeBWPInMenge(&BWertpapier);
    
                //Setze als Bearbeitet
    /////////////////////////////////////////////////////////////////////////
    
                GKSet->Edit();
                GKSet->m_Bearb = 1;
                GKSet->Update();
    
    // bei diesem Update schmiert er mir dann ab, wenn ich als Beispiel 2 WKNs
    // mit je 3 Kursdaten habe, klappts. Bei 30 WKNs mit ca 700 Kursen je WKN
    // klappts für ca 3-5 WKNs und dann ist schluss
    /////////////////////////////////////////////////////////////////////////
            }
            GKSet->Close();
            BWSet->Close();
        }
    
        CritSect.Unlock();
        return 0;
    }
    

    [ Dieser Beitrag wurde am 02.05.2003 um 11:51 Uhr von MuehBln editiert. ]


Anmelden zum Antworten