CDao irgendwas muss woll offen blieben
-
Nachdem ich einen Dialog 8 mal geöffnet haben stürzt mein Programm nach einige Zeit später mit einen DaoFehler ab.Also denke ich das woll irgendetwas nicht richtig geschlossen wird.
OnInit des Dialog
BOOL SP_Eingeben_DL::OnInitDialog() { CDialog::OnInitDialog(); //Einstellungen für Editctrl das tausender punkte setzen kann(gekürzt) m_Pb_c.SetFormat(true); m_Pb_c.SetMaxLenght(6); //Das Array zur Aufnahme der Werte der Radiobuttons vorbereiten rad_array.SetSize(11); for(int i =0;i < 11;i++) { rad_array.SetAt(i,0); } //Füllen der Kombinationsfelder(gekürzt) COleVariant val; CString sval; int ran; CDaoRecordset * r; ran = DB->AddRecordset("Select Name from Marken order by Name");//Öffnet die DB wenn sie geschlossen ist und fügt dann ein Recordset zu einen Array hinzu r = DB->GetRecordset(ran);//Liefert das Recordset zurück while(!r->IsEOF()) { r->GetFieldValue("Name",val); sval =val.pbVal; m_Marke_c.InsertString(-1,sval); r->MoveNext(); } m_Marke_c.SetCurSel(m_Marke_c.FindString(-1,"Alle")); DB->returnRecordset(ran);//Teilt der Klasse mit das das Recordset nicht mehr benutzt wird DB->DeleteRecordset(ran);//Schliesst das Recordset und löscht den Zeiger //Der folgende Bereich wird ausgeführt wenn ein Eintrag geändert werden soll,hier müsste irgendwo der Fehler liegen if(m_change) { CString b; b.Format("%d",m_ID); CDaoRecordset * r4; int ran4; DB->recordset_type=dbOpenSnapshot; DB->recordset_options=dbReadOnly; ran4 = DB->AddRecordset("SELECT Suchparameter.*, Agenten.use_empty_ez, Kategorien.Name AS Kat_Nam, Marken.Name AS Mar_Nam, Farben.Name AS Far_Nam, Modelle.Modell_Name, Agenten.Name AS Agt_Nam FROM ((((Kategorien INNER JOIN (Marken INNER JOIN Suchparameter ON Marken.intern_MarkenNr = Suchparameter.Marke) ON Kategorien.intern_KategorieNr = Suchparameter.Kategorie) INNER JOIN Farben ON Suchparameter.Farbe = Farben.intern_Farbnr) LEFT JOIN Modelle ON Suchparameter.Modell = Modelle.Modell_Nr) INNER JOIN Agent_Suchparameter_Link ON Suchparameter.IDNr = Agent_Suchparameter_Link.Sp_Nr) INNER JOIN Agenten ON Agent_Suchparameter_Link.Agent_Nr = Agenten.AgentNr WHERE Suchparameter.IDNr=" + b); r4= DB->GetRecordset(ran4); DB->recordset_options = 0; DB->recordset_type=dbOpenDynaset; this->SetWindowText("Suchparameter ändern"); m_Ok.SetWindowText("Ändern"); r4->GetFieldValue("Modell_Name",val); m_Modell = val.pbVal; if(m_Modell =="Suchparameter") { m_Modell =""; } //Lesen der Werte aus der DB für die Optionbuttons for(int i2 =0;i2 <11;i2++) { r4->GetFieldValue(16+i2,val); if(val.boolVal) { CButton *button =(CButton*)this->GetDlgItem(1070+i2); button->SetCheck(1); rad_array[i2] = 1; } } //setzen eines Strings aus der DB r4->GetFieldValue("Kat_Nam",val); m_Kategorie=val.pbVal; //setzen einer Zahl aus der DB r4->GetFieldValue("Preis_max_real",val); m_Pb_c.SetLong(val.intVal); //gekürzt es ist das selbe wie oben DB->returnRecordset(ran4); DB->DeleteRecordset(ran4); UpdateData(false); } else { //Bei Neueingabe die Werte auf 0 setzen(gekürzt) m_Pb_c.SetLong(0); m_Loeschen.ShowWindow(SW_HIDE); m_a_Loeschen.ShowWindow(SW_HIDE); } OnSelchangeCOMBOMa(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX-Eigenschaftenseiten sollten FALSE zurückgeben }