JOINS mit ODBC
-
Moin,
bei mir stürtz immer alles ab, wenn ich im CRecordset::Open einen Join mit angebe. Muß ich das anders Handeln? Es gibt ja noch einen Filter beim Recorset aber das verstehe ich alles nicht. Hatte sonst immer mit mysql.h gearbeitet, da war alles so einfach.Mein Code:
m_Datenbank.OpenEx(DSN=MEINSERVER;UID=BENUTZER;PWD=PASSWORD, CDatabase::noOdbcDialog); CRecordset rcRec(&m_Datenbank); rcRec.Open(CRecordset::forwardOnly, " SELECT " " T_Auftraege.F_Auftrsgsnummer, " " T_Firmen.F_Firmenname, " " T_Auftraege.F_Produkt, " " T_Auftragsstatus.F_Auftragsstatus " " FROM " " T_Auftraege T_Auftraege "; " LEFT JOIN " " T_Firmen T_Firmen " " ON" " T_Auftraege.F_Firmenid = T_Firmen.F_Firmenid " " LEFT JOIN " " T_Auftragsstatus T_Auftragsstatus " " ON " " T_Auftraege.F_Statusid = T_Auftragsstatus.F_Statusid ";
Darf ich wohl das alles nicht darein schreiben, dass weiß ich nun auch aber wie mach ich es richtig? Oder kann ich per ODBC keine Joins *kann nicht glauben*
Vielen Dank für Eure Hilfe
MfG Gabriel
-
Syntaktisch eigendlich OK.. hab aber auch erst ein right outher join gemacht, aber auch wenns syntaktisch falsch wäre.. bekommt man da kein returncode bei odbc ??
-
Du kannst alle SQL-Statements nutzen, solange die Datenbank diese auch unterstützt.. ODBC nimmt keine SQL-validierung vor. (OpenDB)
Das macht nur die DB, sodass der Fehler bei dem Funktionsaufruf, oder fehlenden Initialisierungen liegen muss ?!?-)
-
Hallo !
Da
" T_Auftraege T_Auftraege ";
ist z.B. mitten in der Anweisung ein Semikolon. Hier
" T_Auftraege.F_Statusid = T_Auftragsstatus.F_Statusid ";
ist noch eins. Und nirgends ist die schliessende Klammer von dem Open zu sehen. Würde mich wundern, wenn sich das Programm überhaupt kompilieren lässt...
Tschüss
-
*g*
wo Du Recht hast, haste Recht...
...im code sehts natürlich richtig
*gr*
-
Wieso überhaupt zweimal "T_Auftraege" und "T_Firmen " in den Zeilen
" T_Auftraege T_Auftraege ";
und
" T_Firmen T_Firmen "
?Soll das sowas bedeuten:
" T_Auftraege AS T_Auftraege ";
?Würde aber auch keinen Sinn machen, da sich der angezeigte Feldname dabei nicht ändert. Aber manche Datenbanken sind ein bischen pingelich und wollen das "AS" unbedingt haben.
Der hier ist auch verdächtig:
CRecordset::forwardOnly
Den würde ich mal (testweise) in CRecordset::snapshot (oder CRecordset::dynaset) ändern.Noch eine Möglichkeit, falls du versuchst, auf eine Access-DB zuzugreifen:
Versuch mal, genau die gleiche Abfrage direkt in Access anzulegen und rufe sie dann in der SQL-Ansicht auf -> Access hat jede Menge Klammern gesetzt. Vielleicht liegt es daran, dass sie hier bei Open(...) fehlen ?Mehr fällt mir gerade nicht ein...