zusätzlichen wert (z.b. recordcount) in abfrage einbeziehen?

  • VB6

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Agent.

    zusätzlichen wert (z.b. recordcount) in abfrage einbeziehen?

    hi,
    ich habe mittlerweile eine gute anleitung gefunden wie ich meine DB-abfrage in einem Flexgrid anzeigen lassen kann und konnte diese auch meinen bedürfnissen anpassen.
    nun habe ich aber das problem, das ich gerne eine erste spalte hätte die ich fortlaufend durchnummerieren möchte (1 ...............33 :| ) und die abgefragten werte ab spalte 2 aufgelistet werden.
    ich bekomme aber ja nur die spalten die ich via sql-abfrage erhalte.

    hat jemand ne ahnung wo ich diese eine spalte einfügen muss, bzw wie das auszusehen hat?
    könnte man in der abfrage auch den wert des Recordcount mit abfragen?

    das flexgrid befülle ich so:

    Visual Basic-Quellcode

    1. Dim i As Long
    2. Dim j As Long
    3. Dim n As String
    4. Dim breit As Single
    5. With Flex
    6. .Redraw = False
    7. .AllowBigSelection = True
    8. .AllowUserResizing = flexResizeBoth
    9. .Appearance = flex3D
    10. .FocusRect = flexFocusNone
    11. .FixedRows = 1
    12. .FixedCols = 1
    13. .Cols = Rs.Fields.Count
    14. For i = 0 To Rs.Fields.Count - 1
    15. .TextMatrix(0, i) = Rs.Fields(i).Name
    16. Next
    17. .Rows = .FixedRows + Rs.RecordCount + 1
    18. Do While Not Rs.EOF
    19. i = Rs.AbsolutePosition
    20. For j = 0 To Rs.Fields.Count - 1
    21. If Not IsNull(Rs.Fields(j).Value) Then
    22. .TextMatrix(i, j) = Rs.Fields(j).Value
    23. End If
    24. Next
    25. Rs.MoveNext
    26. Loop
    27. For i = 0 To .Cols - 1
    28. breit = 0
    29. For j = 0 To .Rows - 1
    30. If Me.TextWidth(.TextMatrix(j, i)) > breit Then
    31. breit = Me.TextWidth(.TextMatrix(j, i))
    32. End If
    33. Next
    34. .ColWidth(i) = breit + 120
    35. Next
    36. .Redraw = True
    37. End With
    38. End Function


    meine sql abfrage und der funtionsaufruf für das flexgrid lautet folgendermaßen:

    SQL-Abfrage

    1. rec2.Open "Select Starter.NameThema, Verein.Vereinsname,
    2. Starter.Gesamtwertung From Verein INNER JOIN Starter ON Starter.Verein
    3. like Verein.VereinID where Starter.Disziplin = '" &
    4. CStr(cmbdisziplinen.ListIndex + 1) & "' and Starter.Gesamtwertung
    5. > 0 order by Starter.Gesamtwertung DESC", pub_con, adOpenStatic,
    6. adLockOptimistic

    Visual Basic-Quellcode

    1. FillFlexgrid rec2, MSHFlexGrid1
    2. MSHFlexGrid1.Visible = True
    3. rec2.Close
    4. Set rec2 = Nothing
    Recordcount kannst du nur in einer ganz neuen SQL Anweisung abfragen. Und bevor jetzt andere sagen, das geht in einer gruppierten Anweisung: Das hat er hier aber nicht!

    Ich kenne MSSQL (ist das doch, oder?) nicht so gut, aber vielleicht gibt's da ja ein Schlüsselwort für die Nummer des aktuellen Datensatzes.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum

    Marcus Gräfe schrieb:

    Ich kenne MSSQL (ist das doch, oder?) nicht so gut, aber vielleicht gibt's da ja ein Schlüsselwort für die Nummer des aktuellen Datensatzes.


    wenn du mit MSSQL meinst das ich eine Access-DB abfrage dann ja.
    ich bräuchte irgendwie ne möglichkeit nen zähler in die erste spalte meines grids zu bringen der quasi im maximalwert mit dem recordcount meines recordsets identisch ist.

    wenn das ganze zusammen mit der sqlabfrage möglich wäre, wäre das die beste lösung für mich - scheint aber doch nicht so leicht zu sein :huh:

    evtl muss ichs über nen um weg versuchen...


    mal ne andere frage:
    des sinn des ganzen soll ja sein, das die sportler, die den wettkampf bereits beendet haben (und somit schon eine wertung haben) entsprechend der erreichten punktzahl aufgelistet werden. jetzt könnte ich ja beim ersten starter in eine datenbankspalte (nenne sie mal "Platz") die "1" schreiben (da er der erste war hat er ja automatisch die 1). wenn jetz der zweite teilnehmer kommt und mehr punkte erreicht, dann muss der die 1 bekommen und der vorherige muss auf zwei rutschen ... usw ....

    hab ich irgendwie die möglichkeit meine DB nach jedem starter dynamisch zu aktualisieren? am besten das die anderen werte die ermittelt werden und vorher in die DB eingetragen wurden korrekt bestehen bleiben?

    das wär dann evtl noch ne andere möglichkeit ....

    hat jemand nen vorschlag?
    Wozu musst du unbedingt die "Plätze" in die DB speichern? Es reicht doch, wenn du die Punkte speicherst und dann kannst du in deiner Abfrage einfach ORDER BY punkte DESC machen, dann hast du die Datensätze von Platz 1 und abwärts. Ich weiß nicht inwieweit du die 3 Normalisierungsformen für Datenbanken schon kennst, aber dort heißt es, dass die Attribute in einer Tabelle nicht voneinander abhängig sein sollten, da es sonst zu Datenredundanz und Dateninkonsistenz kommt, sprich du es können sich viel schneller Fehler einschleichen und du verschwendest unnötigen Speicher.
    Gruß, Agent Smith 8-)

    activeFlags = (lazy OR weary)

    Lemgo-Verschwörung | Mathematics | VB-Paradise in blau
    hallo agent,
    das ist mir im prinzip schon klar. auch das ich meine datensätze auf-/absteigend sortieren kann weiß ich,
    wo ich hänge ist folgendes:
    ich möchte zusätzlich zu den werten die ich abfrage eine spalte in dem flex grid haben in der von 1 bis ende der datensätze angezeigt wird.

    also etwa so:

    Nummer Name Wertung
    1 Herbert 450
    2 Thomas 399

    dabei frage ich name und wertung via sql ab. die nummer soll aber je nach menge der ermittelten datensätze vorne in dem flexgrid angezeigt werden
    Dann könntest du in deiner Abfrage eine Sub-Query einbauen:

    SQL-Abfrage

    1. SELECT name,
    2. punkte,
    3. (
    4. SELECT COUNT(*) AS bessere
    5. FROM tabelle AS tab2
    6. WHERE tab2.punkte>tab1.punkte
    7. )+1 AS platz
    8. FROM tabelle AS tab1
    9. ORDER BY platz DESC

    Auf diese Weise zählt die DB automatisch, wieviele Spieler mehr Punkte als der aktuelle haben und +1 ergibt den Platz.
    Gruß, Agent Smith 8-)

    activeFlags = (lazy OR weary)

    Lemgo-Verschwörung | Mathematics | VB-Paradise in blau