Sonntag, 7. September 2008

entwickler.com Magazine Konferenzen Akademie Entwickler-Forum Jobbörse Bücher
Software & Support Verlag

ADO im DBGrid und Formatierung

Frage: Gibt es irgendeine Möglichkeit, bei der Darstellung von Datensäzten in einem DBGrid die Werte, die als Money oder BCD mit Nachkommastellen in der Datenbank abgelegt sind, auch so darstellen zu lassen? Bei allem, was ich probiert habe, schmeisst ADO mir bei glatten Zahlen die Nachkommastellen weg.

Antwort: Selbstverständlich, wobei es im Detail davon abhängt, ob dbGo (alias TADODataSet) verwendet wird oder nicht. Im Fall von TADODataSet müssen nur im Feld-Editor (Doppelklick auf die TADODataSet-Komponente im Formular oder Datenmodul) die so genannten persistenten TField-Instanzen angelegt werden, so dass dann für jede Spalte im Objektinspektor die Darstellung konfiguriert werden kann. Um Währungsbeträge anzuzeigen, ist dazu die Eigenschaft currency zuständig - den Rest erledigt die VCL. Aber auch die Anzahl der Nachkommastellen kann festgelegt werden.
Im praktischen Beispiel sieht das dann so aus, wobei ich zuerst eine Tabelle in der MS SQL Server-Datenbank tempdb mit einigen Testdatensätzen fülle:

USE tempdb
GO
CREATE TABLE EuroTest
(
  Betrag   DECIMAL(9,3) NOT NULL
)
INSERT INTO EuroTest (Betrag) VALUES (0.50)
INSERT INTO EuroTest (Betrag) VALUES (1)
INSERT INTO EuroTest (Betrag) VALUES (1.50)
INSERT INTO EuroTest (Betrag) VALUES (1000.50)
GO
SELECT * FROM EuroTest
GO
Der Rest - also das Testprogramm - wird vollständig visuell im Objektinspektor konfiguriert:
object Form1: TForm1
  Left = 192
  Top = 114
  Width = 870
  Height = 640
  Caption = 'Form1'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object DBGrid1: TDBGrid
    Left = 24
    Top = 64
    Width = 320
    Height = 120
    DataSource = DataSource1
    TabOrder = 0
    TitleFont.Charset = DEFAULT_CHARSET
    TitleFont.Color = clWindowText
    TitleFont.Height = -11
    TitleFont.Name = 'MS Sans Serif'
    TitleFont.Style = []
  end
  object ADOConnection1: TADOConnection
    Connected = True
    ConnectionString = 
      'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security In' +
      'fo=False;Initial Catalog=tempdb;Data Source=(local)'
    LoginPrompt = False
    Provider = 'SQLOLEDB.1'
    Left = 24
    Top = 16
  end
  object ADODataSet1: TADODataSet
    Active = True
    Connection = ADOConnection1
    CursorType = ctStatic
    CommandText = 'select * from EuroTest'
    Parameters = <>
    Left = 64
    Top = 16
    object ADODataSet1Betrag: TBCDField
      FieldName = 'Betrag'
      currency = True
      Precision = 9
      Size = 3
    end
  end
  object DataSource1: TDataSource
    DataSet = ADODataSet1
    Left = 104
    Top = 16
  end
end






Software & Support Verlag GmbH