Zum Inhalt springen

SQL-Abfrage mit ODBC


Empfohlene Beiträge

Hallo zusammen!!!

Ich arbeite gerade mit Visual C++ 6.0 an einer Anwendung mit ODBC-Anbindung (Access 2000).

Ich habe beim Erstellen mit dem Anwendungsassistenten alle Tabellen der DB angegeben. Wenn ich

jetzt aber mit Open() das Recordset so umbiegen will, das ich nur die Daten einer Tabelle bekomme,

schreibt die Anwendung diese Daten in die ersten Variablen, die in DoFieldExchange(...) angegeben

sind, und nicht in die korrekten Variablen der Tabelle.

Danach habe ich es mit m_pDatabase->ExecuteSQL("SELECT * FROM interpret") versucht, aber die

Methode ExecuteSQL liefert scheinbar keine Daten.

Weiss einer von Euch, wie ich das hinbekommen könnte?

hier noch ein kleiner Code-Ausschnitt:


void CMP3VerwaltungView::fillCboInterpret(void)

{

   // einlesen der Interpretentabelle in das Recordset

   m_pSet->Open(AFX_DB_USE_DEFAULT_TYPE, "SELECT * FROM haupt", 0);

   //m_pSet->Requery();


   // füllen des Interpreten-Combofeldes

   if(!m_pSet->IsEOF())

   {

      m_pSet->MoveFirst();

   }


   while(!m_pSet->IsEOF())

   {

      m_cInterpretB.AddString(m_pSet->m_Album);


      m_pSet->MoveNext();

   }

}

Schönen Feiertag noch, k.o.b

Link zu diesem Kommentar
Auf anderen Seiten teilen

@kingofbrain:

Ursache des Problems dürfte sein, dass die vom AppWizard automatisch generierte von CRecordset abgeleitete Klasse genau auf die Abfrage zugeschnitten ist, die Du durch die Auswahl der Tabellen zu Anfang festgelegt hast. Da lässt sich nichts umbiegen, weil die Klasse mitsamt Ihren Membern praktisch nur mit genau dieser Abfrage funktioniert.

Ich würde empfehlen, für eine andere Abfrage selbst eine Klasse von CRecordset abzuleiten. Die generierte Klasse kann ja als Vorlage dienen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das CRecordSetMember m_strFilter beinhaltet ja soz. die WHERE-Klausel. Damit lassen sich dann Abfragen über mehrere Tabellen (also Joins z.B.) durchführen.

Ich verstehe nun Dein Problem nicht. Ich habe auch mehrere Tabellen in der GetDefaultSQL()-Methode angegeben.

Wenn ich nun die RecordSet-Instanz so öffne:

m_Intsanz->m_strFilter="irgendeinespalte<>40";

m_Intsanz->Open(AFX_DB_USE_DEFAULT_TYPE,NULL,CRecordset::executeDirect);

...dann funzt es auch.

Vielleicht gehts ja bei Dir dann auch ?!

Just my 2Cents...

Link zu diesem Kommentar
Auf anderen Seiten teilen

hallo ich nochmal!

wenn mir der wizard die CRecordset-sachen erstellt hat, gab's bei mir auch schon des öfteren probleme....

ich mach mir das in letzter zeit lieber alles selber...

erst mal ein CDatabase-obj. anlegen, und dann massig CRecordsets....

aber muss jeder selber wissen...

bigredeyes

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...