Версия для печати


Компонент TADOUpdateSQL
http://www.delphikingdom.com/asp/viewitem.asp?catalogID=576

Алексей Горкуша
дата публикации 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)