Пример приложения 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.

 


Знаете ли Вы, почему "черные дыры" - фикция?
Согласно релятивистской мифологии, "чёрная дыра - это область в пространстве-времени, гравитационное притяжение которой настолько велико, что покинуть её не могут даже объекты, движущиеся со скоростью света (в том числе и кванты самого света). Граница этой области называется горизонтом событий, а её характерный размер - гравитационным радиусом. В простейшем случае сферически симметричной чёрной дыры он равен радиусу Шварцшильда".
На самом деле миф о черных дырах есть порождение мифа о фотоне - пушечном ядре. Этот миф родился еще в античные времена. Математическое развитие он получил в трудах Исаака Ньютона в виде корпускулярной теории света. Корпускуле света приписывалась масса. Из этого следовало, что при высоких ускорениях свободного падения возможен поворот траектории луча света вспять, по параболе, как это происходит с пушечным ядром в гравитационном поле Земли.
Отсюда родились сказки о "радиусе Шварцшильда", "черных дырах Хокинга" и прочих безудержных фантазиях пропагандистов релятивизма.
Впрочем, эти сказки несколько древнее. В 1795 году математик Пьер Симон Лаплас писал:
"Если бы диаметр светящейся звезды с той же плотностью, что и Земля, в 250 раз превосходил бы диаметр Солнца, то вследствие притяжения звезды ни один из испущенных ею лучей не смог бы дойти до нас; следовательно, не исключено, что самые большие из светящихся тел по этой причине являются невидимыми." [цитата по Брагинский В.Б., Полнарёв А. Г. Удивительная гравитация. - М., Наука, 1985]
Однако, как выяснилось в 20-м веке, фотон не обладает массой и не может взаимодействовать с гравитационным полем как весомое вещество. Фотон - это квантованная электромагнитная волна, то есть даже не объект, а процесс. А процессы не могут иметь веса, так как они не являются вещественными объектами. Это всего-лишь движение некоторой среды. (сравните с аналогами: движение воды, движение воздуха, колебания почвы). Подробнее читайте в FAQ по эфирной физике.

НОВОСТИ ФОРУМА

Форум Рыцари теории эфира


Рыцари теории эфира
 10.11.2021 - 12:37: ПЕРСОНАЛИИ - Personalias -> WHO IS WHO - КТО ЕСТЬ КТО - Карим_Хайдаров.
10.11.2021 - 12:36: СОВЕСТЬ - Conscience -> РАСЧЕЛОВЕЧИВАНИЕ ЧЕЛОВЕКА. КОМУ ЭТО НАДО? - Карим_Хайдаров.
10.11.2021 - 12:36: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от д.м.н. Александра Алексеевича Редько - Карим_Хайдаров.
10.11.2021 - 12:35: ЭКОЛОГИЯ - Ecology -> Биологическая безопасность населения - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ПРАВОСУДИЯ.НЕТ - Карим_Хайдаров.
10.11.2021 - 12:34: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вадима Глогера, США - Карим_Хайдаров.
10.11.2021 - 09:18: НОВЫЕ ТЕХНОЛОГИИ - New Technologies -> Волновая генетика Петра Гаряева, 5G-контроль и управление - Карим_Хайдаров.
10.11.2021 - 09:18: ЭКОЛОГИЯ - Ecology -> ЭКОЛОГИЯ ДЛЯ ВСЕХ - Карим_Хайдаров.
10.11.2021 - 09:16: ЭКОЛОГИЯ - Ecology -> ПРОБЛЕМЫ МЕДИЦИНЫ - Карим_Хайдаров.
10.11.2021 - 09:15: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Екатерины Коваленко - Карим_Хайдаров.
10.11.2021 - 09:13: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вильгельма Варкентина - Карим_Хайдаров.
Bourabai Research - Технологии XXI века Bourabai Research Institution