MFC ODBC Driver Problem

Silvercreast

Erfahrenes Mitglied
Hallo
ich habe ein Problem mit der Anbindung des ODBC Driver an mein MFC - Programm.
Es wird zwar jetzt schwer euch das zu erläutern, aber ich hoffe Ihr könnt mir trotzdem helfen.
Los geht's :)

Ich habe eine MFC - Musik_Datenbank geschrieben in der ich :
- Lieder suchen kann
- Lieder sortieren kann (Auf -und Abwärts)
- In der ich Lieder abspeichern kann
- und in der ich die vorhandenen Lieder auch aus Drucken kann.

So mein Problem spielt sich in der Class MusicManagement ab. Die anderen Klassen sind denk ich mal egal, wenn nicht bescheid sagen.

Meine MusicManagement.h sieht folgendermaßen aus:
Code:
// MusicManagement.h: Schnittstelle für die Klasse MusicManagement.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_MUSICMANAGEMENT_H__131925CB_F56E_4294_A73C_8D4FA8629802__INCLUDED_)
#define AFX_MUSICMANAGEMENT_H__131925CB_F56E_4294_A73C_8D4FA8629802__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "MusicCollection.h"
#include "tblDatenbank.H"   //Libary der ODCB Driver Class 

class MusicManagement  
{
public:

	MusicCollection m_MusicCollection;

	CtblDatenbankAccessor music;  // Eine Variable vom Typ der ODBC    
        Driver Class

public:

	MusicManagement();
	virtual ~MusicManagement();

	void LoadData();
	void AddNewSong(MusicPiece NewSong);
	void StoreData();
	void ReadDB();
	void StoreDB(MusicPiece NewSong);  // Methode die das abspeichern  
        in der Datenbank ausführen soll

};

#endif // !defined(AFX_MUSICMANAGEMENT_H__131925CB_F56E_4294_A73C_8D4FA8629802__INCLUDED_)

Die blau markierten Felder sind die um die es sich hauptsächlich drehen soll.
Den Variablentyp music nutze ich, da sich die Methode ja in der MusicManagement.cpp befindet und ich eine Verbindung zur ODBC Class brauche.
In meiner MusicManagement.cpp kann ich auch auf alles zugreifen.
An meine ODBC Class habe ich CRecordset vererbt um über music gleichseitig auch an AddNew usw. zugelangen. Wie ich die ODBC Class eingerichtet habe findet Ihr unter:

http://www.codeproject.com/database/oledbconsumer1.asp

Nun dachte ich eigentlich das es funktioniert aber nichts da, ich habe sehr komische Fehlermeldungen bekommen:

c:\programme\microsoft visual studio\vc98\atl\include\atldbcli.h(2862) : Bei der Kompilierung der Member-Funktion 'void __thiscall ATL::CAccessorRowset<class ATL::CAccessor<class CtblDatenbankAccessor>,class ATL::CRowset>::Close(void)' der Klassenvorlage

Diese Fehlermeldung sagt der mir dann an verschiedenen Stellen und ich weiss überhaupt nicht wieso :confused:

Hat das jetzt jemand verstanden und kann mir helfen :confused:

Gruss Silver
 
Zuletzt bearbeitet:
Lass mal nicht die entscheidende Hälfte der Fehlermeldung weg und es wird leichter zu helfen :)
 
Also wie ich heraus gefunden hab, sind di e4 fehler in eienr Funktion und zwar :

Code:
	// Close the opened rowset and release the created accessors for the output columns

	void Close()
	{
		if (GetInterface() != NULL)
		{
			ReleaseAccessors(GetInterface());
			TAccessor::Close();
			TRowset::Close();
		}
	}

Der Compiler zeigt dann immer auf die markierte Klammer
 
Ich meine eine komplette Meldung. Der Ausschnitt ist nur die Angabe der Zeile mit dem Fehler, die Fehlerbeschreibung ist angeschnitten:

<Hier müsste eine Fehlernummer (C-xxxx) stehen>
c:\programme\microsoft visual studio\vc98\atl\include\atldbcli.h(2862) : Bei der Kompilierung der Member-Funktion 'void __thiscall ATL::CAccessorRowset<class ATL::CAccessor<class CtblDatenbankAccessor>,class ATL::CRowset>::Close(void)' der Klassenvorlage
<hier müsste der Text der Fehlermeldung weitergehen>
 
Ah, da ist ein Template betroffen. Ganz oben über den ganzen Fehler-Klötzen müsste aber ein Cxxxx stehen (mit zusätzlichem Text). Den bräuchte ich, sonst müsstest du mir ein Beispielprojekt hier reinstellen.
 
Jaaaa! :)

Du bekommst übrigens eine schöne Fehlerbeschreibung, wenn du darauf F1 klickst. Das Problem scheint zu sein, dass die neue Klasse von zwei anderen abgeleitet ist, und beide eine Funktion mit gleichem Namen haben. Und der Compiler ist jetzt nicht sicher, welche der beiden gemeint ist. Da hilft dann direktes angeben des Basisklassennamens:

BASISKLASSE::Funktion();
 
Zurück