Autor |
Beitrag |
Miephos
Hält's aus hier
Beiträge: 15
|
Verfasst: Di 11.03.03 23:02
Die Lösung ist bestimmt ganz einfach, aber ich habe sie noch nicht gefunden. Ich habe mehrere DBLabels auf einer Form. Ich möchte jetzt jedes einzelne Label mit einem bestimmter DatenSatz-Zeile aus einer Tabelle oder einer Query-Abfarge einem bestimmten Label zuordnen. z.B. dem Label1 die 2.Zeile in Tabelle, dem Label2 die 3.Zeile in Tabelle usw.
Er zeigt mir in allen nur die gleiche Zeile an, ist ja auch logisch, wie kann ich das aber ändern. Ich will ja auch nicht mit jedem Label eine Query-Komponente verbinden, das wird dann ja richtig stressig.
CU Miephos
Danke schon ma für dir Hilfe
|
|
mars
      
Beiträge: 238
Debian Woody, Win 2000, Win XP
D7 Ent, Kylix 3
|
Verfasst: Di 11.03.03 23:52
Es ist nun mal so, dass wenn du die Query-Komponente benutzt, alle daran angehängten Komponenten auf die gleiche Zeile zeigen. Du musst also entweder manuell den Wert auslesen oder mehrere Query-Komponenten benutzen( was wirklich nicht so optimal wäre). Aber wenn du noch genauer beschreiben könntest, wofür du mehrere Zeilen anzeigen musst, könnte man vielleicht auch eine etwas elegantere Methode finden.
|
|
bis11
      
Beiträge: 1247
Erhaltene Danke: 2
Apple Mac OSX 10.11
|
Verfasst: Mi 12.03.03 09:06
Entweder Du macht für jedes Label eine Query-Kompo und stellst in jeder Deine Abfrage rein oder Du nimmst ganz normale Labels. Dann kannst Du Eine Abfrage starten und jedem Label einen Wert zu ordnen.
Beispiel:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| with Query do begin Sql.Clear; Sql.Add('SELECT * FROM tabelle;'); Open; Active := True; while not EOF do begin Label1.Caption := Fields[1].AsString; Label2.Caption := Fields[2].AsString; end; Active := False; end; |
In diesem Beispiel wird das zweite Datenfeld in Label1 geschrieben und das dritte in Label2. Bei Dem Befehl Fields ist darauf zu achten, dass mit 0 angefangen wird zu zählen bei den Tabellenspalten.
|
|
kiwicht
      
Beiträge: 1021
Win 7, MacOS
Delphi x, VBA, PHP, ...
|
Verfasst: Mi 12.03.03 09:14
Hallöchen...
vielleicht hilft die auch die Komponente DBCtrlGrid weiter (unter Reiter: DataControls).
Das ziehst du auf dein Formular, und kannst dann in jede Zeile dieses Grids eine DBEdit-Feld ziehen. Diese DBEdit-Felder zeigen dann halt nicht auf nur den aktuellen Datensatz... ob´s das ist, was du brauchst, weiß ich nicht, hoff ich aber!
mfg
|
|
Miephos 
Hält's aus hier
Beiträge: 15
|
Verfasst: Mi 12.03.03 23:06
Ich habe den Vorschlag von bis11 ausprobiert, hat aber irdendwie nicht so fuktioniert wie ich das wollte. Ich erläutere mein Problem genauer.
z.B. ich habe ein Tablle mit 3 Spalten.
NR Name Vorname
1 ich meine
2 du deine
3 er seine
4 sie ihre
5 es es
Über ein Query frage ich die Tabelle ab
Quelltext 1: 2: 3: 4: 5: 6: 7:
| Select Nr, Name + Vorname As NameString From Table Order By NameString |
So weit alles klar: Als Ausgabe bekomme ich für das Feld "NameString" eine "Liste"
dudeine
erseine
eses
...
So nun weiter: Ich habe jetzt 5 Labels unter einander, und will nun das erste Label mit dem 1. Satz füllen[dudeine], das 2.Label mit dem 2.Satz[erseine], usw.
Ich will also nicht die Spalten abfragen sondern die Zeilen.
Ich hoffe das kann jemanden helfen, mir zu helfen.
Cu Miephos
|
|
mars
      
