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
    }
    

Anmelden zum Antworten