|
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
|