SQL Abfrage unter VB6.0

Hallo,
Ich möchte aus einer Datenbank die Top Ten Einträge einer Spalte herausfiltern. Das funktioniert soweit auch ganz gut mit der Anweisung

SQLkommando = „SELECT DISTINCT TOP 10 Spalte2 From C:\Tabellen\tmptabelle#txt ORDER BY Spalte2 ;“

Set rstTopten = New ADODB.Recordset
With rstTopten
.ActiveConnection = cn
.Source = SQLkommando
.CursorType = adOpenStatic
.Open
End With

Ich brauche aber auch die Anzahl der ausgefilterten Werte. Wie kann ich diese Anzahlen erhalten? Kennt jemand die Eigenschaft des Recordsetobjektes in dem diese Werte stehen oder muß das SQL Kommando umgeschrieben werden?

z.B. Eintrag1 ist 23 mal enthalten
Eintrag2 ist 20 mal enthalten

Eintrag10 ist 23 mal enthalten

Vielen Dank

Christian

hallo christian…

hab dein posting schon gestern gesehen… blos ist mir da gar nix eingefallen…
aber jetzt:

Ich möchte aus einer Datenbank die Top Ten Einträge einer
Spalte herausfiltern. Das funktioniert soweit auch ganz gut
mit der Anweisung

SQLkommando = „SELECT DISTINCT TOP 10 Spalte2 From
C:\Tabellen\tmptabelle#txt ORDER BY Spalte2 ;“

seh ich das richtig… du frägst eine txt-datei ab?? funzt das?

also du bekommst also deine top-ten werte geliefert…
dann würde ich sagen, um die häufigkeit zu ermitteln, das du jeden dieser werte nochmal abfrägst… etwa so :

do until rs.eof
set rs2 = new adodb.recordset
rs2.open "select * from TABELLE where spalte2 = " & rs.fields(0)
msgbox rs2.count -1 'so bekommst du die anzahl der datensätze
rs2.close
set rs2 = nothing
rs.movenext
loop

hoffe es hilft dir weiter

ciao

rasta

Hallo,
ja das mit der Textdatei funktioniert.
Aber ich habe doch noch ein Problem mit den Top Ten Werten.
Mit meiner Abfrage bekomme ich die ersten 10 Werte in alphabetischer Reihenfolge, ich brauch aber die Werte, die am häufigsten vorkommen. Hast du dazu eine Idee??

Vielen Dank

Christian


hi christian,

reinhard hats im brett visualbasic eigentlich sehr gut erklärt.

nur kurz für mich z.I…
um eine textdatei per recordset abzufragen, brauchst du ja logischerweise keine connection…du gibst die quelle ja lediglich beim recordset an?
wie ist deine textdatei formatiert? könntest du mir mal ne bsp-datei schicken?

also entweder du machst es so, wie ichs dir schonmal gepostet habe, anhand eines zweiten recordset, indem du die werte abfrägst, und anschliessend den recordcount ermittelst…

aber besser ist es wie gesagt, wies reinhard gelöst hat, indem du abfrägst…(am besten kopier dir zwecks leserlichkeit den code in ein modul)

recordset1.movefirst 'recordset1 mit topten werten auf ersten datensatz setzen
do until recordset1.eof 'solange bis recordset1 EOF ist
set recordset2 = new adodb.recordset
recordset2.open „select count(“ & recordset1.fields(0) & „) from tabelle 2“, connection, adforwardonly, adreadonly
msgbox recordset1.fields(0) & " ist " & recordset2.fields(0) & " vorhanden!" 'gibt meldung mit anzahl in msgbox aus
recordset2.close
set recordset2 = nothing
recordset1.movenext 'nächten datensatz vom toptenrecordset
loop

damit bekommst du den wert geliefert, wie oft dein jeweiliger topten datensatz vorhanden ist

ciao

rasta

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

reinhard hats im brett visualbasic eigentlich sehr gut
erklärt.

nur kurz für mich z.I…
um eine textdatei per recordset abzufragen, brauchst du ja
logischerweise keine connection…du gibst die quelle ja
lediglich beim recordset an?
wie ist deine textdatei formatiert? könntest du mir mal ne
bsp-datei schicken?

also entweder du machst es so, wie ichs dir schonmal gepostet
habe, anhand eines zweiten recordset, indem du die werte
abfrägst, und anschliessend den recordcount ermittelst…

aber besser ist es wie gesagt, wies reinhard gelöst hat, indem
du abfrägst…(am besten kopier dir zwecks leserlichkeit den
code in ein modul)

recordset1.movefirst 'recordset1 mit topten werten auf ersten
datensatz setzen
do until recordset1.eof 'solange bis recordset1 EOF ist
set recordset2 = new adodb.recordset
recordset2.open „select count(“ & recordset1.fields(0) & „)
from tabelle 2“, connection, adforwardonly, adreadonly
msgbox recordset1.fields(0) & " ist " & recordset2.fields(0) &
" vorhanden!" 'gibt meldung mit anzahl in msgbox aus
recordset2.close
set recordset2 = nothing
recordset1.movenext 'nächten datensatz vom toptenrecordset
loop

damit bekommst du den wert geliefert, wie oft dein jeweiliger
topten datensatz vorhanden ist

ciao

rasta

Hallo rasta,
danke für deine Mühe. Ich glaube ich habe mein Problem nicht genau genug erklärt. ICh dachte ich hätte die TopTen Werte schon, das war aber eine falsche Annahme. Ich habe nur die Meldungen der Spalte, die im Alphabet an den ersten 10 Positionen stehen. Diese brauche ich aber nicht. Ich brauche folgendes:

BSP mit top 2

…|Maier|…
…|Müller|…
…|Hauser|…
…|Müller|…
…|Müller|…
…|Maier|…

Ergebnis sollte sein 3 Müller
2 Maier

Eure Beispiele waren richtig und ich kann auch die Anzahl abfragen, aber ich brauche die Häufigkeit der vorkommenden Einträge und diese sollen absteigend sortiert werden.
Ich hatte gedacht ich könnte SELECT TOP 10 … verwenden, geht aber nicht.

PS. Ich muß doch eine Verbindung zu der Textdatei pes DSN anlegen und dann recordset.ActiveConnection= … festlegen

Ich hoffe ihr hab eine Idee dazu

Gruß Christian

hi christian,

puuuuh… hab extra meine kollegen gefragt, UND in ner oracle-referenz nachgeschlagen…

du kansnt definitiv keine top10 werte abfragen… d.h. den häufigst vorkommenden datensatz rausfiltern…

erst dachte ich an „select max(spalte) from…“
bekomsmt du aber auch nur den datensatz mit dem höchstem wert geliefert…

im moment kann ichs mir nur so vorstellen, das du jeden datensatz der tabelle den COUNT abfrägst… usw

oder vielleicht ist es auch nur gerade ziemlich spät für mich, so das ich gradn brett vorm hirn hab… deswegen geh ich jetzt heim… sollte mir noch was einfallen, bekommst du ne email von mir… bzw. wenn du ne lösung hast, teile sie mir bitte auch mit…

sorry , aber viele grüße

rasta

ps: beim recordset… und textdatei, einfach den pfad mit dateinamen als source angeben??