Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   dbgrid , varchar Werte runden (https://www.delphipraxis.net/214509-dbgrid-varchar-werte-runden.html)

bernhard_LA 22. Jan 2024 10:01

Datenbank: MSSQL • Version: 12 • Zugriff über: ADO

dbgrid , varchar Werte runden
 
in meiner Datenbank gibt es zwei Felder für image_x, image_y, diese beiden Felder beinhalten Floating Point Werte.


Delphi-Quellcode:
CREATE TABLE [tablename](
        ....
       [image_x] [varchar](255) NULL,
       [image_y] [varchar](255) NULL,

)

Mit
Delphi-Quellcode:
  Select *  from mytable where ....


kann ich Werte aus der DB abfragen und in einem DB Grid zur Anzeige bringen. Funktioniert alles wie gewünscht. (VCL Framework)

Frage: Wie kann ich jetzt gerundete Zahlenwerte im DB Grid darstellen? Ich würde nur ungern die Rohdaten in der Datenbank runden, dh. den String verkürzen....


Für die Spaltenbreite habe ich bereits eine Lösung :


Delphi-Quellcode:
 
  IniFile := TIniFile.Create(IniFileName);
  try
    for I := 0 to Grid.Columns.Count - 1 do
    begin
      IniFile.WriteInteger('DBGridSettings', Grid.Columns[I].FieldName,
        Grid.Columns[I].Width);
    end;
  finally
    IniFile.Free;
  end;




Delphi-Quellcode:

  IniFile := TIniFile.Create(IniFileName);
  try
    for I := 0 to Grid.Columns.Count - 1 do
    begin
      Grid.Columns[I].Width := IniFile.ReadInteger('DBGridSettings',
        Grid.Columns[I].FieldName, Grid.Columns[I].Width);
    end;
  finally
    IniFile.Free;
  end;

Jasocul 22. Jan 2024 10:22

AW: dbgrid , varchar Werte runden
 
Etwas in dieser Art?
Delphi-Quellcode:
(MeineQuery.FieldByName('image_x') as TFloatField).DisplayFormat := '###,##0.00'
Da du die Felder aber als varchar definiert hast, könntest du bei ungültigen Inhalten Probleme bekommen.

peterbelow 22. Jan 2024 11:23

AW: dbgrid , varchar Werte runden
 
Die erste Frage ist natürlich, wieso Du floating point Zahlen in VARCHAR-Feldern ablegst und nicht in NUMBER oder anderen für solche Daten vorgesehenen Feldtypen.

Ansonsten sieh Dir mal den OnDrawDataCell event des grids an, da kannst Du den Feldinhalt anzeigen wie Du willst.

himitsu 22. Jan 2024 12:36

AW: dbgrid , varchar Werte runden
 
Das komische Delphi-StringGrid kennt nur ein OnGetEditText,
aber am DataSet, bzw. am TField, gibt es ein OnGetText und dort kann man Display und EditText entsprechend formatieren, wie man will.

Bodenseematze 25. Jan 2024 14:46

AW: dbgrid , varchar Werte runden
 
Du könntest auch den DB-Server Deine Varchar-Werte in Float-Werte umwandeln lassen (über das SELECT-Statement); sowas in der Art:
Code:
SELECT CONVERT( DECIMAL(18, 5), [image_x] ) AS [numImage_x], [image_x], ...
Das geht dann natürlich auch zusätzliche / gleichzeitig mit den nicht umgewandelten Werten.
Das Runden könnte die Datenbank dann auch gleich mit übernehmen (SQL-Funktion ROUND)...


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:09 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