Листинг 17.1. Пример приложения dbExpress •с редактируемыми наборами данных

implementation {$R *.dfm}

procedure TfmDemoDBX. FormCreate (Sender: TObj ect) ;
begin tblVens.Open;
cdsCusts.Open;
end;
procedure TfmDemoDBX.FormDestroy(Sender: TObject);
begin
tblVens.Close;
cdsCusts.Close ;
end;

(Editing feature with updating query}

procedure TfmDemoDBX. tblVensAfter Scroll (Da taSet: TDataSet) ;
begin
eoVenNo.Text := tblVens.FieldByName('VEND0RN0').AsString;
edVenName.Text := tblVens.FieldByName('VENDORNAME').AsString edVenAdr,Text := tblVens.FieldByName('ADDRESS1').AsString;
edVenCity.Text := tblVens.FieldByName('CITY').AsString;
edVenPhone.Text := tblVens.FieldByName {'PHONE') .AsString;
end;
procedure TfmDemoDBX. sbCancelClick (Sender: TObject) ;
begin
tblVens.First;
end;
procedure TfmDemoDBX. sbNextClick( Sender: TObject) ;
begin
tblVens.Next;
end;

procedure TfmDemoDBX. sbPostClick (Sender: TObject) ; begin with quUpdate do

try

ParamByName ('Idx').AsInteger: = tblVens.FieldByName('VENDORNO').AsInteger;
ParamByName('No').AsString := edVeriNo.Text;
ParamByName('Name').AsString := edVenName.Text,■
ParamByName('Adr').AsString := edVenAdr.Text;
ParamByName('City').AsString := edVenCity.Text;
ParamByName('Phone').AsString := edVenPhone.Text;
ExecSQL;

except

MessageDlgt'Vendor''s info post error', mtError, [mbOK], 0) tblVens.First;
end;
end;

{Fditing feature with cached updates}

procedure TfmDemoDBX. cdsCustsAf terPost (DataSet: TCataSet) ;
begin
cdsCusts.ApplyUpdates(-1);
end;
procedure TfmDemoDBX. cdsCustsReconcileError (DataSet: TCustomClientDataSet;
E: EReconcileError;
UpxfeteKind: TUpdateKind;
var Action: TReconcileAction);
begin
MessageDlg('Customer''s info post error1, mtError, [rribOK], 0);
cdsCusts.CancelUpdates;
end;

end.

Для просмотра и редактирования выбраны таблицы Vendors и Customers. Первая таблица подключена через настроенное соединение (компонент cnMast) к компоненту tbivens типа TSQLTable. Значение пяти полей отображается в обычных компонентах TEdit, т. к. компоненты отображения данных, связанные с компонентом dbExpress через компонент TDataSource, работают только в режиме просмотра, не позволяя редактировать данные (рис. 17.2).

Использование метода-обработчика AfterScroll позволило легко решить проблему заполнения компонентов TEdit при навигации по набору данных. Для сохранения сделанных изменений (нажатие на кнопку sbPost) используется компонент quUpdate типа TSQLQuery. В параметрах запроса передаются текущие значения полей из компонентов TEdit. Так как в этом случае работает однонаправленный курсор, проблема обновления набора данных после выполнения модифицирующего запроса не возникает и набор данных обновляется только при вызове метода First компонента tbivens.

Вторая таблица подключена через тот же компонент cnMast к компоненту cdsCusts типа TSimpleDataSet. Он работает в табличном режиме. Данные отображаются в обычном компоненте TDBGrid

Программирование в Delphi 7

Рис. 17.2. Окно приложения Demo dbExpress

Для сохранения сделанных изменений здесь использован метод AppiyUpdates, размещенный в методе-обработчике AfterPost, когда изменения уже попали в локальный кэш. Метод-обработчик вызывается каждый раз при переходе в компонент TDBGrid на новую строку.


⇐ Предыдущая страница| |Следующая страница ⇒

Программирование в Delphi 7



Новости за месяц

  • Июнь
    2017
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс