02.04.2017, Vladimír Klaus, navštíveno 2077x

Delphi
MS Access

Při práci s DB tabulkou nebo dotazem přes ADO může dojít k chybě "Argumenty mají chybný typ, jsou mimo přijatelný rozsah nebo vzájemně kolidují.", což je opět nicneříkající hlášení.

Původní znění: Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.

ADO DB - Argumenty mají chybný typ, jsou mimo přijatelný rozsah nebo vzájemně kolidují., obr. 1

Stane se to například, když v cxGridu v jednom sloupci zaškrtnu třeba 2 hodnoty (je mezi nimi OR) a pak v dalším zaškrtnu třeba jednu hodnotu - ta je v AND proti těm dvěma a způsobí tuto chybu.

ADO DB - Argumenty mají chybný typ, jsou mimo přijatelný rozsah nebo vzájemně kolidují., obr. 2

Řešením je nastavit MyTableView.DataControler.KeyFieldNames třeba na ID tabulky. Pak to přestane zlobit. Před spoustou let byl problém v problematickém sestavení filtru (neodpovídalo to požadavkům Microsoftu při kombinaci AND/OR), nyní je to ale opravdu tím klíčem. Souvisí to tedy s filtrováním v ADO než přímo s cxGridem a není vyloučeno, že se taková chyba objeví i ve zcela jiné situaci.

Ještě cituji z nápovědy "TcxGridDBTableView.DataController":

You may also need to set key field names via the DataController.KeyFieldNames property to get the grid to function properly. You should set the DataController.KeyFieldNames property in the following cases:

  • if you want to perform in-sync operations on the TDataSet in a detail data controller such as editing and adding records;
  • if you need to delete several selected records from the corresponding dataset;
  • if you want to speed up navigation when data in your grid control is synchronized with TDataSet.

Aktualizace 17.3.2018

Dle aktuálního výzkumu je uvedené řešení nepoužitelné a stále vede dle Microsoftu na ilegální používání filtru! Řešením je nastavení TcxGridDBTableView.DataController.Filter.AutoDataSetFilter:=false. Pak se filtrování provádí mřížkou a nesouvisí již přímo s ADO komponentami. Samozřejmě to má zase jiné negativní dopady, ale tento problém s filtrováním se vyřeší.

Zdroje: