![]() |
Rundenzähler für mehrere Läufer (Delphi 7 Prof)
Moin,
haben mir vorgenommen ein Program zu schreiben, welches jedem Läufer (Startnummer z.B.:0-100) eine Runde addiert und zwar indem man die Zahl (Startnummer) in ein Editfeld schreibt und dann ENTER bzw. den Button klickt. Nun mein Problem: Ich habe keine Erfahrung mit den Arbeiten an Tabellen über Delphi und würde euch gerne darum bitten mir evtl nen kleines Tutorial zu schreiben, indem Delphi über nen Befehl die Zeilen in der Spalte1 abfragt und den Wert in der Spalte2 der gesuchten Zeile um 1 verändert. Zitat:
Gruß JIP0815 |
AW: Rundenzähler für mehrere Läufer (Delphi 7 Prof)
Geht es um Datenbanken?
Wenn ja, sollte es reichen das passende SQL Kommando abzusetzen. (update tabelle set runde=runde+1 where id=5) |
AW: Rundenzähler für mehrere Läufer (Delphi 7 Prof)
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab dir mal ein (zugegebenermaßen sehr simples) Beispiel mit einem TListView angehängt.
Von Interesse ist für dich dabei die Prozedur InsertOrUpdateRunner(). Schau es dir einfach erstmal an, dabei lernt man am meisten, aber ohne Gewähr auf Schönheit :) (und eine Abfrage, ob man wirklich eine Nummer eingegeben hat, ist auch noch nicht drin) Wenn du die Liste sortiert haben willst, musst du nur beim EventView den SortType auf "stText" stellen. |
AW: Rundenzähler für mehrere Läufer (Delphi 7 Prof)
Hallo,
Zitat:
Übrigens solltest du das wirklich zuerst lesen ... ;) Spalte = Feld Zeile = Set Jede "Zeile" bekommt in der Tabelle eine eindeutige Nummer (nicht die Start-Nummer !).
Code:
Dann lautet der SQL-Befehl (Tabellen-Name hier TableX)
Id StartNo Runde
1 1 25 2 100 20
Delphi-Quellcode:
PS:
Update TableX
Set Runde=Runde+12 Where StartNo=100 Wie kann ich eigentlich das Id Start_No Runde anständig formatieren ??? Heiko |
AW: Rundenzähler für mehrere Läufer (Delphi 7 Prof)
Zitat:
Code:
ID Start_No Runde
1 100 1 2 45 2 |
AW: Rundenzähler für mehrere Läufer (Delphi 7 Prof)
Vielen Dank
Ich habe das mit dem InsertOrUpdate wohl vorerst verstanden und werden mein Programm (in erweiterter Form) so gestalten wie das Programm von Blackfin (Danke nochmals). Mit den SQL und ID etc. werd ich mich mal ein wenig umschauen. :thumb: JIP P.S.: Gibt es eine Möglichkeit diese Tabelle anhand der Rundenzahlen zu sortieren? |
AW: Rundenzähler für mehrere Läufer (Delphi 7 Prof)
SQL-Code:
... aber schau Dir mal die SQL-Basics an, dann wird wirklich vielen klar!
SELECT * FROM tablename
ORDER BY Runde ASC |
AW: Rundenzähler für mehrere Läufer (Delphi 7 Prof)
Ööhmm... in dem Beispielprogramm wird keine DB verwendet ;)
|
AW: Rundenzähler für mehrere Läufer (Delphi 7 Prof)
Zitat:
Wenn eine Datenbank von Nöten ist, dann ist mein Beispiel natürlich nicht ganz das richtige, obwohl man ja auch die TListView-Items aus einer Datenbank laden und in diese speichern könnte. Da bieten sich dann aber solche Sachen wie DBGrid doch mehr an :-) Zitat:
Willst du es nach der zweiten Spalte sortieren, brauchst du das OnCompare-Event vom Listview, in dem du dir dann deine eigene Sortier-Routine zusammenbastelst. Dazu gibts auch ein kleines Tutorial: ![]() |
AW: Rundenzähler für mehrere Läufer (Delphi 7 Prof)
Ich bezog mich auch auf den Post von Scrat: SQL nützt in Deinem Programm ja nix ;)
|
AW: Rundenzähler für mehrere Läufer (Delphi 7 Prof)
@Blackfin:
Danke für den Link und deinen Tipp, habe aber wahrscheinlich eine bessere Lösung gefunden: ![]() Ich würde gerne die Liste (TListView) als Excel-Tabelle exportieren Kann man das wie in dem oberen Link beschrieben machen??? Könnte mir jemand kurz schreiben welche Variablen ich in der procedure ersetzten muss?!:
Delphi-Quellcode:
SOll ich unter (T)FileName den Namen der Excel-Tabelle inkl. Pfad angeben??
procedure SaveFile(const FileName: TFileName;
const content: string); begin with TFileStream.Create(FileName, fmCreate) do try Write(Pointer(content)^, Length(content)); finally Free; end; Ist TFileStream := TListView??? Gruß JIP |
AW: Rundenzähler für mehrere Läufer (Delphi 7 Prof)
Nee, also so einfach kannst du ein Excel-Format (XLS) nicht schreiben, das kann Delphi nicht "out of the box" :)
Willst du XLS schreiben, brauchst du entweder eine Komponente, die das kann (kostet meist was), oder du schreibst dir das selbst (sehr aufwändig und ziemlich komplex). Alternativ-Vorschlag: Ich würde die Reihen und Spalten des TListView mit einem TFileStream in eine CSV-Datei schreiben, die kannst du dann ganz leicht ins Excel importieren. Dazu gehst du einfach Zeile für Zeile durch und schreibst den Inhalt der Zellen einfach raus. Wie eine CSV-Datei aufgebaut ist, findest du hier ![]() Zitat:
Die haben erstmal nichts gemeinsam.... |
AW: Rundenzähler für mehrere Läufer (Delphi 7 Prof)
Delphi-Quellcode:
so erzeuge ich jetzt meine Liste....
procedure TForm1.LEditKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin if (key = 13) then begin Stream:= TFileStream.Create('.\Liste.csv', fmCreate); try Stream.WriteComponent(EventView); finally Stream.Free; end; end; end; Nun hab ich aber das Problem, dass ich nicht nur die Tabelle, sondern auch die Eigenschaften etc. dadrin stehen habe Gibt es da noch ne elegantere und genauso einfache Lösung? P.S.: Zitat:
Leider ist mir die Geschichte mit der Excel-Anwendung im Hintergrund etwas zu kompliziert. |
AW: Rundenzähler für mehrere Läufer (Delphi 7 Prof)
Guten Abend,
wenn Du "nur" die Captions der ListView abspeichern willst. Würde ich das mit einer StringList erledigen.
Delphi-Quellcode:
Grüße
procedure TForm1.Button1Click(Sender: TObject);
var sl : TStringList; i: Byte; begin sl := TStringList.Create; try for i:=0 to listView1.Items.Count -1 do sl.add(listView1.Items[i].caption); sl.SaveToFile('.\Liste.csv'); finally sl.free; end; end; Klaus |
AW: Rundenzähler für mehrere Läufer (Delphi 7 Prof)
Liste der Anhänge anzeigen (Anzahl: 1)
Guten Morgen,
Mhh irgendwas stimmt da bei mir noch nicht. Also soweit ich das beurteile kann ist das ganze an sich nicht schlecht, würd es den bei mir funktionieren :) Werd noch ein bissen rumprobieren, vielleicht find ich ja noch die Lösung. Gruß JIP |
AW: Rundenzähler für mehrere Läufer (Delphi 7 Prof)
Problem teils gelöst:
i kann nicht als Byte sondern nur als Integer gesetzt werden Nun habe ich aber noch das Problem, das zwar die Läufernummer, aber nicht die Rundenzahl in die Datei geschrieben wird :cry: Die Caption sollte wenn möglich als Tabelle gespeichert werden. Nochmal Gruß J!P |
AW: Rundenzähler für mehrere Läufer (Delphi 7 Prof)
Hallo J!P,
wie ist denn Deine EventView aufgaut? LäuferNr Rundenzahl Grüße Klaus |
AW: Rundenzähler für mehrere Läufer (Delphi 7 Prof)
Zitat:
Gruß J!P |
AW: Rundenzähler für mehrere Läufer (Delphi 7 Prof)
Hi J!P,
hat etwas länger gedauert... Grüße Klaus
Delphi-Quellcode:
// befüllen des ListView
procedure TForm1.Button1Click(Sender: TObject); var item:TListItem; i: Byte; begin ListView1.Columns[0].Caption:='Läufer'; ListView1.Columns[1].Caption:='Runde'; for i:=0 to 5 do begin item := ListView1.Items.Add; item.Caption:='Alice'+IntTostr(i);; item.SubItems.Add(intToStr(i)); end; ListView1.Items[0].SubItems[0]:='123'; end; //auslesen des ListView procedure TForm1.Button2Click(Sender: TObject); var i,j: Byte; sl : TStringList; s : AnsiString; begin sl := TStringList.Create; try for i:= 0 to ListView1.Items.count -1 do begin s:= ListView1.Items[i].Caption; for j:= 0 to ListView1.Items[i].SubItems.Count -1 do s:= s+' ; '+ ListView1.Items[i].SubItems[j]; sl.add(s); end; //Anzeigen des ListView Inhalt in einem TMemo Memo1.lines.Assign(sl); finally sl.free; end; end; end. |
AW: Rundenzähler für mehrere Läufer (Delphi 7 Prof)
Moment.... das ist doch nicht zum abspeichern der Tabelle, sondern zum erstellen eines TListView.
Dass habe ich ja schon. Hier mal der komplette Code:
Delphi-Quellcode:
nun habe ich aber das Problem, das der Code den du mir zuvor geschrieben hast nicht beide Spalten in die Datei schreibt.....
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, ExtCtrls; type TForm1 = class(TForm) EventView: TListView; Label1: TLabel; LEdit: TEdit; procedure LEditKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure InsertOrUpdateRunner(RunnerNumber: string) ; procedure LEditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; Stream: TFileStream; sl : TStringList; i: Integer; o: Integer; Laeuferfeld: Record Laeufernummer, Runde: Integer; end; implementation {$R *.dfm} procedure TForm1.InsertOrUpdateRunner(RunnerNumber: string) ; var i: Integer ; FFound : boolean ; FNewround : Integer ; begin FFound := false ; for i := 0 to (EventView.Items.Count -1) do begin if(EventView.Items[i].Caption = RunnerNumber) then begin FNewround := StrToInt(EventView.Items[i].SubItems[0]) + 1 ; EventView.Items[i].SubItems[0] := IntToStr(FNewround) ; FFound := true; break ; end; end; if (not FFound) then begin with EventView.Items.Add do begin Caption := RunnerNumber ; Subitems.Add('1') ; end; end; end; procedure TForm1.LEditKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if(Key = 13) then begin InsertOrUpdateRunner(LEdit.Text); LEdit.Text:=' '; end; end; procedure TForm1.LEditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (key = 13) then begin sl := TStringList.Create; try for i:=0 to EventView.Items.Count -1 do sl.add(EventView.Items[i].caption); sl.SaveToFile('.\Liste.csv'); finally sl.free; end; end; end; end. Gibt es da noch eine Möglickeit das zu verbessern? Gruß J!P |
AW: Rundenzähler für mehrere Läufer (Delphi 7 Prof)
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var i,j: Byte; sl : TStringList; s : AnsiString; begin sl := TStringList.Create; try for i:= 0 to ListView1.Items.count -1 do begin s:= ListView1.Items[i].Caption; for j:= 0 to ListView1.Items[i].SubItems.Count -1 do s:= s+' ; '+ ListView1.Items[i].SubItems[j]; sl.add(s); end; //Speichern des ListView Inhalt sl.saveToFile('.\Liste.csv'); finally sl.free; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:51 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-2025 by Thomas Breitkreuz