Wieder mal Combo



  • Hi zusammen,
    ich hab wieder ein kleines Problem mit ner Combo. ICh zeig euch mal was ich mach:

    void CDokumentenVerwaltungSet::loadKunde(CComboBox &Combo)
    {
    	short index=3;
    	CDBVariant varValue;
    	MoveFirst();
    	Combo.ResetContent();
    	Requery();
    	while (!IsEOF())
    	{
    		GetFieldValue( index, varValue );
    		//Merken, an welche Position es geschrieben wird (wegen evtl. Sortieren oder so) 
    		int nIdx = Combo.AddString(*(varValue.m_pstring));//hier steigt er aus!
    		Combo.SetItemData(nIdx,m_ID); 
    		MoveNext();
    	}
    	Combo.SetCurSel(0);
    }
    

    Wenn ich obigen Code mit short index = 0; verwende dann funktioniert es mit allen anderen Zahlen nicht, woran liegt das? Bzw. woran könnte das liegen?
    Danke schon mal für alle Antworten!



  • Das ist glaubich kein Problem der Combobox, sondern von der Datenabfrage.

    Hast du 4 Spalten? Ist die 4. ein String?
    Was sagt der Debugger zu varValue.m_pstring?

    Und, du kannst das MoveFirst weglassen, das Requery macht es sowieso nichtig. 🙂



  • Ich hab 8 Spalten die alle mit Text bzw. die 2. (also 1) ist meine ID mit Autowert. Der Debugger sagt komischerweise nichts zu varValue.m_pstring aber weder mit index 0 noch sonst. Also egal ob es geht oder nicht er zeigt mir da nichts an! Und das mit dem moveFirst, stimmt jetzt wo du es sagst! ursprünglich stand da nur moveFirst aber mittlerweile hab ich gemerkt dass es so ohne fehler klappt! 😃



  • Ich habe mal geschaut, von GetFieldValue gibt es eine Version, die einen CString nutzt - hast du die schon mal ausprobiert?
    Und beschreib bitte "//hier steigt er aus!" genauer. Fehlermeldung?

    Und dieses Mal bitte mit Absätzen, der Bandwurm da oben macht ja Knoten im Kopf. 🤡



  • was für einen Bandwurm? ich hab doch alles schön mit Absätzen!
    Ich hab jetzt

    void CDokumentenVerwaltungSet::loadKunde(CComboBox &Combo)
    {
    	short index=3;
    	CString varValue;//hier jetzt Sting anstelle von CDBvariant
    	Combo.ResetContent();
    	Requery();
    	while (!IsEOF())
    	{
    		GetFieldValue( index, varValue );
    		//Merken, an welche Position es geschrieben wird (wegen evtl. Sortieren oder so) 
    		int nIdx = Combo.AddString(varValue);
    		Combo.SetItemData(nIdx,m_ID); 
    		MoveNext();
    	}
    	Combo.SetCurSel(0);
    }
    

    Und jetzt gehts! 😃
    Wieso komm ich nie auf sowas? 😞
    Aber woran lag das jetzt?
    Achja Fehlermeldung war access violation



  • Keine Ahnung, woran das lag. 😞

    Ich habe dich aber das ausbauen lassen, wovon ich keine Ahnung habe, nämlich den CDBvariant. Das es praktischerweise gleich funktioniert ist doch super. 😃

    Access Violation klingt mir nach einem Zeigerfehler.

    Auf sowas kommt man recht einfach, wenn man in der MSDN guckt, was bestimmte Befehle machen. Wenn es da dann unterschiedliche Versionen gibt, von der eine einfacher aussieht, als die, die ich grade nutze - dann teste ich die einfach mal. 🙂



  • hm ja da haste wohl recht, CString ist mir auch wesentlich geläufiger wie CDBvariant.
    Aber eine Frage hab ich jetzt noch, wie kann ich am einfachsten überprüfen, dass kein Eintrag doppelt rein kommt?
    Also wenn ich jetzt 2 verschiedene Teile mit dem gleichen Kunde habe, und ich füll meine Combo mit Kunden dann steht der Kunde zwei mal hintereinander drin!



  • Entweder greifst du direkt auf die Kundentabelle zu, dann sollten die nur einmal drin sein.
    Oder du machst ein select distinct, wenn du Einfluß auf den SQL-String hast.
    Oder du guckst vor dem Einfügen, ob der String schon drin ist.



  • OK hab mich für letztes entschieden! ich prüf jetzt bevor ich hinzufüge ob findstring == CB_ERR dann füg ich es in die Combo ein. Danke für deine Hilfe


Anmelden zum Antworten