M
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. ]