MFC SQL-Problem

Dieses Thema MFC SQL-Problem im Forum "Windows XP Forum" wurde erstellt von Don_Pazo, 18. Feb. 2006.

Thema: MFC SQL-Problem Hallo, ich habe in meinem Programm eine Klasse CdbKurseStatus (von CRecordset) erstelt. Die Klasse hat nur eine...

  1. Hallo,
    ich habe in meinem Programm eine Klasse CdbKurseStatus (von CRecordset) erstelt. Die Klasse hat nur eine Tabelle von der DB zugewiesen bekommen und zwar KurseStatus.

    Code:
    --------------------------
    | ID | Kurse | Status | IP |
    --------------------------
    Also in der Klasse CdbKurseStatus habe ich die Variablen m_ID, m_Kurse, m_Status und m_IP.
    Meinen Problem ist wenn ich nur nach dem einen Spalte abfrage (im Beispiel Status) dann bekomme ich die Fehlermeldung Ungültiger Deskriptorindex. Warum ??
    Code:
    const CString strSQLKurse = SELECT DISTINCT Status FROM KurseStatus;
    CdbKurseStatus rsKurseStatus(NULL);	// von CRecordset
    
    // Tabelle KurseStatus mit SQL-Anweisung öffnen
    rsKurseStatus.Open(CRecordset::snapshot, _T(strSQLKurse), CRecordset::none);
    
    ...// Code
    rsKurseStatus.Close();
    Und meine Frage ist, kann ich bzw. wie kann ich nur nach diese eine Spalte in der Tabelle abfragen ??
     
  2. Wenn Du CdbKurseStatus verwendest, werden ja alle Felder erwartet. Du kannst entweder eine weitere Klasse von CRecordset ableiten, die nur ein entsprechendes Attribut hat (bzw. die Header- und die Source-Datei kopieren, die Klasse umbenennen, im Header alle Membervariablen außer m_Status löschen, im Konstruktor die entsprechenden Zeilen löschen und m_nFields gleich 1 setzen und schließlich in DoFieldExchange die drei unnötigen Zeilen entfernen).

    Du kannst aber auch CRecordset verwenden und mit GetFieldValue die Werte holen:

    -------

    ...
    const CString strSQLStatus = SELECT DISTINCT Status FROM KurseStatus;

    CRecordset rsStatus(...
    ...

    CString value;
    while (!rsStatus.IsEOF()) {
    ...
      rsStatus.GetFieldValue((short)0, value);
      ...
    ...
    -------

    Müsste so klappen.
     
  3. Danke schön,
    ich habe mich für den ersten Vorschlag entschlossen. Es geht endlich :D