AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi DBGrid- und TLabel-Anzeige nicht identisch
Thema durchsuchen
Ansicht
Themen-Optionen

DBGrid- und TLabel-Anzeige nicht identisch

Ein Thema von LOMBI · begonnen am 29. Mär 2006 · letzter Beitrag vom 31. Mär 2006
Antwort Antwort
Seite 1 von 2  1 2      
LOMBI
(Gast)

n/a Beiträge
 
#1

DBGrid- und TLabel-Anzeige nicht identisch

  Alt 29. Mär 2006, 20:52
Datenbank: Paradox7 • Zugriff über: TTable
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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: DBGrid- und TLabel-Anzeige nicht identisch

  Alt 29. Mär 2006, 21:34
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
  Mit Zitat antworten Zitat
LOMBI
(Gast)

n/a Beiträge
 
#3

Re: DBGrid- und TLabel-Anzeige nicht identisch

  Alt 30. Mär 2006, 08:07
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: DBGrid- und TLabel-Anzeige nicht identisch

  Alt 30. Mär 2006, 08:13
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.
Markus Kinzler
  Mit Zitat antworten Zitat
dfried

Registriert seit: 16. Aug 2005
486 Beiträge
 
#5

Re: DBGrid- und TLabel-Anzeige nicht identisch

  Alt 30. Mär 2006, 08:49
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.
  Mit Zitat antworten Zitat
LOMBI
(Gast)

n/a Beiträge
 
#6

Re: DBGrid- und TLabel-Anzeige nicht identisch

  Alt 30. Mär 2006, 17:03
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: DBGrid- und TLabel-Anzeige nicht identisch

  Alt 30. Mär 2006, 17:10
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.

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;
Markus Kinzler
  Mit Zitat antworten Zitat
LOMBI
(Gast)

n/a Beiträge
 
#8

Re: DBGrid- und TLabel-Anzeige nicht identisch

  Alt 30. Mär 2006, 17:24
Hallo mkinzler,

und was ist Deine Meinung zu meinen Codes?

Gruß
Lombi
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: DBGrid- und TLabel-Anzeige nicht identisch

  Alt 30. Mär 2006, 17:33
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.
Markus Kinzler
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#10

Re: DBGrid- und TLabel-Anzeige nicht identisch

  Alt 30. Mär 2006, 19:34
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;
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:51 Uhr.
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