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