Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo zusammen!

Ich würde gerne auf eine MySQL DB zugreifen aus einer MFC Anwendung. Klappt auch soweit. Ich verwende die OLE DB Schnittstelle. Um eine Query abzusenden verwende ich den "CCommand<CAccessor<TableBLA> >Query;".

Aber nun zu meinem Problem:

Wie mache ich das mit joins usw. also mit komplexeren anfragen?

da kann ich ja nicht eindeutig angeben wie das result aussehen wiord; also welche Table ich angeben kann bei dem CAccessor...

Wäre nett wenn mir jemand von euch helfen könnte

MfG

Steffen

Geschrieben
Wie mache ich das mit joins usw. also mit komplexeren anfragen?

da kann ich ja nicht eindeutig angeben wie das result aussehen wiord; also welche Table ich angeben kann bei dem CAccessor...

Solche Accessoren kannst du nicht mit dem Wizard erzeugen, aber du kannst diese Klassen von Hand anlegen. Du brauchst einen Datenmember für jedes Feld des Ergebnisses, eine Column Map, für parametrierte Abfragen eine Param Map, und mit dem DEFINE_COMMAND-Makro kannst du das SQL-Statement festlegen.

Such einfach mal in der MSDN Library nach DEFINE_COMMAND oder BEGIN_COLUMN_MAP.

Geschrieben

Vielen Dank für eure Antworten!

Wie gesagt es funzt ja alles mit einfachen querys. aber mir geht es ja um komplexe querys.

Mache so was nie von c++ aus.

Dafür sind im DB Funktionen und Prozeduren da.

@bigpoint: Kannst du mir bitte genauer sagen wie das gehen soll?

MfG

Steffen

Geschrieben

Ja nach dem was das QSL Stetment mache soll/muss sollte man eben aus performenc gründen Datenbank Funktionen oder Prozeduren benutzen.

z.B. Du packst deine „komplizierte“ Query in eine Funktion die liefert dir zurück eine Tabelle (Spalten von deinem Query)

Den Rest sehe Klotzkopp Anleitung.

Wills du unbedingt den Wizard benutzen dann statt Funktion einfach eine Sicht in DB Erstellen und denn Rest kennst du doch selbst ;)

Geschrieben

Hallo!

Also zur verständniss meines Problems Poste ich mal meine Code mit:

/*

################### Tabellen und ihre Strukturen #######################################

*/

#if !defined(TABLES_H)

#define TABLES_H



//Tabelle WERTE1

class TWerte1

{

public:

	unsigned long m_ID;

	TCHAR m_sName[201];


BEGIN_COLUMN_MAP(TWerte1)

	COLUMN_ENTRY(1, m_ID)

	COLUMN_ENTRY(2, m_sName)

END_COLUMN_MAP()


	void ClearRecord()

	{

		memset(this, 0, sizeof(*this));

	}

};

#endif

Des Weiteren:

//Öffen einer Session etc... auf code verzichte ich hir


//Query absenden

CString sQuery = "blablablaba die query halt...";

CCommand<CAccessor<TWerte1> > Table;

HRESULT hr = Table.Open(m_Session, sQuery);


//nun habe ich das ergebnis der Query in "Table"


Mein Problem ist nun:

Wenn ich ne Query mache z.B:

SELECT tabelle1.Name, tabelle2.landkreis FROM Personendaten tabelle1, allgemeineDaten tabelle2

Dann bekomme ich als ergebniss ne tabelle welche ne mischung zwischen den tabellen Personendaten und allgemeinenDaten ist.

Somit kann ich bei dem CAccessor keine Table angeben!

Ich hoffe nun ist verständlich was mein problem ist.

Ich versuche es nochmal in Worte zu fassen:

Da ich durch eine "verschachtelte" Query keine Class bei dem Template/Klasse CACCESSOR angeben kann, würde ich gerne wissen wie ich das mache sodass ich mit dem ergeniss der Query, welche ja eine Table zurückliefert, arbeiten kann!

Vielen Dank

Geschrieben
Wenn ich ne Query mache z.B:

SELECT tabelle1.Name, tabelle2.landkreis FROM Personendaten tabelle1, allgemeineDaten tabelle2

Dann bekomme ich als ergebniss ne tabelle welche ne mischung zwischen den tabellen Personendaten und allgemeinenDaten ist.

Wenn du nirgendwo eine WHERE-Klausel oder JOIN benutzt, bekommst du ein Kreuzprodukt aller verwendeten Tabellen.

Das hat absolut nichts mit C++ zu tun, sondern liegt an deinem SQL-Statement.

Da ich durch eine "verschachtelte" Query keine Class bei dem Template/Klasse CACCESSOR angeben kann,
Das ist Unsinn. Der Templateparameter von CAccessor ist doch eine Klasse, egal wie dein Statement aussieht.

würde ich gerne wissen wie ich das mache sodass ich mit dem ergeniss der Query, welche ja eine Table zurückliefert, arbeiten kann!
Eine Abfrage liefert immer ein Recordset, keine Tabelle.
Geschrieben

HAllo Klotzkopp

Das kann schon alles richtig sein was du geantwortet hast aber leider hilft mir das auch nicht weiter bei meinem problem.

Falls ich mal eine query machen muss, welche mir das ergebnis aus 2 Tables zusammen würfelt....

was mache ich dann?

Vielleicht bin auch nur schwer von begriff und du flippst gleich aus wegen meinen posts hier :rolleyes:

Geschrieben
Falls ich mal eine query machen muss, welche mir das ergebnis aus 2 Tables zusammen würfelt....
Das ist ja schon im Ansatz schlecht. Du willst sicher nichts zusammengewürfeltes, sondern die Ergebnisse sollen die Datensätze beider Tabellen unter bestimmten Bedingungen enthalten. Welche sind das?

Wie gut kennst du SQL? Kennst du WHERE und JOIN?

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...