Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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.

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

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 ;)

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

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.

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:

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 Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.