DBGrid Field Text verändern

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Timmyewr
Beiträge: 7
Registriert: Mi 29. Jul 2020, 14:52

DBGrid Field Text verändern

Beitrag von Timmyewr »

Guten Tag,

da ich mich nun schon seit 3 Stunden mit der Thematik beschäftige und langsam die Schnauze voll habe, hab ich mir gedacht, dass ich mich an die nette Community von dem Lazarusforum wende. :)

Mein Problem besteht darin, dass ich die Werte, die ich aus der Datenbank bekomme, nicht verändern kann. Heißt: Aus dem Wert 1 wird dann beispielsweise 'Aktiv'. Aus 2 dann 'Beschäftigt' oder aus 0 wird 'inaktiv'.

Was ich bisher gefunden habe sind die OnSetText und OnGetText Prozeduren. Allerdings weiß ich nicht wie ich diese zu benutzen habe.

Mit freundlichen Grüßen,
Timmyew.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6200
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: DBGrid Field Text verändern

Beitrag von af0815 »

lookup ist ein Stichwort dazu.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Timmyewr
Beiträge: 7
Registriert: Mi 29. Jul 2020, 14:52

Re: DBGrid Field Text verändern

Beitrag von Timmyewr »

Ich suche gezielt keine Lookup Fields. Ich möchte nur den Wert verändern.

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 990
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Linux Mint 20 , FPC 3.3.1 , Lazarus 2.1.0 -Win10 & XE7Pro
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: DBGrid Field Text verändern

Beitrag von kralle »

Moin ,
Ich weiß jetzt aus dem Kopf nicht wie die Option heißt , aber wenn Du Fich z.B. mit dieser Navigations-Komponente in der Datenbank bewegst, dann gibt es da ein Element mit dem man die Datenbank erst zum Bearbeiten freigegeben musst und ein Button mit dem Du dann die Änderungen in die Datenbank übernimmst.
Vielleicht bringt Dich das auf die Lösung.

Gruß Heiko
OS: Manjaro Linux, Debian und Windows 10
FPC-Version: 3.2.2 , Lazarus 3.0
+ Delphi XE7SP1

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6200
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: DBGrid Field Text verändern

Beitrag von af0815 »

Wenn du dein Problem anhand eines Beispiels zeigen könntest, bis zu dem Punkt wo du nicht weiter kannst. Aktuell verstehe ich deine Fragestellung nicht.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Timmyewr
Beiträge: 7
Registriert: Mi 29. Jul 2020, 14:52

Re: DBGrid Field Text verändern

Beitrag von Timmyewr »

Dieser Bild verdeutlicht mein Anliegen.
Dateianhänge
Bild.png
Bild.png (26.13 KiB) 2802 mal betrachtet

Benutzeravatar
gladio
Beiträge: 217
Registriert: Sa 21. Jun 2014, 06:15
OS, Lazarus, FPC: Win10-64 - aktuelle Lazarus/FPC Standard-Edition
CPU-Target: 64Bit
Wohnort: Rügen

Re: DBGrid Field Text verändern

Beitrag von gladio »

normal würde man sowas mit einer Detailtabelle und Lookup lösen.
Das willst du nicht.
Dann bietet sich statt DBGrid ein Stringgrid an und du chekst die Feldinhalte per If..then oder case und ersetzt so die "Zahlen" duch die Mengeneinheiten.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6200
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: DBGrid Field Text verändern

Beitrag von af0815 »

Timmyewr hat geschrieben:
Mi 29. Jul 2020, 15:01
Was ich bisher gefunden habe sind die OnSetText und OnGetText Prozeduren. Allerdings weiß ich nicht wie ich diese zu benutzen habe.
Wie machst du di Datenabfrgae, über SQL-DB Query ? Hast du dort die Felder angelegt und die Typen richtig parametriert ?

Hast du die die Fieldkind auf fkCalculated gesetzt ? Dann teste mal ob es mit OnGetText funktioniert. Den Sender musst als TField casten (Sender as TField), dann hast du Zugriff darauf. In aText muss dein Text rein. Display Text gehört für dich auf True (für Anzeige und false für Edit).

Geht die Anzeige soweit mal ?
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Bernie110
Beiträge: 120
Registriert: Mo 10. Feb 2020, 17:43

Re: DBGrid Field Text verändern

Beitrag von Bernie110 »

Hi, also mal vorab ich bin Lazarus - Anfänger.
Ich muss mich auch bald mit so einer Frage befassen. :mrgreen:

Würde da 2 Möglichkeiten in Erwägung ziehen.

1. Über eine VIEW am SQL Server ( oder wo auch immer ) die gleich aus 0 --> STk oder aus 1 --> Gramm macht.

Das würde ich z.B. machen.. Man spart sich dann immer gleich das Code Gefrickel.
VIEWS sind im Bezug auf Performance wohl immer die Beste Lösung ( Meine MEinung )

2. Über das .DBGrid1DrawColumnCell Ereignis.
( Keine Ahnung wie performant das sein wird :-) )

ungetest auf die Art :

Code: Alles auswählen

procedure TDEINFORM.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
      with (Sender as TDBGrid) do

                  //EINHEIT
                  If Column.Index = 0 then  // DEIN INDEX FELD
                  begin

                   with dbgrid1.canvas do
                         begin

                          // wenn der Wert von EINHEIT nur 1 oder 0 ist
                          if dbgrid1.DataSource.DataSet.FieldbyName('EINHEIT').asString = '0' then
                            begin
                              fillRect(rect);
                              dbgrid1.Canvas.Font.height := -14;
                              dbgrid1.Canvas.TextRect(Rect, Rect.Left + 3, Rect.Top + 2,'STK');
                            end else
                            begin
                              fillRect(rect);
                              dbgrid1.Canvas.Font.height := -14;
                              dbgrid1.Canvas.TextRect(Rect, Rect.Left + 3, Rect.Top + 2,'GRAMM');                            
                            end;
                          end;
                  end;

                 
       dbgrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); 
End;
Bin auch sehr gespannt was die Antwort der Profis hierauf sein könnte !
Lg Bernie

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6200
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: DBGrid Field Text verändern

Beitrag von af0815 »

Grundlegend mache ich solche Sachen gerne direkt am Server. Als Alternative dann als Lookup auf der Query, dann erst über OnGet/SetText über die Fields. Im Grid erst als so ziemlich letzte Möglichkeit.

Vor allen, überlege ich immer, ist das Dataset Read Only oder Read/Write. Wenn ich Datensensitive Komponenten verwende, dann ist ein Lookup fast ein muss. Und wenn ich mir ein Hilfsdatenset im Memory mit den Einträgen erzeuge.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Timmyewr
Beiträge: 7
Registriert: Mi 29. Jul 2020, 14:52

Re: DBGrid Field Text verändern

Beitrag von Timmyewr »

Ich habe eine andere Lösung gefunden,
trotzdem war das ganze hier nicht umsonst.
Es wird mir in Zukunft sicherlich weiterhelfen.
Ein Dank geht hier an alle Antworten raus. :)
Schönen Abend noch :P

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: DBGrid Field Text verändern

Beitrag von Winni »

Hi!

Kannst Du uns auch an Deinem Wissen teilhaben lassen?

So wie die anderen das auch gemacht haben?
Und vielleicht hat ja jemand auch mal das gleiche Problem?

Winni

Antworten