Спадкоємець від TIBUpdateSQL з друкарською транзакцією
Тут спроба впровадити в IBX принцип поділу транзакцій на "читають" і "пишуть" для компонентів типу IBCustomDataset. Використання в якості базового компонента IBUpdateSQL пояснюється бажанням мінімізувати роботу зі зміни вихідного коду і його достатністю - переробка IBDataset може спричинити за собою ймовірні проблеми при використанні нових версій IBX.
Для розуміння механізму IBUpdateSQL необхідно виділити наступні властивості і методи: private
FQueries: array [TUpdateKind] of TIBQuery;
public
property Query [UpdateKind: TUpdateKind]: TIBQuery read GetQuery; Властивість-масив FQueries зберігає покажчики на об'єкти типу TIBQuery, значення яких в початковий момент рівні nil. При першому зверненні до Query викликається метод GetQuery - він створює об'єкт і ініціалізує його властивостей IBDatabase і IBTransaction. Зазначу, що імовірна ситуація, коли один або кілька об'єктів TIBQuery просто не будуть створені, тобто не відбувалися зміни даних і FDataset не звертався до методу UpdateObject.Apply. Простіше кажучи, компонент IBUpdateSQL робить "ручну" роботу на кшталт var
MySql: TIBSQL;
MySql: = TIBSQL.Create (nil);
MySql.database: = dm.Base;
MySql.Transaction: = dm.trRead;
MySql.SQL: = 'la-la-la';
finalization
if Assigned (MySql) then
MySql.Free; Все це реалізовано в методі GetQuery.
- обробки події SetUpdateTransaction
- внести зміни в GetQuery
- обробити подія Notification
- обійти приватність і статичність