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

Naja du führst doch irgendwo deinen SQL Befehl aus und da kannst du das ja dann dem entsprechend angeben oder hab ich dich jetzt falsch verstanden?

Bzw. hab ich das mal ohne MFC gemacht und da ging das dann über die folgenden Interfaces:

IDBCreateSession

IDBCreateCommand

ICommandText

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?

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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