![]() |
In Delphi row Anzeige??
Hallo,
ist es möglich mit Delphi aus einer SQL Datenbank mehrere Sachen auszulesen und das als row anzeigen zu lassen?? Ich meine das jetzt so z.b. bei Nachrichten, dass in einer Form dann untereinander angezeigt wird: Nachricht 1 Nachricht 2 Nachricht 3 |
Re: In Delphi row Anzeige??
TLabel
TMemo TRichEdit TListView TListBox ... |
Re: In Delphi row Anzeige??
Also am besten wäre das als Label, aber wie soll das gehen??
|
Re: In Delphi row Anzeige??
Hallo, Labels müsstest Du dynamisch zur Laufzeit erstellen, außerdem weißt Du ja nicht, ob der Platz auf dem Formular ausreicht, also bräuchtest Du auch noch eine Scrollbox. Ich denke, am Einfachsten geht das mit einer ListBox, einem Memo, einem Richedit usw. Hier mal ein Beispiel mit einer ListBox und einer Query.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin ListBox1.Items.BeginUpdate; ListBox1.Clear; try with Query1 do begin Close; SQL.Clear; SQL.Add('SELECT Nachricht FROM Tabelle'); Open; First; while not EOF do begin ListBox1.Items.Add(FieldByName('Nachricht').AsString); Next; end; end; finally ListBox1.Items.EndUpdate; end; end; |
Re: In Delphi row Anzeige??
In dem Text für das Label müsste man auch lediglich ein #13#10 pro Zeilenumbruch einfügen, da muss man nicht dynamisch mehrere erzeugen (ne Scrollbox drumherum höchstens noch) ;)
|
Re: In Delphi row Anzeige??
Ja gut aber wie soll das gehen dass man dann in dem Label stehen hat wie der Titel der Nachricht ist und wenn man draufklickt direkt auf die Nachricht kommt.
|
Re: In Delphi row Anzeige??
Wie sieht denn die Tabellenstruktur aus?
|
Re: In Delphi row Anzeige??
Also ich beschreibe das mal genau man schreibt eine Nachricht und in die Tabelle wir gespeichert der Text, der Empfänger, der Absender und der Betreff. Und bei dem anderen wird dann aus der tabelle der Empfänger abgerufen. Also wenn ich jetzt als User eingeloggt bin
SQL-Code:
. Und in dem Label soll dann der Betreff stehen und wenn man da drauf klickt soll der text angezeigt werden. Ich hoffe ich hab das jetzt deutlich beschrieben. :-)
select from nachrichten WHERE Empfänger=User;
|
Re: In Delphi row Anzeige??
Hast Du auch einen (möglichst nummerischen) Primärschlüssel oder ist der Betreff unique?
|
Re: In Delphi row Anzeige??
Also der Betfreff darf auch öfters verwendet werden. Ein Unique gibt es da nicht sonst könnte es ja vorkommen, dass manche Leute nen Fehler bekommen beim absenden der Nachricht.
|
Re: In Delphi row Anzeige??
Wie willst Du denn die einzelnen Nachrichten unterscheiden?
|
Re: In Delphi row Anzeige??
Hmmm da sagste was, wie macht man das denn PHP z.b. bei GMX, da bekommt bei ner Email ja auch was angezeigt und wenn man das anklickt dann wird die Nachricht angezeigt. Vielleicht wenn man als Caption des labels den Betreff macht und der Name des labels dann ne id. Also man macht in der tabelle noch ne id die nur einmal vorkommt und automatisch aufwärts zählt.
|
Re: In Delphi row Anzeige??
Das Einfachste wäre, eine Spalte ID (nummerisch) anzulegen und diese als Primärschlüssel zu definieren. Je nach verwendetem DBMS brauchst Du dann noch einen Trigger oder Du vergibst die Eigenschaft 'auto_increment', 'Autowert', 'Zähler' oder wie das da auch heißen mag. Diese eindeutige ID könnte man dann in der Property Tag eines jeden Labels ablegen (mit einem einzelnen Label geht das dann natürlich nicht mehr), so dass man genau weiß, welcher Betreff angeklickt wurde. Ist nicht ganz trivial, sollte aber so funktionieren.
|
Re: In Delphi row Anzeige??
Ok dann hab ich jetzt eine Spalte die id heißt und automatisch aufwärts zählt, aber leider hab ich immernoch keine AHnung wie ich das jetzt in Delphi verwenden soll. Ich hab mich halt noch nie in dem bereich mit Delphi beschäftigt.
|
DP-Maintenance
Dieses Thema wurde von "Matze" von "Sonstige Fragen zu Delphi" nach "Datenbanken" verschoben.
|
Re: In Delphi row Anzeige??
Ich hab mal schnell ein rudimentäres Beispiel erstellt.
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Main, DB, ZAbstractRODataset, ZAbstractDataset, ZDataset, StdCtrls, ExtCtrls; type TForm1 = class(TForm) ScrollBox1: TScrollBox; Panel1: TPanel; Query1: TZQuery; procedure FormShow(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private-Deklarationen } procedure LabelClick(Sender: TObject); procedure FreeLabels; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.LabelClick(Sender: TObject); begin if (Sender is TLabel) then begin with Query1 do begin Close; SQL.Clear; SQL.Add('SELECT Nachricht FROM Nachrichten WHERE ID = :id'); ParamByName('id').AsInteger := TLabel(Sender).Tag; Open; First; ShowMessage(FieldByName('Nachricht').AsString); end; end; end; procedure TForm1.FreeLabels; var i: integer; begin for i := 0 to ScrollBox1.ComponentCount - 1 do if ScrollBox1.Components[i] is TLabel then TLabel(ScrollBox1.Components[i]).Free; end; procedure TForm1.FormShow(Sender: TObject); var aLabel: TLabel; aTop: integer; begin aTop := 10; with Query1 do begin Close; SQL.Clear; SQL.Add('SELECT ID, Betreff FROM Nachrichten ORDER BY Nachricht'); Open; First; while not EOF do begin aLabel := TLabel.Create(self); aLabel.Parent := ScrollBox1; aLabel.Left := 10; aLabel.Top := aTop; aLabel.Tag := FieldByName('ID').AsInteger; aLabel.Caption := FieldByName('Betreff').AsString; aLabel.OnClick := LabelClick; inc(aTop,15); Next; end; end; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin FreeLabels; end; end. |
Re: In Delphi row Anzeige??
Ok danke das hat mir schonmal weiter geholfen. Ich werde gleich mal versuchen, das einzubauen. Muss ich denn da noch was beachten?? Also woher weiß das teil eigentlich wo das Label hin soll oder muss ich da erst eins erstellen mit nen bestimmten namen???
EDIT: Aso hat sich erledigt habs gerade gesehen. |
Re: In Delphi row Anzeige??
Also so weit schön und gut, das klappt einwandfrei, aber wie kann ich per Button Klick die Items aus der Scrollbox wieder ausleeren??
|
Re: In Delphi row Anzeige??
FreeLabels aufrufen ;)
|
Re: In Delphi row Anzeige??
Aber gebe ich dann nicht alle Labels frei?? Also auch die die garnichts damit zu tun haben?
Edit: Upps hab übersehen dass das genau definiert ist, also hat sich erledigt. Aber trotzdme danke |
Re: In Delphi row Anzeige??
Irgedwie funtzt das nicht wenn ich freeLabels benutze. Da passiert garnichts. Ist da irgedwo nen Fehler???
|
Re: In Delphi row Anzeige??
Jepp, sogar 2 Fehler :oops:
Ändere mal die Zeile
Delphi-Quellcode:
in
aLabel := TLabel.Create(self);
Delphi-Quellcode:
und die Zeile
aLabel := TLabel.Create(ScrollBox1);
Delphi-Quellcode:
in
for i := 0 to ScrollBox1.ComponentCount - 1 do
Delphi-Quellcode:
Dann sollte es klappen.
for i := ScrollBox1.ComponentCount - 1 downto 0 do
|
Re: In Delphi row Anzeige??
Jo habs ausprobiert, es funktioniert. Vielen Dank.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18: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-2025 by Thomas Breitkreuz