m_strFilter aber wie benutze ich in Datenbank ??



  • Hallo,
    Ich habe eine sehr große datenbank...Wenn ich ein eintrag hinzufügen möchte muss ich erstmal in die datenbank suchen ob die eintrag vorhanden ist. Wenn eintrag da ist, speichere ich nicht.
    Dafür habe ich bis jetzt wie unten eine Prüfung gemacht

    RsHauptStrukturA rsHauptSt(GetDocument()->m_pDatabase);					
    
    		try
    		{
    
    	//-------------------------------------------------------------------------------+
    	//		Eintrag in die DatenBank Begin											 !
    	//-------------------------------------------------------------------------------+
    			rsHauptSt.Open(CRecordset::dynaset, NULL, CRecordset::none);	
    
    		int kp;
    
    		while (!rsHauptSt.IsBOF() && !rsHauptSt.IsEOF())
    		{
    			kp=0;
    	//-------------------------------------------------------------------------------+
    	// NAme und Id müssen geprüft werden											 !
    	//-------------------------------------------------------------------------------+			
    			if(data.m_iAnwenderid==rsHauptSt.m_Hs_UserID&&data.m_sname==rsHauptSt.m_name)
    			{
    				kp=1;
    				break;
    			}
    
    				rsHauptSt.MoveNext();
    
    		}
    

    Ich sehe aber, bevor hinzufügen, die ganze datenbank mit eine while schleife durch zu suchen macht mein Programm sehr langsamm...
    Anstatt diese While schlefe was kann ich benutzen. Wie kann ich prüfen ob das eintrag in DB schon vorhanden ist oder nicht ??

    Geht das mit m_strFilter? wenn ja, kann jemand mit ein kleines beispiel wie oben machen...
    Kann mir bitte jemand helfen...

    vielen dank



  • Ich brauch dringend hilfe....



  • Da gibt es einen sehr guten Artikel hier im Formu:

    http://magazin.c-plusplus.net/artikel/Datenbankzugriff mit CRecordset (und CDatabase) - Teil 1

    Du musst m_strFilter setzen, bevor du ein open aufrufst. Alles andere steht in dem Artikel.



  • Hallo,
    danke für deine Antwort...Aber es gibt ein kleines Punkt

    CFarbenSet farbSet;
    long lID = 5;
    farbSet.m_strFilter.Format(_T("[ID] = %d"), lID); // Bedingung setzen
    // WHERE ID = 5
    // oder
    CString strBezeichnung = _T("Gelb");
    farbSet.m_strFilter.Format(_T("[Bezeichnung] = \'%s\'"), strBezeichnung);
    // WHERE Bezeichnung = 'Gelb'
    farbSet.Open();
    //...
    

    oben steht WHERE ID = 5 , Bei meinem Fall will ich die werte speichern WHERE ID nicht gleich 5 ist oder WHERE Bezeichnung nicht gleich 'Gelb' ist...
    Wie kann man das machen ?
    Danke



  • Du solltest dich mal mit SQL befassen. Da gibts so einen Operator NOT...



  • Also das kann ich dann nicht mit m_strFilter machen meinst du...das geht dann nur mit SQL befehle???



  • seyidi schrieb:

    Also das kann ich dann nicht mit m_strFilter machen meinst du...das geht dann nur mit SQL befehle???

    Wenn du mal richtig lesen würdest, dann hättest du die Lösung schon. Im oben genannten Artikel steht unter 5.1.1

    In SQL kennen Sie sicher:
    Code:
    SELECT * FROM Tabelle_Soundso WHERE Bedingung
    Code:
    SELECT * FROM Tabelle_Soundso WHERE Bedingung
    Code:
    SELECT * FROM Tabelle_Soundso WHERE Bedingung

    Mit CRecordset geht das natürlich auch, nur heißt es hier m_strFilter und ist ein CString.

    Füllen Sie diesen String vor dem Datenholen einfach mit dem, was Sie bei SQL hinter das WHERE schreiben würden.

    Wenn du also vernünftig filtern willst, dann solltest du erstens wissen wie das unter SQL geht. Hast du das rausgefunden dann brauchst du zweitens nur noch deine WHERE-Klausel in den m_strFilter schreiben und fertig ist der Lack. Ansonsten verbietet dir keiner, es einfach mal zu probieren.... 🙄


Anmelden zum Antworten