CRecordSet & "SELECT DISTINCT"
-
Hallo,
ich würde gerne auf eine Tabelle ein SELECT Distinct auf ein Feld absetzen, hab jedoch meine CRecordSet Klasse mit allen Feldern implementiert. Soweit ich rausgefunden habe, hat c++ damit ein Problem, da ja alle Felder abgefragt werden.
Muss ich die DOFieldExchange-Funktion von CRecordSet dann überschreiben, oder kann ich das Problem auch anderes irgendwie umgehen?
So sieht mein DISTINCT aus:
mDB_PRE_One_Field.Open(CRecordset::dynamic,"SELECT DISTINCT PreEinsatz_PAKET FROM dbo.NOS_PEV_PREEINSATZ");
Gruss,
chullain
-
Was spricht gegen eine weitere Recordsetklasse?
-
Ich erinnere mich ganz dunkel daran, das bei einer Abfrage auf nur ein einziges Feld der Wert im allerersten Feld der Tabelle zurückgegeben wird. D.h. es könnte sein, dass die Abfrage funktioniert, das Ergebnis aber nicht in PreEinsatz_PAKET steht, sondern eben im ersten Feld der Tabelle. Probleme gibt es dann natürlich, wenn die Datentypen nicht überein stimmen.
Aber wie gesagt: ich weiss das nicht sondern habe nur so eine vage Erinnerung daran. Könnte auch völlig falsch sein.
-
isabeau schrieb:
Probleme gibt es dann natürlich, wenn die Datentypen nicht überein stimmen.
Das sollte sich ja durch eine Änderung der Reihenfolge in DoFieldExchange beheben lassen.
-
Ja, könnte aber auch sein, das die Datenbankstruktur grundlegend ist. Also das das Feld als erstes angesehen wird, welches innerhalb der Tabelle datenbankseitig das erste ist.
Aber wie gesagt: ich könnte hier auch komplett falsch liegen...
-
@isabeau: Ich glaube nicht das dies die Ursache ist. Ob mit oder ohne DISTINCT, der Ergebnissatz ist der selbe.
Das Problem ist einfach, dass chullain einen neuen CRecordSet aufbauen muss.CRecordSet's sind einfach dämlich, weil man für jede Abfrage Aufwand treiben muss das Ergebnis irgendwie beizubekommen.
Ich arbeite lieber mit OLE DB und mit dynamischen Ergenissätzen.
-
Jo, CRecordSet ist dämlich. Ich hab's zwar nicht mit OLE DB, aber ADODB ist schön schnuckelig und flauschig, und wenn man weiss wie man tut auch ordentlich performant. Und sogar wenn man nicht weiss wie man tut nicht so langsam dass es für einfache kleine Programme arg schlimm wäre.