Recordset



  • hi,

    CString spiel;
    	GetDlgItem(IDC_COMBO1)->GetWindowText(spiel);
    
    	CRecordset rs(&d);
    	rs.Open(CRecordset::forwardOnly,"SELECT ID From spiel Where Spiel=spiel",CRecordset::readOnly);
    
    	CString id;
    
    	while(!rs.IsEOF())
    	{
    
    		rs.GetFieldValue("ID",id);
    		rs.MoveNext();
    	}
    

    ich möchte das id den wert bekommt wo meine where-abfrage wahr wird. so wie ich es jetzt habe hat id immer den letzten wert vom letzten datensatz.

    was muss ich ändern danke 🙂

    ronny



  • Hallo.

    Du öffnest dein RecordSet ja schon an der Stelle, an welcher die WHERE Klausel erfüllt ist:

    rs.Open(CRecordset::forwardOnly,"SELECT ID From spiel Where Spiel=spiel",CRecordset::readOnly);

    In der danach folgenden Schleife durchläufst Du das Set bis EOF und weist jedesmal deinem String den Wert zu. Also kann er nur den Wert bei EOF haben.

    Probier statt der Schleife mal folgendes:

    rs.GetFieldValue(<Feldname>,<Variable>);
    

    Feldname und Variable halt entsprechend ersetzen.

    Gruß

    M.



  • dann gibt er mir nur den ersten wert der tabelle zurück.



  • Ronnys schrieb:

    hi,

    CString spiel;
    	GetDlgItem(IDC_COMBO1)->GetWindowText(spiel);
    	
    	
    	
    	CRecordset rs(&d);
    	rs.Open(CRecordset::forwardOnly,"SELECT ID From spiel Where Spiel=spiel",CRecordset::readOnly);
    	
    	CString id;
    
    	while(!rs.IsEOF())
    	{
    
    		rs.GetFieldValue("ID",id);
    		rs.MoveNext();
    	}
    

    ich möchte das id den wert bekommt wo meine where-abfrage wahr wird. so wie ich es jetzt habe hat id immer den letzten wert vom letzten datensatz.

    was muss ich ändern danke 🙂

    ronny

    das ist nicht der code 1:1 aus deinem programm oder?
    in dem sql-string suchst du nach einem datensatz, der explizit den wert "spiel" besitzt.
    der wert, der in der CString variable namens "spiel" steht ist völlig irrelevant.

    CString strSpiel;
    CString strSQL;
    CRecordset oSpielRecord;
    int iSpielID;
    
    GetDlgItem(IDC_COMBO1)->GetWindowText(strSpiel);
    strSQL = "SELECT * FROM SPIEL WHERE SPIEL = "
    strSQL = strSQL + strSpiel + ";";
    
    oSpielRecord.Open(CRecordset::snapshot, strSQL);
    while (oSPielRecord != EOF())
    {
      iSpielID = oSpielRecord.SpielID;
    }
    oSpielRecord.Close();
    

    Esco

    PS: ich würde mir mal n buch über c++ bzw visual c++ mit c++ grundlagen und datenbankverbindungen zulegen 😉


Anmelden zum Antworten