Daten aus DB holen



  • Nein, du musst vorher noch eine Datenbankabfrage starten und das Ergebnis aufnehmen. Das SQL Statment hast du ja, aber diese musst du auch an die DB schicken!!! Schau mal hier vorbei: http://www.willemer.de/informatik/db/odbcmfc.htm



  • das hab ich schon, habs nur nicht mitgepostet 😉

    void CSteuerung::GetDaten(CString sReferenzname)
    {
    	CString strHilfe = "";	
    	strHilfe = "SELECT * FROM Referenzen  WHERE Referenzname = '" + sReferenzname +"'";
    	//strHilfe = "SELECT TOP 1 * FROM Referenzen ORDER BY VersuchId DESC"; 
    
    	try
    	{
    		if(m_pRs->State == adStateOpen)
    		  m_pRs->Close();
    		m_pRs = NULL;
    		m_piAdoRecordBinding = NULL;
    		m_pRs.CreateInstance(__uuidof(Recordset));
    		m_strCmdText = _T(strHilfe);
    		pCmd->CommandText = (_bstr_t)m_strCmdText; 
    		m_pRs->PutRefSource(pCmd);
    		_variant_t vNull;
    		vNull.vt = VT_ERROR;
    		vNull.scode = DISP_E_PARAMNOTFOUND;
    		m_pRs->Open(vNull, vNull, adOpenDynamic, adLockOptimistic,adCmdUnknown);
    		if(FAILED(m_pRs->QueryInterface(__uuidof(IADORecordBinding),(LPVOID*)&m_piAdoRecordBinding)))
    				_com_issue_error(E_NOINTERFACE);
    		m_piAdoRecordBinding->BindToRecordset(&m_rsRecSet);
    	}
    
    	// Fehler vorhanden?
    	catch (_com_error &e)
    	{
    		// Fehlermeldung generieren
    		GenerateError(e.Error(), e.Description());
    	}
    
    }
    


  • Dann solltest du mit MoveNext() den nächsten Datensatz auslesen können.
    Hab dies noch nie so wie du es gemacht hast gesehen (bin ja aber auch Noob). Hab bis jetzt immer nur ne klasse von CRecordSet abgeleitet (oder direct ODBC genutzt) und dies ging dann zumindest so.



  • wie meinst du das mit movenext?
    Warum eigentlich movenext, müsst doch movefirst sein oder



  • hat sich erledigt
    geht so wie oben beschrieben und mit der MoveFirst Anweisung
    danke



  • Du solltest dich mit SQL und den Grund lagen der Programmmierung beschäftigen.

    Wenn sReferenzname leer ist dann kannst du auch nicht erwarten das

    SELECT * FROM Referenzen WHERE Referenzname = '' eine Ergebnismenge für dich hat.
    Zumindest solange nicht Referenzname leer ist.



  • ich weiß 🙂
    habs ja dann so gemacht , dass es funktioniert
    Ich brauch halt immer den Referenznamne (m_Referenzname.GetWindowText(sReferenzname);), dann bekomm ich auch immer die anderen Werte aus der DB



  • OK.
    Mit MoveNext() gehst du ebenfalls wenn du am anfang stehst und noch keine Daten abgerufen hast auch auf den ersten Datensatz. Mit MoveFirst() springst du immer zum ersten Datensatz...



  • Mit MoveFirst() springst du immer zum ersten Datensatz...

    dass stimmt, aber weil ich immer einen eindeutigen Refnamen hab (der nur einmal vorkommt) passts



  • Der Fehler (wenn ichs richtig verstanden habe) liegt daran, dass es nicht funktioniert, wenn du in dein SQL-Statement eine WHERE Klausel einfügst. Du musst das mit einem Filter machen (m_strFilter). Schau dir das passende in der MSDN an: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_mfc_crecordset.3a3a.m_strfilter.asp


Anmelden zum Antworten