Additional
dbCAP
AnyDAC
ThinDAC
NCOCI8
Topic: Прошу помощи...
Прошу помощи...
Posted: 2008/04/23 18:15
 
Есть задача:
БД MS SQL, доступ к данным (просмотр, модификация) только через процедуры. При модификации некоторых полей могут произойти изменения в других полях этой записи поэтому процедура модификации возвращает модифицированную строку.

До покупки AnyDAC я использовал собственное решение, построенное на базе MemTable: при модификации данных, вызывалась процедура, затем происходила модификация MemTable на основе результата процедуры. Это удобно и не требует полного рефреша таблицы после модификации. Все хорошо, но решение весьма прожорливо на больших таблицах.

Пробую перейти на TADQQuery + TADUpdateSQL однако не могу понять как отследить и использовать возвращаемый TADUpdateSQL результат и вручную модифицировать данные в TADQQuery.
Соответственно вопросы:
- Возможно ли перехватить момент вызова команды модификации из TADUpdateSQL и получить доступ к результату?
- Можно ли в наследниках TADQuery мануально менять значения полей?

Буду очень признателен за помощь!
Re:Прошу помощи...
Posted: 2008/04/24 23:36
 
1) AnyDAC будет автоматически переносить значения out параметров в одноименные поля датасета. Что бы настроить параметры, необходимо написать, на пример:

    ADUpdateSQL1.InsertSQL.Text := '....';   ADUpdateSQL1.Commands[arInsert].Params[...].ParamType := ptOutput;



2) - Возможно ли перехватить момент вызова команды модификации из TADUpdateSQL и получить доступ к результату?
См. демо SamplesComp LayerTADQueryCachedUpdatesOnUpdateRecord

3) - Можно ли в наследниках TADQuery мануально менять значения полей?
Да, вы можете напрямую манипулировать TADDatSTable объектом, который собственно и хранит датасет. Доступ к нему идет примерно так:

 for := 0 to ADQuery1.Table.Rows.Count do   for := 0 to ADQuery1.Table.Columns.Count do     ADQuery.Table.Rows[i].Value[jrvDefault]


См. демы SamplesDatS Layer на тему как работать с DatS классами.