Алексей Горкуша дата публикации 14-05-2002 14:56 Компонент TADOUpdateSQL
Здесь представлены работающие компоненты обновления данных, полученных запросом
через TADOQuery, аналогичные компонентам BDE TQuery,TUpdateSQL
Компоненты TADOUpdateQuery, TADOUpdateSQL выполняют в точности те же функции
что и компоненты BDE TQuery,TUpdateSQL.
Это может способствовать быстрому переводу программ с BDE на ADO.
Компоненты работающие (в исходных текстах есть комментарии), но до полной
совместимости необходимы доработки, например:
отсутствуют события onUpdateRecord, onUpdateError.
Предлагаю всем
подключится и довести дело до конца.
type
TADOUpdateQuery = class;
TADOUpdateSQL = class;
// Для правильной работы (логика) нежелательно изменять запрашиваемые поля
TADOUpdateQuery = class (TADOQuery)
private
DelRecords: TADOQuery;
FUpdateObject: TADOUpdateSQL;
procedure SetUpdateObject(Value: TADOUpdateSQL);
procedure ClearBuffer; // физическое удаление записей из буфера удаленных
procedure InitBuffer; // создание датасета в которые помещаюися удаленные записи
procedure FillBuffer; // перенос записи в буфер удаленных
procedure ApplyDelUpdates;
protected
procedure InternalDelete; override;
public
constructor Create (AOwner: TComponent); override;
destructor Destroy; override;
procedure ApplyUpdates; // после успешного выполнения буфер удаленных записей будет пуст и необходим CommitUpdates
// так как статусы "тронутых" записей не изменены
//(пример вставка записи: будет столько сколько раз
// был вызван ApplyUpdates. Неправильно это :-(, кто об этом знает
procedure CancelUpdates; // сброс внутренних флагов ADO (вставленных, измененных) и сброс удаленных
procedure CommitUpdates; // сброс внутренних флагов ADO (вставленных, измененных)
published
property UpdateObject: TADOUpdateSQL read FUpdateObject write SetUpdateObject;
end;
TADOUpdateSQL = class(TComponent)
private
FDataSet: TADOUpdateQuery;
FQueries: array[TUpdateKind] of TADOQuery;
FSQLText: array[TUpdateKind] of TStrings;
function GetQuery(UpdateKind: TUpdateKind): TADOQuery;
function GetSQLIndex(Index: Integer): TStrings;
procedure SetSQL(UpdateKind: TUpdateKind; Value: TStrings);
procedure SetSQLIndex(Index: Integer; Value: TStrings);
protected
function GetSQL(UpdateKind: TUpdateKind): TStrings; virtual;
function GetDataSet: TADOUpdateQuery; virtual;
procedure SetDataSet(ADataSet: TADOUpdateQuery); virtual;
procedure SQLChanged(Sender: TObject);
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Apply(UpdateKind: TUpdateKind); virtual; // не изменяет статусов записей
// при прямом вызове сначала SetParams, не изменяет статусов записей
procedure ExecSQL(UpdateKind: TUpdateKind);
procedure SetParams(UpdateKind: TUpdateKind); // заполнение параметров
property DataSet: TADOUpdateQuery read GetDataSet write SetDataSet;
property Query[UpdateKind: TUpdateKind]: TADOQuery read GetQuery;
property SQL[UpdateKind: TUpdateKind]: TStrings read GetSQL write SetSQL;
published
property ModifySQL: TStrings index 0 read GetSQLIndex write SetSQLIndex;
property InsertSQL: TStrings index 1 read GetSQLIndex write SetSQLIndex;
property DeleteSQL: TStrings index 2 read GetSQLIndex write SetSQLIndex;
end;
Скачать ADOComponent.zip (5.7 K)
[TADOQuery] [TUpdateSQL] [ADO] [Модификация данных на клиенте, UpdateSQL]
Обсуждение материала [ 19-10-2006 14:28 ] 18 сообщений |