Datenbank



  • Hi @ all !!

    Ich muss mein Prog so schnell wie möglich an eine Interbase DB anpassen (ODBC).
    Das ISERT, SLEETE, UPDATE, hat hingehauen (wird ja auch nichts zurückgeliefert).

    Wie kann ich denn Daten selectieren (Muss mit Querys arbeiten) ???

    Könnte mit das jemand erklären ???

    Thx



  • In der ODBC geht das mit m_srtFilter.

    Einfach in der RecordsetKlasse die Membervar m_strFilter mit einem Wert füttern
    z.B.:

    m_pSet->m_strFilter.Format("[%s"]='%s'", strSpaltenname, strSuchbegriff);
    


  • Hi,

    Bei

    m_pSet->m_strFilter
    

    wird doch nur der erste gefundene Datensatz angezeigt, oder ??

    Eigentlich wollte ich mit "SELECT" Anweisungen arbeiten !!!



  • Nein ich glaube nicht.
    Es werden alle passenden Einträge angezeigt.
    Du musst sie nur richti (alle Einträge) anzeigen.

    Mit SQL kannst du auch arbeiten. Du kannst in die Funktion CRecordset::Open(...)
    eine SQL Anweisung (SELECT ... FROM ...) übergeben. Näheres steht in der MSDN



  • [ Dieser Beitrag wurde am 15.11.2002 um 12:05 Uhr von FooFighter86 editiert. ]



  • Ich bins nochmal,

    in der MSDN habe ich leider nicht viel gefunden, nur wie ich die Klasse ableite.
    Nach der Ableitung habe ich aber mehrere Fehlermeldungen (Angeblich wäre CRecordset nicht bekannt). Wie muss ich denn die CRecordset includeieren ??

    Wie werden eigentlich die gefundenen Datensätze von von der CRecordset behandelt ??

    Hat jemand Beispiel Code ?? oder Tutorials zu dieem Thema ???

    Thx



  • Ok,

    hab folgendes Probiert:

    TestRecordSet *m_pSet;
        m_pSet = new TestRecordSet(NULL);
        m_pSet->m_strFilter = "Spalte1 = '2'";
    

    Wie kann ich jetzt die Daten ausgeben ????



  • Hallo !

    Dass man

    #include <afxdb.h>
    

    includeiern 🙂 muss, hast du ja anscheinend schon gefunden.

    m_strFilter ist übrigens wie die Where-Klausel in einer Select-Anweisung.
    Z.B.:
    select * from tabelle where tag='Sonntag';
    entspricht:
    m_pSet->m_strFilter = "tag='Sonntag'";

    Wenn die Tabelle noch geschlossen ist, jetzt mit m_pSet->Open() öffnen. Wenn sie bereits offen ist, mit m_pSet->Requery() aktualisieren. Bei beiden Methoden steht der Datenbankzeiger auf dem ersten Datensatz. Wenn du alle Datensäte haben möchtest, kannst du das z.B. mit einer while-Schleife und MoveNext() machen:

    while(!m_pSet->IsEOF())
    {
        // mach was, z.B. Membervariablen der von CRecordset abgeleiteten Klasse auslesen
        m_Variable = m_pSet->m_Spalte1;
    
        m_pSet->MoveNext();
    }
    
    m_pSet->Close();
    

    Such doch mal nach Datenbank ober CRecordset oder so, wenn du noch mehr wissen willst (gibt hier bestimmt eine Menge zu dem Thema). Ausserdem steht das bestimmt auch in den FAQ.

    Tschüss

    P.S.:
    Zu deinem letzten Beispiel

    m_pSet->m_strFilter = "Spalte1 = '2'";
    

    Das ist in Ordnung, wenn die 2 als String abgelegt ist. Wenn es ein Zahlenwert ist (z.B. int), dann musst du die Apostrophs vor und hinter der 2 weglassen.



  • Ok ich nochmal
    Sieh dir mal den Thread "Datenbankabfrage & SQL" an.

    Da steht alles drin.
    Mit Beispielsource



  • Ode du schaust in die FAQ. Habe mir vor Monaten mal die Mühe gemacht ein Bsp. zu posten.


Anmelden zum Antworten