AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi StringGrid mit Daten aus einer Paradoxtabelle füllen
Thema durchsuchen
Ansicht
Themen-Optionen

StringGrid mit Daten aus einer Paradoxtabelle füllen

Ein Thema von rincewind · begonnen am 6. Mär 2004 · letzter Beitrag vom 12. Mär 2004
 
Robert_G
(Gast)

n/a Beiträge
 
#9

Re: StringGrid mit Daten aus einer Paradoxtabelle füllen

  Alt 12. Mär 2004, 01:18
Ich glaube es ist schon zu spät...
Ich versuch's trotzdem:

Das mit der Config-Tabelle kapiere ich nicht
Höchster Punktestand pro Spieler pro Spiel:
SQL-Code:
SELECT Max(Punkte) Max_Punkte
      ,Spieler
      ,Spiel
FROM SpielerTabelle s
       PunkteTabelle p
WHERE s.SpielerID = p.SpielerID
GROUP BY Spieler,Spiel
Höchster Rundenanzahl pro Spiel:
SQL-Code:
SELECT Max(runde) Max_Runde
      ,Spiel
FROM PunkteTabelle
GROUP BY Spiel
Wozu muss man das statisch in eine Tabelle schreiben?

Wenn deine Tabellen so ähnlich aufgebaut/verknüpft sind...
  • PunkteTabelle:
    • Spiel
    • Runde
    • Punkte
    • SpielerID numerisch (mit ForeignKey auf SpielerTabelle.SpielerID)
  • SpielerTabelle:
    • SpielerID numerisch (PrimaryKey)
    • SpielerName

.. dann müsste das funktionieren:

Delphi-Quellcode:
Begin
  //...
  MaxRounds := 0;
  With SpielerQuery Do
  Begin
    SQL.Text :=
      'SELECT DISTINCT s.SpielerName' + #10 +
      ' ,s.SpielerID' + #10 +
      ' ,p.Spiel' + #10 +
      'FROM SpielerTabelle s' + #10 +
      ' ,PunkteTabelle p' + #10 +
      'WHERE s.SpielerID = p.Spieler' + #10 +
      'ORDER BY p.Spiel, s.SpielerName';
    // Ausführen der SpielerQuery...
    Open;
    // Laufe durch die Ergebnisse der SpielerQuery bis zum letzten Eintrag (Eof)...
    While Not Eof Do
    Begin
      // Den Spielername in der ersten Zelle neben die FixedCols eintragen...
      Grid.Cells[1, pred(Grid.FixedRows + RecNo)] :=
        FieldByName('SpielerName').asString;
      Grid.Cells[0, pred(Grid.FixedRows + RecNo)] :=
        FieldByName('Spiel').asString;
      With RundenQuery Do
      Begin
        SQL.Text :=
          'SELECT Spiel' + #10 +
          ' ,Runde' + #10 +
          ' ,Punkte' + #10 +
          'FROM PunkteTabelle' + #10 +
          'WHERE Spieler = :i_SpielerID And' + #10 +
          ' Spiel = :i_Spiel' + #10 +
          'ORDER BY Spiel, Runde';
        // Parsen des Statements um Query Parameter zu finden...
        // Spielernamen an Query Parameter übergeben...
        // Dadurch wird die Rundenquery nach dem Spieler gefiltert
        With Params Do
        Begin
          ParamByName('i_SpielerID').asString :=
            SpielerQuery.FieldByName('SpielerID').asString;
          ParamByName('i_Spiel').asString :=
            SpielerQuery.FieldByName('Spiel').asString;
        End;
        // Ausführen der RundenQuery...
        open;
        // Laufe durch die Ergebnisse der RundenQuery bis zum letzten Eintrag (Eof)...
        While Not Eof Do
        Begin
          // Das die Punkte der Runden des Spielers rechts neben den Spielernamen schreiben...
          // Voraussetzung: Das Feld "Runde" ist numerisch und beginnt bei 1
          Grid.Cells[succ(0 + FieldByName('Runde').asINteger),
            pred(Grid.FixedRows + SpielerQuery.RecNo)] :=
            FieldByName('Punkte').asString;
          // In MaxRounds soll die größte Rundenanzahl stehen. Warum siehst du weiter unten
          If FieldByName('Runde').AsInteger > MaxRounds Then
            MaxRounds := FieldByName('Runde').asInteger;
          // nächster Eintrag der RundenTabelle...
          Next;
        End;
      End;
      // nächster Eintrag der Spielertabelle...
      Next;
    End;
  End;

  With Grid Do
  Begin
    ColCount := MaxRounds + 2 + 0;
    Cells[1, 0] := 'Spieler';
    Cells[0, 0] := 'Spiel';
    // trage die Spaltennamen für die RUnden nur dann ins Grid, wenn es auch Spieler mit gespielten Runden gibt
    If MaxRounds > 0 Then
      For i := 0 To pred(MaxRounds) Do
        Cells[0 + i + 2, 0] := 'Runde ' + IntToStr(succ(i));
  End;
  //...
End;
ich habe die Spielnummer noch hinzugefügt, sie steht vorne und


Ohne den Aufbau deiner Tabellen tappe ich hier ziemlich im Dunkeln
Angehängte Grafiken
Dateityp: gif rincewind001.gif (6,0 KB, 18x aufgerufen)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz