Hallo,
ich verwende folgenden Code zur Sortierung eines DBGrid:
Delphi-Quellcode:
procedure THHDGrid.Sort;
begin
try
if DataSource.DataSet.ClassName = '
TADOQuery'
then
if TADOQuery(DataSource.DataSet).Active
then
if DescParam
then
TADOQuery(DataSource.DataSet).Sort := '
[' + TitleName + '
] DESC'
else
TADOQuery(DataSource.DataSet).Sort := '
[' + TitleName + '
]'
else
else if DataSource.DataSet.ClassName = '
TRxMemoryData'
then
if TRxMemoryData(DataSource.DataSet).Active
then
if DescParam
then
TRxMemoryData(DataSource.DataSet).SortOnFields('
[' + TitleName + '
]', True, True)
else
TRxMemoryData(DataSource.DataSet).SortOnFields('
[' + TitleName + '
]', True, False);
except
on e:
exception do
begin
MessageDlg(e.
Message, mtInformation, [mbOK], 0);
end;
end;
end;
Bei der Verwendung unterschiedlicher Datenbanktreiber für
Access verhält sich die Sortierung (in der gleichen Datenbank) unterschiedlich:
Provider=Microsoft.ACE.OLEDB.12.0 (
Access 2007 Database Engine): Feld "Sendungsnummer" wird aufsteigend und absteigend korrekt sortiert
Provider=Microsoft.ACE.OLEDB.16.0 (
Access 2016 Database Engine): Feld "Sendungsnummer" wird nicht sortiert.
Es wird eine
Exception vom System erzeugt -> e.Message: 'Die Reihenfolge kann nicht angewendet werden'
Auch an anderen Stellen habe ich festgestellt, dass sich die Treiber der Datenbank unterschiedlich verhalten.
Unter normalen Umständen müsste ich mich mit dem Thema überhaupt nicht beschäftigen, da wir die Microsoft
Access Database Engine 2007 bei der Installation unserer Anwendung mitinstallieren und den Microsoft.ACE.OLEDB.12.0 Treiber verwenden. Leider habe ich nun in den vergangenen Wochen feststellen müssen, dass eine Microsoft Office 356 oder eine Microsoft Office 2016 Installation die Microsoft
Access Database Engine 2007 verändert und auf die Funktionalitäten von
Access 2016 umstellt. Damit verhält sich dann der Microsoft.ACE.OLEDB.12.0 Treiber wie ein Microsoft.ACE.OLEDB.16.0 Treiber. Auch eine "Side by Side" Installation der Microsoft
Access Database Engine 2007 mit dem Parameter /Passive hat keine Verbesserung gebracht.
Hat jedmand eine Idee, was das Problem beim Sortieren des DBGrid mit dem Microsoft.ACE.OLEDB.16.0 Treiber verursacht und wie man damit umgehen kann?
Gruß Michael
Michael H.