Entwickler-Ecke

Datenbanken - Daten aus Select sortieren und gleich in Datenbank schreiben


tptom - Mo 29.04.13 09:33
Titel: Daten aus Select sortieren und gleich in Datenbank schreiben
Hallo,
ich bin kompletter Neuling im Thema Delphi und auch SQL.

Ich habe eine kleine Anwendung geschrieben, mit der ich in einer MDB Läufer bei einem Wettkampf verwalte.

Meine Tabelle enthält folgende werte:

l_nr, l_name, l_klasse, l_zeit,l_platz

Nun möchte ich wenn die Zeiten eingetragen sind, für die jeweilige Wettkampfklasse die Platzierung (sortiert nach Zeit) in die Spalte l_platz schreiben.

Könnt ihr mir einen kleinen Denkanstoß geben, bis jetzt habe ich die Tabelle nur mit ADOTable bearbeitet, da ich mit ADOQuery Probleme hatte, die Parameter richtig zu übergeben.

Ich wäre euch sehr dankbar für antworten.

Viele Grüße
Tom


Xion - Mo 29.04.13 17:35

Mal angenommen l_nr ist eindeutig. Dann würde ich so vorgehen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
for cl :=  0 to High(Klassen) do
  begin 
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add( 'SELECT l_nr FROM Läufer WHERE l_klasse LIKE "'+Klasse[cl]+'" ORDER BY l_Zeit' ASC);
    ADOQuery1.First;
    Platz:=0;
    while not ADOQuery1.EoF do
      begin
        Platz := Platz+1;
        ADOQuery2.SQL.Clear;
        ADOQuery2.SQL.Add('UPDATE Läufer SET Platz = '+inttostr(Platz)+' WHERE l_Nr='+inttostr(ADOQuery1.FieldByName('l_Nr').AsInteger );
        ADOQuery2.ExecSQL;
        ADOQuery1.Next;
      end;
  end;


Das ganze könnte etwas langsam sein, aber ich denke, du hast nicht tausende von Klassen :) Die Parameterübergabe sollte so keine Probleme geben.


Delete - Mo 29.04.13 20:22


Delphi-Quelltext
1:
2:
3:
4:
5:
...
   while not ADOQuery1.EoF do
      begin
        Platz := ADOQuery1.RecNo;
...


Da fällt dann die Zuweisung an Platz vor Beginn der Schleife weg.