Datenbank - Zusammenfassung CRecordset



  • Hallo,
    ich beschäftige mich zurzeit mit Datenbanken(odbc) und brauche ein kleines tutorial zu selects bzw. m_pSet...
    Ich kann zwar selecten, aber ich weiss nicht wie ich die daten auswerten kann.

    Bis später,

    d[o.O]b
    FRE-AN



  • in der FAQ hats nen langen beitrag über datenbanken, aber ich weiss nícht, ob der dir hilft.



  • Also dann mach ich mal ne Kurzerklärung dazu, die Frage kommt nämlich soooooo oft:

    Registrieren von ODBC-Datenquellen:

    SQLConfigDataSource(NULL, // Handle des Fensters, welsches die Registrierung    durchführt  
                        ODBC_ADD_DSN, // Ein Datensatz soll hinzugefügt werden  
                        "Microsoft Access Driver (*.mdb)",  
                        "DSN=Name\0"  
                        "Description=Meine Datenquelle\0"  
                        "FileType=Access\0"  
                        "DBQ=C:\\Verzeichniss\\Name.mdb\0"  
                        "MaxScanRows=20\0"  
                        };
    

    Der 4. Parameter von SQLConfigDataSource() ist eine Liste von SQL-Schlüsselwörtern. Die schnellste Möglichkeit die benötigten Schüsselwörter zu finden ist: Erstellen sie über Systemsteuerung -> Verwaltung (Nur bei WinXP) -> ODBC-Datenquelle, eine Datenquellen per Hand. Im Registryschlüssel: HKEY_CURRENT_USER\Software\ODBC\ODBC.INI finden sie nun die neue Datenquelle und können hier die benötigten Schlüsselwörter ablesen.

    Programm mit ODBC erweitern:
    Um mit ODBC zu arbeiten, gibts es in der MFC eine Klasse Names CRecordset. Will man also eine DB zum Programm hinzufügen ist nichts weiter zu tun als eine neue Klasse zu erstellen, die von CRecordset abgeleitet ist. Dem MFC-Assistenten müssen nun der Name und der Path der DB mitgeteilt werden, den Rest der Arbeit macht er für dich. Wer das per Hand machen will, soll sich erst mal so eine Klasse von Assistenten erstellen lassen, dann kann er sie sich genauer ansehen, ist nicht schwer.

    Arbeiten mit m_pSet:
    m_pSet ist meistens ein Zeiger auf die von CRecdorset abgeleitete Klasse.

    CMyRecordset *m_pSet;
    

    Das erste was wir nun mit m_pSet machen, bevor wir die DB abfragen, ist es zu initialisieren:

    m_pSet = new CMyRecordset(NULL);
    

    Als nächstes können wir Filter setzten, oder die DB nach gewissen Kriterien sortieren:

    m_pSet->m_strFilter = "Kunde = 'xxx'";
    

    Diese Zeile bewirkt, das beim öffnen der DB alle Datensätze rausgefiltert werden, die als Kunde den Wert 'xxx' haben, alle anderen Datensätze sind unsichtbar. Begibt man sich also z.B. auf den ersten Datensatz, so ist man nicht in Datensatz Nr.1 der DB, sondern im ersten Datensatz, in dem Kunde = 'xxx' ist.

    m_pSet->m_strSort = "Vorname, Nachname";
    

    Diese Zeile bewirkt, dass die Einträge in der DB erst nach dem ihrem Vornamen, dann nach ihrem Nachnamen sortiert werden.

    m_pSet->Open(CRecordset::snapshot, NULL, CRecordset::readOnly );
    

    Hier wird die DB geöffnet, wem die Bedeutung der Parameter interessiert, kann sie gern in der MSDN nachlesen.
    Wenn für die DB Filter gesetzt wurden, oder die Sortierfunktion benutzt wird, sollt die DB danach aktualisiert werden:

    m_pSet->Requery();
    

    Navigation im Recordset:
    Die 4 wichtigsten Befehle des Recordset sind:

    m_pSet->MoveFirst();
    m_pSet->MoveLast();
    m_pSet->MoveNext();
    m_pSet->MovePrev();
    

    Ich glaube die Befehle sind selbsterklärend [img]images/smiles/icon_wink.gif[/img]

    Abfragen der Daten:
    Wenn sich das Recordset in einem Datensatz befinden, stehen die aktuellen Werte der Felder in den Member-Variablen der von CRecordset abgeleiteten Klasse. Sie müssen nicht explizit geladen werden !

    Bearbeiten der Datensätze:

    m_pSet->AddNew();
    

    Mit diesem Befehl wird ein neuer Datensatz am Ende der DB eingefügt. Nach dieser Zeile kommen die Zuweisungen der Werte an die Member-Variablen der der von CRecordset abgeleiteten Klasse. Sobald alle gewünschten Wert übergeben wurden, wird der Datensatz mit m_pSet->Update(); in die DB geschrieben.

    m_pSet->Edit();
    

    Dieser Befehl ermöglicht das Ändern eines Datensatzes. Nach seinem Aufruf werden die neuen Werte an die Member-Variablen der von CRecordset abgeleiteten Klasse übergeben. Mit m_pSet->Update(); wird der aktuelle Datensatz mit den neuen Werten überschrieben.

    m_pSet->Delete();
    

    Löscht den aktuellen Datensatz. ACHTUNG !!! Diese Funktion löscht den aktuellen Datensatz sofort, ohne m_pSet->Update() !!!!!!!!!!!!!!!!!!
    Schließen der DB:

    m_pSet-Close();
    

    und delete m_pSet; nicht vergessen [img]images/smiles/icon_wink.gif[/img]

    [ Dieser Beitrag wurde am 02.02.2002 um 00:59 Uhr von CMatt editiert. ]

    [ Dieser Beitrag wurde am 03.03.2002 um 18:20 Uhr von dEUs editiert. ]



  • Danke für die schnelle Antwort.
    Hat mir schon etwas geholfen, aber mein Problem ist etwas delikater... images/smiles/icon_rolleyes.gif

    Ich habe eine Passwort abfrage, pw's in DB gespeichert.
    Ich gebe das pw ein und select sucht danach. Dann will ich gefundenes ausgeben:

    m_sAusgabe=m_pSet->m_Passwort;

    Aber irgendwie speichert er, wenn er nix findet einfach die eingabe die ich testweise gemacht habe und gibt beispielsweise "asgasasgarg" aus.

    Kennst du dich mit resultsets aus? irgendwie muss ich damit arbeiten, kenn mich syntaxmässig aber nicht aus (in VC++).

    Danke,

    c[o.O]b
    FRE-AN


Anmelden zum Antworten