Самоучитель по Delphi 7 для профессионалов


Пример приложения ADO



Теперь попробуем применить на практике представленную в этой главе информацию о реализации ADO в Delphi. В качестве примера создадим простое приложение ADO Demo, которое "умеет" отображать пару таблиц БД, сохранять изменения при помощи групповых операций, сортировать записи и устанавливать фильтры на выбранные записи (рис. 19.9).

Рис. 19.9. Главное окно приложения ADO Demo

В качестве источника данных выберем файлы dBase, имеющиеся в демонстрационной базе данных Delphi \Program Files\Common Files\Borland Shared \Data. Для использования в приложении выберем две таблицы: INDUSTRY и MASTER. Они связаны между собой внешним ключом по полям IND_CODE и INDUSTRY соответственно.

Таблицу INDUSTRY можно редактировать, она инкапсулирована в компоненте tbiIndustry типа TADOTable и отображается в левом компоненте TDBGrid. А таблица MASTER инкапсулирована в компоненте tbIMaster, предназначена только для просмотра. Эти два компонента связаны отношением "ОДИН-КО-МНОГИМ" При помощи свойств MasterSource И MasterFields.

Листинг 19.2. Секция implementation модуля uMain приложения ADO Demo 

implementation

uses IniFiles, FileCtrl;



const slniFileName: String = 'ADODemo.ini';

sEmptyDefDB: String = 'Database path is empty';

sEmptyFilter: String = 'Records for filter is not selected';

{$R *.dfm}

procedure TfmMain.FormShow(Sender: TObject);

 begin

with TIniFile.Create(slniFileName) do

 try

DefDBStr := ReaDString('DefDB', 'DefDBStr1, "); 

edDefDB.Text := DefDBStr;

 finally

Free; end;

SetLength(Bookmarks, 0);

  end;

procedure TfmMain.FormClose(Sender: TObject; var Action: TCloseAction);

 begin

with TIniFile.Create(slniFileName) do

 try

WriteStringCDefDB', 'DefDBStr', edDefDB.Text); 

finally

Free ;

  end; 

end;

procedure TfmMain.sbDefDBClick(Sender: TObject);

 begin if SelectDirectory(DefDBStr, [], 0)

then edDefDB.Text := DefDBStr;

  end;

procedure TfmMain.tbConnectClick(Sender: TObject); 




begin
ADOConn.Close;
ADOConn.DefaultDatabase := ''; if DefDBStr = '' then
 begin
MessageDlg(sEmptyDefDB, mtError, [mbOK], 0);
Abort;
 end 
else 
begin
ADOConn.DefaultDatabase := DefDBStr;
ADOConn.Open; 
end;
  end;
procedure TfmMain.tbSaveClick(Sender: TObject);
 begin
tbllndustry.UpdateBatch(); 
end;
procedure TfmMain.tbFilterClick(Sender: TObject); 
var i: Integer;
 begin
if dbglndustry.SelectedRows.Count > 0 then
 begin
SetLength(Bookmarks, dbglndustry.SelectedRows.Count);
 for i := 0 to dbglndustry.SelectedRows.Count — 1 do
 begin
Bookmarks[i].VType := vtPointer;
Bookmarks[i].VPointer := pointer(dbglndustry.SelectedRows[i]);
  end;
tbllndustry.FilterOnBookmarks(Bookmarks); 
end else
MessageDlgtsEmptyFilter, mtWarning, [mbOK], 0); 
end;
procedure TfmMain.tbUnFilterClick(Sender: TObject); 
begin
tbllndustry.Filtered := False;
dbglndustry.SelectedRows.Clear;
  end;
procedure TfmMain.dbglndustryTitleClick(Column: TColumn); 
begin if tbllndustry.Active then
if (Pos(Column.FieldName, tbllndustry.Sort) > 0
}and(Pos('ASC', tbllndustry.Sort) > 0)
then tbllndustry.Sort := Column.FieldName + ' DESC' else tbllndustry.Sort := Column.FieldName + ' ASC';
  end;
procedure TfmMain.ADOConnAfterConnect(Sender: TObject);
var i: Integer;
begin
for i := 0 to adoConn.DataSetCount - 1 do ADOConn.DataSets [i] .Open/end;
procedure TfmMain.ADOConnBeforeDisconnect(Sender: TObject);
var i: Integer;
begin
for i := 0 to adoConn.DataSetCount — 1 do ADOConn.DataSets[i].Close;
  end;
end.
 

Содержание раздела