Daten aus DB holen



  • hi

    und zwar, geb ich in einer Maske Datensätze ein und wenn ich auf "Übernehemen" klicke, werden die Daten in der DB gespeichert, nun wenn ich danach auf "Bericht erstellen" klicke soll die Daten aus der DB kommen

    WIe muss ich das denn machen?

    hab gedacht das geht so

    void CSteuerung::GetDaten(CString sReferenzname)
    {
    	CString strHilfe = "";
    	strHilfe = "SELECT * FROM Referenzen  WHERE Referenzname = '" + sReferenzname +"'";
    

    der Referenzname ist eindeutig, und darf nicht zweimal in der DB vorkommen. Wenn ich den Hab dann weiß ich ja auch die anderen Daten zu dem Versuch

    Wenn ich dann die Funktion aufruf
    pSt.GetDaten(sReferenzname); dann ist sReferenzname immer """" leer 😕



  • Überprüfe mal ob vor der Übergabe an deine Funktion in der Variable ein Wert enthalten ist...



  • hi
    Die VAriabel sReferenzname hat keinen wert

    erst wenn das m_Referenzname.GetWindowText(sReferenzname); schreib wird die Variable befüllt, aber dann kommt der wert ja aus der maske oder?



  • Ja, wenn m_Referenzname ein Textfeld ist kann speicherst du damit den Wert aus dem Feld in der Variable...
    Irgendwie versteh ich jetzt net genau wo dein problem liegt???



  • ja so klappts ja auch alles perfekt
    Aber so bekomm ich doch nicht die werte aus der DB oder?



  • 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