AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Daten anzeigen in StringGrid und TEdit

Ein Thema von LOMBI · begonnen am 24. Mai 2007 · letzter Beitrag vom 9. Jun 2007
Antwort Antwort
Seite 1 von 3  1 23      
LOMBI
(Gast)

n/a Beiträge
 
#1

Daten anzeigen in StringGrid und TEdit

  Alt 24. Mai 2007, 12:12
Hallo,

auf einer Form habe ich unter ein StringGrid einige TEdits platziert.
Zu einer markierten Adresse im Grid sollen darin weitere Informationen
z.B. die Tel-Nr. angezeigt werden. Diese Daten stehen bereits in der
DB.

Folgender Code hat leider nicht funktioniert:

Delphi-Quellcode:
 procedure TDemoForm.FormShow(Sender: TObject);
begin
  EdTelefon.Text := QueryAdr.FieldByName('Telefon').AsString;
end;
Vielen Dank für Hilfe!

Gruß
Lombi
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#2

Re: Daten anzeigen in StringGrid und TEdit

  Alt 24. Mai 2007, 12:29
Das FormShow wird lediglich einmal aufgerufen. Und wohl sowieso zu früh. Baue die Zeile mal ins OnSelectCell des Grids rein.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Daten anzeigen in StringGrid und TEdit

  Alt 24. Mai 2007, 12:59
Zitat von LOMBI:
....StringGrid einige TEdits platziert. ...
Hai Lombi,

wenn Du die Daten aus der Datenbank in ein StringGrid holst kommst Du mit dem Query auch nicht einfach so weiter.
Der Datensatz bleibt ja immer auf dem selben Datensatz der Tabelle stehen.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
LOMBI
(Gast)

n/a Beiträge
 
#4

Re: Daten anzeigen in StringGrid und TEdit

  Alt 24. Mai 2007, 13:59
Delphi-Quellcode:
procedure TDemoForm.StringGridSelectCell(Sender: TObject; ACol, ARow: Integer;
  var CanSelect: Boolean);
begin
  QueryAdr.RecNo := StringGrid.Row; // Codezeile ergänzt!
  EdTelefon.Text := QueryAdr.FieldByName('Telefon').AsString;
end;
Guter Vorschlag!

Eines stört aber:

Im Grid muß ich jetzt auf eine markierte Zeile doppelt klicken, damit die
passende Tel-Nr. im Edit erscheint.

Wie bitte kann ich das abstellen?
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Daten anzeigen in StringGrid und TEdit

  Alt 25. Mai 2007, 05:49
Hai LOMBI,

dieses Verfahren hat einen großen Nachteil. Wenn Du die Daten im StringGrid umsortierst stimmen die Nummern der Zeilen nicht mehr mit den RecNo der Datensätze überein.

Ich speichere mir Zusatzinfos immer in der Delphi-Referenz durchsuchenObjects Eigenschaft.

Hier einmal ein Beispiel:
Delphi-Quellcode:
type
  TExtraData = class(TObject)
    FID: Integer;
    FTelefon: string;
  public
    property ID: Integer read FID write FID;
    property Telefonnummer: string read FTelefon write FTelefon;
  end;

procedure TDemo_Form.FormCreate(Sender: TObject);
var
  MyData: TExtraData;
  ndx: Integer;
begin
  for ndx := StringGrid1.FixedRows to StringGrid1.RowCount do
  begin
    MyData := TExtraData.Create; // Objekt erzeugen
    MyData.ID := ndx; // Objekt mit Daten füllen
    MyData.Telefonnummer := Format('Telefonnummer %d', [ndx]);
    StringGrid1.Cells[1, ndx] := Format('Zeile %d', [ndx]);
    StringGrid1.Objects[0, ndx] := MyData; // Das Objekt an eine Zeile des SG binden
  end;
end;

procedure TDemo_Form.FormDestroy(Sender: TObject);
var
  ndx: Integer;
begin
  // Beim beenden des Programmes den Speicher für die Objekte freigeben
  for ndx := StringGrid1.FixedRows to StringGrid1.RowCount do
  begin
    if Assigned(StringGrid1.Objects[0, ndx]) then
    begin
      StringGrid1.Objects[0, ndx].Free;
    end;
  end;
end;

procedure TDemo_Form.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
  var CanSelect: Boolean);
var
  MyData: TExtraData;
begin
  MyData := Pointer((Sender as TStringGrid).Objects[0, ARow]); // Objekt der Zeile auslesen
  Label1.Caption := MyData.Telefonnummer; // Daten anzeigen
  Label2.Caption := format('Datensatz-ID %D', [MyData.ID]);
end;
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
LOMBI
(Gast)

n/a Beiträge
 
#6

Re: Daten anzeigen in StringGrid und TEdit

  Alt 26. Mai 2007, 12:15
Hallo Sharky,

mit Deinem Code kommt es leider zu einer 'Zugriffsverletzung'!
  Mit Zitat antworten Zitat
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.028 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Daten anzeigen in StringGrid und TEdit

  Alt 28. Mai 2007, 09:52
Zitat von LOMBI:
Hallo Sharky,

mit Deinem Code kommt es leider zu einer 'Zugriffsverletzung'!
An welcher STelle wird die Zugriffsverletzung ausgelöst?

SCRaT
Michael Kübler
  Mit Zitat antworten Zitat
LOMBI
(Gast)

n/a Beiträge
 
#8

Re: Daten anzeigen in StringGrid und TEdit

  Alt 29. Mai 2007, 11:21
Zugriffsverletzung bei:

EdTelefon.Text := MyData.Telefonnummer; // Daten anzeigen Statt dem Label verwende ich ein TEdit!

Wozu wird übrigens nachstehende Codezeile benötigt? Die Datensatz-ID muß nicht sichtbar
gemacht werden.

Label2.Caption := format('Datensatz-ID %D', [MyData.ID]);
  Mit Zitat antworten Zitat
marabu

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

Re: Daten anzeigen in StringGrid und TEdit

  Alt 29. Mai 2007, 12:05
Hallo Lombi,

setze einfach einen Haltepunkt auf die fragliche Zeile und inspiziere mal die Variable MyData. Wenn diese nil ist, dann hast du den Auslöser für die Zugriffsverletzung gefunden und kannst gezielt nach der Ursache forschen.

Sharky konnte nicht wissen welche Felder du anzeigen möchtest und welche nicht. Lasse die Zeile mit der Zuweisung von ID an Label2 einfach weg.

Freundliche Grüße
  Mit Zitat antworten Zitat
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.028 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Daten anzeigen in StringGrid und TEdit

  Alt 29. Mai 2007, 12:33
Zitat von LOMBI:

Wozu wird übrigens nachstehende Codezeile benötigt? Die Datensatz-ID muß nicht sichtbar
gemacht werden.

Label2.Caption := format('Datensatz-ID %D', [MyData.ID]);
Die Zeile ist die einfachere Lösung für folgenden Syntax (gleichwertig):

Label2.Caption := 'Datensatz-ID ' + IntToStr(MyData.ID); Diese Schreibweise ist besonders hilfreich wenn viele Variablen mittels '+' zu einem String zusammengeführt werden sollen. Hier ist die "format"-Schreibweise wesentlich kürzer. Im Internet (google) gibts einige Seiten, in denen der format-Befehl gut beschrieben ist. Sollte man sich mal zu Gemüte führen wenn man es öfters brauchen könnte!


SCRaT
Michael Kübler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 02:35 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