02.04.2017, Vladimír Klaus, navštíveno 2131x
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.
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.
Ř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: