Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi In Delphi row Anzeige?? (https://www.delphipraxis.net/93246-delphi-row-anzeige.html)

XXcD 3. Jun 2007 11:07


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

CCRDude 3. Jun 2007 11:10

Re: In Delphi row Anzeige??
 
TLabel
TMemo
TRichEdit
TListView
TListBox
...

XXcD 3. Jun 2007 11:12

Re: In Delphi row Anzeige??
 
Also am besten wäre das als Label, aber wie soll das gehen??

DeddyH 3. Jun 2007 12:06

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;

CCRDude 3. Jun 2007 12:08

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) ;)

XXcD 3. Jun 2007 12:11

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.

DeddyH 3. Jun 2007 12:12

Re: In Delphi row Anzeige??
 
Wie sieht denn die Tabellenstruktur aus?

XXcD 3. Jun 2007 12:17

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:
select from nachrichten WHERE Empfänger=User;
. 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. :-)

DeddyH 3. Jun 2007 12:23

Re: In Delphi row Anzeige??
 
Hast Du auch einen (möglichst nummerischen) Primärschlüssel oder ist der Betreff unique?

XXcD 3. Jun 2007 12:24

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.

DeddyH 3. Jun 2007 12:26

Re: In Delphi row Anzeige??
 
Wie willst Du denn die einzelnen Nachrichten unterscheiden?

XXcD 3. Jun 2007 12:31

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.

DeddyH 3. Jun 2007 12:35

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.

XXcD 3. Jun 2007 12:52

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 3. Jun 2007 12:59

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Sonstige Fragen zu Delphi" nach "Datenbanken" verschoben.

DeddyH 3. Jun 2007 13:23

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.

XXcD 3. Jun 2007 14:25

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.

XXcD 4. Jun 2007 16:09

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??

DeddyH 4. Jun 2007 16:43

Re: In Delphi row Anzeige??
 
FreeLabels aufrufen ;)

XXcD 4. Jun 2007 16:44

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

XXcD 4. Jun 2007 16:54

Re: In Delphi row Anzeige??
 
Irgedwie funtzt das nicht wenn ich freeLabels benutze. Da passiert garnichts. Ist da irgedwo nen Fehler???

DeddyH 4. Jun 2007 17:09

Re: In Delphi row Anzeige??
 
Jepp, sogar 2 Fehler :oops:
Ändere mal die Zeile
Delphi-Quellcode:
aLabel := TLabel.Create(self);
in
Delphi-Quellcode:
aLabel := TLabel.Create(ScrollBox1);
und die Zeile
Delphi-Quellcode:
for i := 0 to ScrollBox1.ComponentCount - 1 do
in
Delphi-Quellcode:
for i := ScrollBox1.ComponentCount - 1 downto 0 do
Dann sollte es klappen.

XXcD 4. Jun 2007 17:13

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