MFC SQL-Problem

  • #1
D

Don_Pazo

Bekanntes Mitglied
Themenersteller
Dabei seit
16.09.2005
Beiträge
112
Reaktionspunkte
0
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
 
Thema:

MFC SQL-Problem

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.963
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben