Datenbank und MFC



  • void CStatistikView::OnTestButtonDB()//In Datenbank übernehmen  
    {
    
    	if(GetDocument()->m_data.m_vStruct.size()==0)
    	{
    		AfxMessageBox("Laden Sie bitte erstmal die Datei Hoch");
    		return;
    	}
    	else
    	for(int i=0;i<GetDocument()->m_data.m_vStruct.size();i++)
    	{
    		Data &data=GetDocument()->m_data.m_vStruct[i];
    
    		try
    		{
    
    //-----------------------------------------------------------------------------+
    //		Eintrag in die DatenBank Beginn										   !
    //-----------------------------------------------------------------------------+
    			RsHaupt rsHauptSt(GetDocument()->m_pDatabase);					
    			rsHauptSt.Open(CRecordset::dynaset, NULL, CRecordset::none||CRecordset::readOnly);	
    
    //Ich will hier prüfen ob schon gleiche daten existieren
    			rsHauptSt.AddNew();															
    
    			rsHauptSt.m_Hs_UserID			=data.m_iAnwenderid;
    			rsHauptSt.m_Datum				=data.m_cDatum;									
    			rsHauptSt.m_MaschineNr			=data.m_iMaschinenumber;					
    			rsHauptSt.m_Beschleunigung		=data.m_iBeschleinigung;
    			rsHauptSt.m_Geschwindigkeit		=data.m_iGeschwindigkeit;
    
    			rsHauptSt.SetFieldDirty(&rsHauptSt.m_JobId,FALSE);
    
    			rsHauptSt.Update();														
    			rsHauptSt.MoveLast();
    
    //-----------------------------------------------------------------------------+
    //		Eintrag in die DatenBank Ende										   !
    //-----------------------------------------------------------------------------+
    		}
    
    		catch (CDBException *e)
    		{
    			e->Delete();
    		}
    
    	}
    
    }
    

    Hallo,
    Ich habe eine Datenbank Tabelle, die ich ausfüllen möchte. Erstmal lade ich eine Datei hoch und danach drücke ich auf einem Button
    so speichere ich alle datensätze in die Datenbank.(OnTestButtonDB() ist funktion für den Button).
    Ich will aber beim Speichern Prüfen , ob die gleiche User Id , Maschine Nr und Datum schon in DB existieren. Wenn ja , möchte ich die Daten nicht speichern,
    weil das heißt dass diese Datensätze schon im Datenbank existieren und man braucht das nicht zu speichern. Wenn nein, sollen die Daten sätze
    gespeichert werden.
    ICh habe irgendwie versucht das mit eine Weil schleife zu machen aber das klappt leider nicht.
    Kann mir bitte jemand helfen.

    Vielen Dank



  • void CStatistikView::OnTestButtonDB()//In Datenbank übernehmen , die name muss geändert werden  
    {
    
    	if(GetDocument()->m_data.m_vStruct.size()==0)
    	{
    		AfxMessageBox("Laden Sie bitte erstmal die Datei Hoch");
    		return;
    	}
    	else
    	for(int i=0;i<GetDocument()->m_data.m_vStruct.size();i++)
    	{
    		Data &data=GetDocument()->m_data.m_vStruct[i];
    
    		try
    		{
    
    //-----------------------------------------------------------------------------+
    //		Eintrag in die DatenBank Beginn										   !
    //-----------------------------------------------------------------------------+
    			RsHaupt rsHauptSt(GetDocument()->m_pDatabase);					
    			rsHauptSt.Open(CRecordset::dynaset, NULL, CRecordset::none||CRecordset::readOnly);	
    
    //_____________________________________________________________________________________________________________
    
    		while (!rsHauptSt.IsBOF() && !rsHauptSt.IsEOF())
    		{
    //-------------------------------------------------------------------------------+
    // Datum Grenzen müssen geprüft werden											 !
    //-------------------------------------------------------------------------------+			
    			if(data.m_iAnwenderid==rsHauptSt.m_Hs_UserID&&data.m_iMaschinenumber==rsHauptSt.m_MaschineNr)
    			{
    				AfxMessageBox("Die Datensätze sind bereits in Datenbank gespeichert ");
    
                   return;
    			}
    
    		}
    
    //_____________________________________________________________________________________________________________
    			rsHauptSt.AddNew();															
    
    			rsHauptSt.m_Hs_UserID			=data.m_iAnwenderid;
    			rsHauptSt.m_Datum				=data.m_cDatum;															
    			rsHauptSt.m_MaschineNr			=data.m_iMaschinenumber;					
    
    			rsHauptSt.m_Beschleunigung		=data.m_iBeschleinigung;
    			rsHauptSt.m_Geschwindigkeit		=data.m_iGeschwindigkeit;
    
    			rsHauptSt.SetFieldDirty(&rsHauptSt.m_JobId,FALSE);
    
    			rsHauptSt.Update();														
    			rsHauptSt.MoveLast();
    
    			rsHauptSt.MoveNext();
    
    //-----------------------------------------------------------------------------+
    //		Eintrag in die DatenBank Ende										   !
    //-----------------------------------------------------------------------------+
    		}
    
    		catch (CDBException *e)
    		{
    			e->Delete();
    		}
    
    	}
    
    }
    

    So habe ich versucht abe das program stürtz ab..Also es klappt nicht



  • hab das problem gelöst :=)
    Vielen Dank



  • Ich kenne mich mit MFC so gut wie gar nicht aus, aber gibts dafür nichts besseres? Muss man wirklich einmal durch die gesamte tabelle rennen um zu merken das der Datensatz schon da ist?



  • natürlich gibt es das, nur dann müsste man sich halt mit der Klasse CRecordset beschäftigen um [urlhttp://msdn.microsoft.com/en-us/library/fekwckaz%28v=VS.80%29.aspx]m_strFilter[/url] zu finden und dann noch etwas bei SQL kramen um zu sehen was es sich um die WHERE-Klausel von SLQ handelt und dann könnte man solche sachen machen wie "Spalte = gesuchter wert". Wenn dann noch ein oder mehrere ergebnisse zurück kommen, dann existiert der Eintrag schon.

    Andere Möglichkeit ist die Speziellen Möglichkeiten der DB zu nutzen, also solche Sachen wie Exists oder was es da noch so alles geben könnte, und das Ergebnis sich zu holen, aber dazu müsste man wissen welche DB vorhanden ist


Anmelden zum Antworten