A
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
}