Beiträge: 238
Debian Woody, Win 2000, Win XP
D7 Ent, Kylix 3
|
Verfasst: Do 13.03.03 00:23
Das von bis11 stimmt schon, nur fehlt das Verschieben des Zeigers um eine Position. D.h.: in der while-Schleife sollte am Schluss noch Query.Move (so heisst das doch?  ) stehen. Und du musst natürlich noch die Labels und Felder anpassen.
|
|
bis11
      
Beiträge: 1247
Erhaltene Danke: 2
Apple Mac OSX 10.11
|
Verfasst: Do 13.03.03 07:14
So ungefähr muss es aussehen :
Du musst halt nur noch die Zeile mit dem Label variable machen.
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| with Query do begin Sql.Clear; Sql.Add('SELECT * FROM tabelle;'); Open; Active := True; while not EOF do begin Label1.Caption := Fields[1].AsString; Next; end; Active := False; end; |
|
|
HSchaffi
      
Beiträge: 64
|
Verfasst: Do 13.03.03 09:58
so wie bis11 geschreiben hat, wird doch nur das label1 immer wieder neu geschrieben. Wenn du die Zeile auslesen willst, würde ich mit einer case-Anweisung arbeiten. Aber was willst du machen wenn du dann mehr als 5 Datensätze hast? Willst du dann auch soviele Labels machen?
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| with Query do begin Sql.Clear; Sql.Add('SELECT * FROM tabelle;'); Open; Active := True; while not EOF do begin case RecNo of 0 : Label1.caption:= fields[1].asstring; 1 : Label2.caption:= fields[1].asstring; //usw. end; Next; end; Active := False; end; |
mit RecNo müsste es gehen
Zuletzt bearbeitet von HSchaffi am Do 13.03.03 10:18, insgesamt 2-mal bearbeitet
|
|
bis11
      
Beiträge: 1247
Erhaltene Danke: 2
Apple Mac OSX 10.11
|
Verfasst: Do 13.03.03 10:01
Mit einer Case-Anweisung kommst Du da nicht weit, wenn die Labels variable sein sollen. Das einzigste was Du machen kannst, ist die Labels zur Laufzeit zu erstellen und dann bei jedem erstellen Label die Caption mit dem Wert aus der Datenbank zu füllen.
Möchtest Du allerdings immer nur 5 Datensätze anzeigen und dann durch klick auf einen Button wieder die nächsten fünf, so kannst Du mit der Case-Anweisung arbeiten, musst halt nur einen Zähler einbauen, der dir die Werte aus der Datenbank dann passend ausliest.
|
|
Miephos 
Hält's aus hier
Beiträge: 15
|
Verfasst: Do 13.03.03 10:35
Ich werde einmal die Variante von HSchaffi ausprobieren. Wenn ich das richtig verstanden habe, dann müsste mir diese Variante schon weiter helfen. Ich meld mich noch ma obs geklappt hat.
Ciao Miephos
|
|
Miephos 
Hält's aus hier
Beiträge: 15
|
Verfasst: Do 13.03.03 10:54
Wie erwartet, es hat funktioniert. Super so komme ich weiter. Vielen Dank
Cu Miephos
|
|
kiwicht
      
Beiträge: 1021
Win 7, MacOS
Delphi x, VBA, PHP, ...
|
Verfasst: Do 13.03.03 13:31
heee...  und meine Methode?
War die nu ganz falsch? Oder wurde die überlesen?
Find ich nämlich um einiges praktischer, da ohne Programmier-Aufwand...
|
|