20.10.2017, Vladimír Klaus, navštíveno 1651x

Delphi
MS Access
SQL
SQL Server

Při práci s dotazem přes TADOQuery může dojít k chybě "Informace o sloupci klíčů jsou nedostatečné nebo nesprávné. Aktualizace se týká příliš mnoha řádků.", která vypadá docela srozumitelně, jen při pátrání po problému můžete narazit na situaci, která hlášce příliš neodpovídá.

Původní znění: Key column information is insufficent or incorrect. Too many rows were affected by update.

V mém případě jsem vůbec neprováděl UPDATE dotaz nad více řádky (jak se to stalo v níže odkazovaném článku), ale klasickou aktualizaci jednoho řádku po druhém:

MyQuery.Edit;
MyQuery.FieldByName('Odpracovano').Value:=30;
MyQuery.Post;

Problém tedy musel vzniknout někde na úrovni SELECT dotazu, který ale vypadá zcela normálně a celou dobu fungoval dle očekávání.

SELECT DatumCas, Odpracovano FROM Dochazky 
WHERE Pass=1
ORDER BY DatumCas

Zásadní změna nastala při práci s větším množstvím dat (cca 10 000 řádek), kdy vždy došlo k uvedené chybě. Řešením bylo pouhé přidání ID do dotazu. Nikde se s ním nepracuje, nikde se nijak nevyužívá, ale zřejmě je pro nějaký interní přístup důležité.

SELECT ID, DatumCas, Odpracovano FROM Dochazky 
WHERE Pass=1
ORDER BY DatumCas

Při práci s databází je tedy třeba myslet i na podobné okolnosti, zvláště v případě, že ID (či jiný podobný údaj) vůbec nemáte, protože ho nepotřebujete. 

Viz též: