Посмотри demo CachedUpdates для MSDAC.
ЗЫ
Я себе в некоторых случаях делаю грид без привязки к MSQuery и данные записываю в строку с разделителями, которую передаю в ХП. ХП парсит строку и делает в одной транзакции сохранение, вставку, удаление.
Только мой ЗЫ подходит в простых случаях, когда парсинг не сказывается сильноо на производительности.
Вот пример:
SET @pos = charindex(@d, @edit_rows)
WHILE @pos>0
BEGIN
SET @sql = substring(@edit_rows, 1, @pos-1 )
SET @sql='INSERT INTO dr_demand values('+@edit_rows+')'
EXEC (@sql)
SET @edit_rows = substring(@edit_rows, @pos+1, len(@edit_rows))
SET @pos = charindex(@d, @edit_rows)
END