SQL Nachhilfe
-
Grüße alle!
Wer kann mir bitte ein wenig SQL-Nachhilfe geben in Bezug auf SELELCT und ORDER BY.
Ein wenig Quellcode wie ich eine bestimmte Spalte eines Recordsets sortiere wäre auch nicht schlecht. Mir helfen die Erklärungen in der MSDN nicht wirklich weiter.
Ich besitze die Klasse CRecordSet, die bei mir CKundenSet heißt. Die Members der Klasse repräsentieren sozusagen die Spalten wie "m_Kundennummer", "m_Firma" oder "m_Name". ( alles CStrings ).
Wie kann ich jetzt die Datensätze sortieren z.B. alphabetisch aufsteigend ( desc,asc) nach der Column m_Firma??
Vervollständigt mich:
CKundenSet m_pKundenSet; m_gw_kunde.GetCurrentCell(&iRow,&iCol); // m_gw_Kunde ist ein ActiveX GridWiz, // die markierte zu sortierende Spalte wird halt hier erkannt // und dann z.B. für spalte 3 ( = Firma ) if ( iCol == 3) { m_pKundenSet.Open(); Sortierauswahl == "Firma desc"; m_pKundenSet.Open(CRecordset::dynaset,m_pKundenSet.m_strSort = Sortierauswahl); }Wichtig ist halt, das beim Click auf Spalte danach sortiert wird. Wird dann eigentlich die Access-DB
gleich sortierend überschrieben. Oder ist es auch möglich erstmal nur fertig sortiert in meiner Anwendung anzeigen zu lassen und später bei z.B. "OnApply" zurückzuschreiben?

Vielen Dank im Voraus
MfG
RunSeb
-
Hallo,
da stimmt einiges nicht (oder es sind Schreibfehler):
Sortierauswahl == "Firma desc";das ist ein Vergleich, richtig wäre Zuweisung, und zwar zur Member-Variable m_strSort::
m_pKundenSet.m_strSort = "Firma desc";außerdem ist es nicht nötig, zweimal Open aufzurufen, der Open-Aufruf ist im zweiten Fall auch nicht korrekt:
if ( iCol == 3) { m_pKundenSet.m_strSort = "Firma desc"; m_pKundenSet.Open(CRecordset::dynaset, NULL); }so könnte es besser aussehen.
RunSeb schrieb:
Wird dann eigentlich die Access-DB gleich sortierend überschrieben
Datenbanken kennen keine Reihenfolge von Datensätzen, und überschrieben wird nur, wenn man die entsprechenden Anweisungen gibt, ein Open ist keine solche Anweisung.
MfG
-
Ich hab das jetz so: Wie du meinst:
if ( iCol == 3) { CKundenSet m_pKundenSet; m_pKundenSet.m_strSort = "m_Kontaktperson"; m_pKundenSet.Open(CRecordset::dynaset, NULL); m_pKundenSet.MoveFirst(); for (k=0; k<m_pKundenSet.GetRecordCount(); k++) { m_gw_kunde.Sheet(0).Cell(k+1,1).SetText(m_pKundenSet.m_Kunden_Nr); m_gw_kunde.Sheet(0).Cell(k+1,2).SetText(m_pKundenSet.m_Firma___Unternehmen); m_gw_kunde.Sheet(0).Cell(k+1,3).SetText(m_pKundenSet.m_Name); m_gw_kunde.Sheet(0).Cell(k+1,4).SetText(m_pKundenSet.m_Stra_e); m_gw_kunde.Sheet(0).Cell(k+1,5).SetText(m_pKundenSet.m_Postleitzahl); m_gw_kunde.Sheet(0).Cell(k+1,6).SetText(m_pKundenSet.m_Ort); m_gw_kunde.Sheet(0).Cell(k+1,7).SetText(m_pKundenSet.m_Telefon); m_gw_kunde.Sheet(0).Cell(k+1,8).SetText(m_pKundenSet.m_Anmerkungen); m_gw_kunde.Sheet(0).AddRow(1,1); m_pKundenSet.MoveNext(); } m_pKundenSet.Update(); m_pKundenSet.Close(); }Aber sortieren tut er leider noch nichts!!
MfG
-
ja, so ähnlich, aber du kannst natürlich keinen Variablennamen direkt als Sortierspalte verwenden, also das hier
m_pKundenSet.m_strSort = "m_Kontaktperson";geht nicht, es muß der Name der Spalte (wie es ihn auch in der Datenbank gibt) angegeben werden, z.B., falls die Spalte "Kontaktperson" heißt:
m_pKundenSet.m_strSort = "Kontaktperson";MoveFirst kann man weglassen, außerdem habe ich nichts von einem Update geschrieben, das muß weg, also:
if ( iCol == 3) { CKundenSet m_pKundenSet; // Spaltenname angeben, nicht Variablenname m_pKundenSet.m_strSort = "Kontaktperson"; m_pKundenSet.Open(CRecordset::dynaset, NULL); // nicht nötig // m_pKundenSet.MoveFirst(); for (k=0; k<m_pKundenSet.GetRecordCount(); k++) { m_gw_kunde.Sheet(0).Cell(k+1,1).SetText(m_pKundenSet.m_Kunden_Nr); m_gw_kunde.Sheet(0).Cell(k+1,2).SetText(m_pKundenSet.m_Firma___Unternehmen); m_gw_kunde.Sheet(0).Cell(k+1,3).SetText(m_pKundenSet.m_Name); m_gw_kunde.Sheet(0).Cell(k+1,4).SetText(m_pKundenSet.m_Stra_e); m_gw_kunde.Sheet(0).Cell(k+1,5).SetText(m_pKundenSet.m_Postleitzahl); m_gw_kunde.Sheet(0).Cell(k+1,6).SetText(m_pKundenSet.m_Ort); m_gw_kunde.Sheet(0).Cell(k+1,7).SetText(m_pKundenSet.m_Telefon); m_gw_kunde.Sheet(0).Cell(k+1,8).SetText(m_pKundenSet.m_Anmerkungen); m_gw_kunde.Sheet(0).AddRow(1,1); m_pKundenSet.MoveNext(); } // kein Update // m_pKundenSet.Update(); m_pKundenSet.Close(); }versuche es so noch einmal.
MfG
-
Genau, das wars, super, VIELEN DANK.
Variablenname
, wie komm ich da drauf. Ich hab die ganze Zeit was überlegt. Is ja klar, die Spalte hat ja nen ganz anderen Titel.