Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi DBGrid- und TLabel-Anzeige nicht identisch (https://www.delphipraxis.net/66446-dbgrid-und-tlabel-anzeige-nicht-identisch.html)

LOMBI 29. Mär 2006 19:52

Datenbank: Paradox7 • Zugriff über: TTable

DBGrid- und TLabel-Anzeige nicht identisch
 
Hi,

mit folgendem Code möchte ich die gespeicherten Daten in TLabels anzeigen:

Delphi-Quellcode:
procedure TDemoForm.DBGridDemoDrawColumnCell (Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState;)
begin
  LabelTel.Caption := FAdr.EditTel.Text;
  LabelFax.Caption := FAdr.EditFax.Text;
  LabelMob.Caption := FAdr.EditMob.Text;
  ...
end;
Problem:

Die Anzeige der Labels paßt nicht zu der aktuell markierten Adresse im
DBGrid. Es werden die Daten des vorherigen Datensatzes gezeigt.

Wer hilft mir bitte? Vielen Dank schon mal!

Gruß Lombi

marabu 29. Mär 2006 20:34

Re: DBGrid- und TLabel-Anzeige nicht identisch
 
Hallo Lombi,

die Ausgangskomponenten auf deiner Form FAdr enthalten wahrscheinlich noch nicht die richtigen Daten. Übrigens würde ich die Anzeigewerte immer direkt aus dem DataSet holen. Das passende Ereignis wäre TTable.OnAfterScroll() und nicht DbGrid.OnDrawColumnCell().

Grüße vom marabu

LOMBI 30. Mär 2006 07:07

Re: DBGrid- und TLabel-Anzeige nicht identisch
 
Guten Morgen marabu,

leider auch mit OnAfterScroll keine Veränderung. Bei den Adressen
sind die korrekten Tel./Fax-Nummern gespeichert. Also, wenn im
DBGrid zwei Adressen stehen, dann werden dazu die passenden Tel./Fax-
Nummern vertauscht in den Labels ausgegeben. AdrA erhält die Nummern
von AdrB.

Grüße
Lombi

mkinzler 30. Mär 2006 07:13

Re: DBGrid- und TLabel-Anzeige nicht identisch
 
Morgen Lombi,

du holst die werte aber aus irgend welchen Editfeldern und nicht aus dem DataSet (wie dir marabu vorgeschlagen hat). Anhand des wenigen Codes, den du uns gezeigt hast, kann man nicht abschätzen, ob und wie die Editfelder über den aktuellen Datensatnd bzw. ob die Vertauschung in dieser Zuweisung entstanden ist. Am Besten ist die Labelbeschriftung aus dem DataSet ( TTable, TQuery) zu setzen.

dfried 30. Mär 2006 07:49

Re: DBGrid- und TLabel-Anzeige nicht identisch
 
Wenn du nur die identischen Werte wie im Grid als Label anzeigen willst, dann nimm doch einfach ein DBLabel und häng es an das entsprechende DB-Feld.

LOMBI 30. Mär 2006 16:03

Re: DBGrid- und TLabel-Anzeige nicht identisch
 
Jetzt habe ich mich schon ein bisschen an die Flat-TEdits gewöhnt und möchte gerne damit weiterarbeiten, wenn möglich ohne die DB-Komponenten.

Ich denke, dass es eher eine Edit/Post-Sache ist. Könnt Ihr bitte mal
nachsehen, wo der Fehler liegt:

Delphi-Quellcode:
procedure TFAdrListe.BtnNeuClick(Sender: TObject); //Daten eingeben
begin
  FAdr.Show;
  with TableAdr do
  begin
  Insert;
  FieldByName('Anrede').AsString := FAdr.CBAnrede.Text;
  FieldByName('Name').AsString := FAdr.EditName.Text;
  FieldByName('Vorname').AsString := FAdr.EditVorname.Text;
  FieldBaName('Strasse').AsString := FAdr.EditStrasse.Text;
  ...
end;

procedure TFAdrListe.DBGridAdrListeCellClick(Column: TColumn);
//Daten ändern
begin
  FAdr.Show;
  with TableAdr do
  begin
  Edit;
  FAdr.CBAnrede.Text := FieldByName('Anrede').AsString;
  FAdr.EditName.Text := FieldByName('Name').AsString;
  FAdr.EditVorname.Text := FieldByName('Vorname').AsString;
  FAdr.EditStrasse.Text := FieldByName('Strasse').AsString;
  ...
end;

procedure TFAdr.BtnSpeichernClick(Sender: TObject); //Speichern
begin
  if FAdrListe.DataSourceAdr.DataSet.State=dsEdit then
    FAdrListe.TableAdr.Post
    else
  if FAdrListe.DataSourceAdr.DataSet.State=dsInsert then
    FAdrListe.TableAdr.Post;
    FAdrListe.Show;
end;
Im Forum lese ich häufiger auch "ParamByName". Was hat es damit auf sich?

Gruß
Lombi

mkinzler 30. Mär 2006 16:10

Re: DBGrid- und TLabel-Anzeige nicht identisch
 
Zitat:

Im Forum lese ich häufiger auch "ParamByName". Was hat es damit auf sich?
Dies benutzt man bei parametrisierten Abfragen.

Wenn man öfters die gleichen Abfragen mit verschiedenen Werte durchführt.

SQL-Code:
select * from tabelle where id = :id;
Dann reicht

Delphi-Quellcode:
Query.sql.Text = 'select * from tabelle where id = :id;';
...
Query.Close;
Query.ParamByName('id').value := 4711;
Query.Open;
...
Query.Close;
Query.ParamByName('id').value := 247;
Query.Open;

LOMBI 30. Mär 2006 16:24

Re: DBGrid- und TLabel-Anzeige nicht identisch
 
Hallo mkinzler,

und was ist Deine Meinung zu meinen Codes?

Gruß
Lombi

mkinzler 30. Mär 2006 16:33

Re: DBGrid- und TLabel-Anzeige nicht identisch
 
Meine Antwort bezog sich auf die Frage bezüglich Parameter ( habe meinen letzten Beitrag in diese Richtung abgeändert).
Zitat:

und was ist Deine Meinung zu meinen Codes?
Ich bevorzuge halt Query-Komponenten und keine Tables.
Zu was brauchst du das Edit in der Fkt DBGridAdrListeCellClick? Du liest doch Werte aus der Tabelle aus.

shmia 30. Mär 2006 18:34

Re: DBGrid- und TLabel-Anzeige nicht identisch
 
Zitat:

Zitat von LOMBI
mit folgendem Code möchte ich die gespeicherten Daten in TLabels anzeigen:
Delphi-Quellcode:
procedure TDemoForm.DBGridDemoDrawColumnCell (Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState;)
begin
  LabelTel.Caption := FAdr.EditTel.Text;
  LabelFax.Caption := FAdr.EditFax.Text;
  LabelMob.Caption := FAdr.EditMob.Text;
  ...
end;

Das ist GANZ falsch! OnDrawColumnCell wird 1. extrem oft aufgerufen und 2. für alle
im DBGrid sichtbaren Datensätze aufgerufen.
Richtig:
Das Event [TTable].AfterScroll benützen:
Delphi-Quellcode:
procedure TForm1.Table1AfterScroll(Dataset:TDataset);
begin
   LabelTel.Caption := Dataset.FieldByName('Tel').AsString;
   ...
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:09 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz