Datenbank gibt gar nichts aus
-
Hallo zusammen,
in meiner Anwendung habe ich eine vererbte Klasse der Klasse CRecordSet, die ein Bezug über die ODBC-Schnittstelle zu meiner SQL-Datenbank/-Tabelle herstellt. Jetzt habe ich manuell ein SQL-Statement abgesetzt, etwa so:
if(!dBAnbindung_Server.Open( CRecordset::dynaset, _T( "SELECT DISTINCT(Anwendung_Server) AS Anwendung_Server From Anwendung WHERE Anwendung_Gueltbis = '31.12.9999' order by Anwendung_Server" ))){ ... }
...jetzt würde ich gerne das Feld Anwendung_Server aus meiner Anwendung heraus ansprechen, und es einer Variable übergeben.
Normalerweise, wenn ich die Tabelle mit .Open() öffne, habe ich für diese Tabellenspalte, eine m_Anwendung_Server in meiner CRecordSet-Ableitung definiert, jedoch wenn ich versuche über diesen die Spalte abzufragen, kriege ich nichts raus... so sieht das aus:
if (!dBAnbindung_Server.IsBOF()){ dBAnbindung_Server.MoveFirst(); int i = 0; while (!dBAnbindung_Server.IsEOF()) { CString tempAuto = dBAnbindung_Server.m_Anwendung_Server; ....
...tempAuto bleibt in dem Fall leer, obwohl in der Tabelle Einträge vorhanden sind, vor allem wiederholt er auch die while-Schleife solange, wie EInträge in der DB vorhanden sind.
Weiss einer, einen guten Rat für mich, was ich falsch mache?
Danke schon mal.
Gruss,
chullain
-
Ist "Anwendung_Gueltbis" ein String?
-
ja ist er, ich hab auch schon das SQL-Statement über den Query Analyzer von SQL Server laufen lassen, und da bekomme ich eine Ausgabe...
Gruss,
Arthur
-
Wenn keine Exception fliegt, wurde das Statement auch abgesetzt.
Das moveNext in der Schleife hast du auch gemacht?
-
ja, das MoveNext-Statement habe ich auch gemacht, aber könnte es auch sein, dass die Klasse die Tabellenspalten den definierten Variablen in der Klasse nicht nach Namen zuweisst, sondern nach der Reihenfolge?
z.B. Spaltenname ist Anwendung_Server, Zuweisung in der Klasse m_Anwendung_Server, d.h. den Servernamen müsste ich auch in dieser Variable vorfinden
...mit normalen Open() würden alle Spalten ausgelesen werden, käme dann auch von den Spalten im Programm hin, jetzt lese ich aber nur eine Spalte aus, habe jetzt mit dem Debugger festgestellt, dass er mir den Servernamen, in die erste Variable reinschreibt, und die heisst m_Anwendung_Anwendung, das wäre dann auch die erste Spalte in der Tabelle
Kann mann das irgendwie noch ändern, das er auch in die richtige Variable reinschreibt, also m_Anwendung_Server?
Gruss,
chullain
-
hast du die Klasse vom Assistenten erstellen lassn, oder das per Hand gemacht? Ansonsten schau dir mal die Methode GetValue an.
-
...vom Assistenten anlegen lassen
-
Ich glaube mich dunkel zu erinnern, dass das Ergebnis in der ersten Spalte der Tabelle landet, wenn man so ein Statement beim Open mit schickt (also mit "SELECT eine ganz bestimmte Spalte"). Wenn Anwendung_Server also nicht die erste Spalte ist, ist m_Anwendung_Server leer.
Noch eine Möglichkeit:
wenn du sowieso ein Feld Anwendung_Server hast, dann lass mal das "AS Anwendung_Server" in der Anweisung weg. Vielleicht kommt er mit den doppelten Bezeichnungen nicht zurecht ?!?P.S.:
ich sehe gerade, dass du das mit der ersten Spalte schon selbst herausgefunden hast...
Eine andere Lösung dazu ist mir nicht bekannt...
-
noch ne Frage:^^ bist du mit dem Debugger rein und hast dir wirklich mal angeschaut, was er da macht? Nicht das nur das Aktualsierieren der Ansicht hier irgendwo fehlt.
-
ja, ich habs mir angeguckt, verwende jetzt eben dann die m_Anwendung_Anwendung, schade, dass man das nicht zuweisen kann, naja, kann man nix machen..
Auf jeden Fall danke Euch allen, für die schnellen Antworten
Gruss,
chullain