Работа с готовыми базами данных

1. Проектирование интерфейса программы

Запустите Дельфи и создайте новое приложение. Поместите на форму следующие компоненты: MainMenu (из Standard), Table (из BDE), DataSourse (из DataAccess), OpenDialog (из Dialogs). Все эти компоненты не будут видны в режиме исполнения и на форме могут располагаться где угодно.

Настройте взаимодействие между вторым и третьим компонентами. Для этого выделите Table 1. В окне инспектора объектов найдите свойство DataBaseName и из выпадающего списка выберете псевдоним таблицы (Standard 2). В свойстве TableName выберете имя таблицы данных. Свойство Active измените на True (истина). Если все указанные операции были выполнены, то это означает, что связь компонента Table 1 с выбранной таблицей данных установлена успешно (рис. 9а). Выделите DataSourse 1 и выберете в свойстве DataSet в выпадающем списке Table 1 (рис. 9б).

Создайте главное меню с одним главным заголовком «Файл» с подзаголовком в нём «Открыть базу». Положите на форму компонент PageControl (из Win 32) для создания многостраничных приложений и растяните его на всю форму, оставив между верхом компонента и строкой меню полосу в 3 ряда точек. Щелкните правой кнопкой мыши на компоненте PageControl 1 и выберите левой кнопкой мыши подменю New Page. Всё поле PageControl 1 заполнит компонент TabSheet 1 (первая страница), с одноименной надписью на закладке сверху. Создайте вторую страницу аналогичным образом. Заголовки (Caption) этих элементов замените на другие, например, «Выборка» и «Вся база». Перейдите на страницу с названием «Вся база» и положите сверху на компонент TabSheet 2 компонент DBGrids (из Data Controls), изменив размеры на всю возможную площадь. В свойстве DataSourse выберите DataSourse 1. На второй странице появится вся база данных, таблица которой была указана в свойстве TableName компонента Table 1. Для запрета редактирования базы, нажав на + слева от свойства Options, свойству dgEditing установите False (рис.9в).

Рис. 9. Вид инспектора объектов после настройки для компонента.

Для выбора АВН, удовлетворяющих заданным условиям, перейдите на первую страницу с названием «Выборка». Поместите на форму компонент Panel (из Standard) и сотрите заголовок панели (свойство Caption сделайте пустым). Будем делать выбор АВН (силовых выключателей) по номинальному напряжению, номинальному току и току короткого замыкания. Поместите на форму три элемента ComboBox (см. рис.10) и в их свойстве Visible (видимый – это свойство определяет, что этот элемент будет видимым во время исполнения программы или не будет видимым) установите значение False (компонент не будет видим). Поместите на форму компонент GroupBox (из Standard) и измените его заголовок на «Выбор по условию». Поместите на него три компонента CheckBox, заголовки которых замените на «Номинальное напряжение, кВ», «Номинальный ток, А» и «Ном. Ток отключения, кА». Красиво и быстро расположить кнопки можно следующим образом. При нажатой кнопке Shift последовательно нажмите левой кнопкой мыши на каждый из трех компонентов типа CheckBox. Они все окажутся выделенными одновременно. Выберите команду Edit/Align… (выравнивание) и в появившемся окне выравнивания (Alignment) в элементе RadioGroup с заголовком Horizontal (горизонтальное) выберете тип выравнивания, например, Left Sides (по левой стороне). Указатель выбора (точка) переместится в нужную позицию, показывая, тип горизонтального выравнивания. Вертикальное выравнивание выберите, например, Space equally (равное расстояние между компонентами) и подтвердите выбор нажатием OK. Выделенные компоненты расположатся симметрично и будут идеально выровнены по левой стороне. При ручном выравнивании на эту операцию уйдет существенно больше времени с худшим качеством выравнивания. Соответствующие компоненты ComboBox расположите рядом с кнопками CheckBox. Положите на панель кнопку

Рис.10. Фрагмент страницы «Выборка». Рис.11. Выпадающие списки.

(Button) и замените её заголовок, например, на «Начать». Положите на эту страницу формы компонент строковой таблицы StringGrid (из Additional). Установите количество колонок 5 в свойстве ColCount (число колонок) и число строк в свойстве RowCount (число рядов). Установите линейки прокрутки в свойстве ScrollBars. Измените размеры таблицы. Положите на форму компонент ListBox.

2. Ввод кода программы

Дважды щелкните левой кнопкой мыши на форме. В заготовке процедуры кода впишите следующий код

procedure TForm 1 .FormCreate(Sender: TObject);

Begin

StringGrid1.Cells [0,0]:='Фирма производитель';

StringGrid1.Cells [1,0]:='Марка';

StringGrid1.Cells [2,0]:=' U ном, кВ';

StringGrid1.Cells [3,0]:=' I ном, А';

StringGrid1.Cells [4,0]:=' I ном.отключения, А';

end;

Этот фрагмент будет выводить заголовки полей строковой таблицы, в которую будут выводиться часть значений параметров АВН, удовлетворяющих заданным условиям.

Код загрузки новой таблицы базы данных можно написать следующим образом. В меню подайте команду Файл/Открыть базу и в заготовке процедуры кода впишите следующее

procedure TForm 1 .N 2 Click(Sender: TObject);

Begin

Table1.Active:=false;

if OpenDialog 1 .Execute then Table 1 .TableName:=OpenDialog 1 .FileName;

Table 1 .Active:=true;

end;

Изменение состояния видимости элемента выбора ComboBox в зависимости от условий выбора можно оформить следующим образом. Дважды щелкните левой кнопкой мыши на CheckBox 1 (Номинальное напряжение) и окне кода программы заполните процедуру как показано ниже

procedure TForm 1 .CheckBox 1 Click(Sender: TObject);

Begin

if CheckBox 1 .Checked

then

begin

ComboBox 1 .Visible:=true;

ComboBox 1 .ItemIndex:= 0

end

else ComboBox 1 .Visible:=false;

end;

В этом фрагменте одновременно с установкой видимости элемента выбора делается установка на выбор первого элемента из списка шкалы номинальных напряжений, которую следует ввести в список ComboBox 1. Аналогично следует ввести коды процедуры видимости второго и третьего условий выбора TForm 1 .CheckBox 2 Click и TForm 1 .CheckBox 3 Click. Их можно просто скопировать из первой процедуры и вставить во вторую и третью, изменив только номера 1 на 2 и 3, соответственно, во всех местах процедур кроме заголовков, которые автоматически возникают при двойном щелчке на CheckBox 2 и CheckBox 3. В элемент ComboBox 2 введите список номинальных токов выключателей, а в ComboBox 3 – список номинальных токов отключения. В режиме выполнения программы в каждом из элементов выбора можно выбрать соответствующие параметры АВН. Фрагмент выбора по всем трем условиям объединён на рис.11. Выбор может быть сделан только в режиме выполнения, когда этот элемент выбран для анализа содержимого базы данных по этому условию. Если галочка в соответствующем условии выбора не стоит, то и элемент не видим и выбор по нему никак не сделаешь.

Фрагмент программы для выбора АВН по условиям приведён ниже.

procedure TForm 1 .Button 1 Click(Sender: TObject);

function CheckConditions:boolean; {Функция проверки условий выбора}

var l 1 ,l 2 ,l 3 :boolean;

Begin

if CheckBox 1 .Checked = false {если нет проверки U ном}

then l 1 :=true {1 условие истинно – исключаться АВН по нему не будет}

elseif ComboBox 1 .ItemIndex= 0 {действия, если проверка по U ном включ.}

then l 1 := Table 1 .FieldValues [ 'Unom' ] <= 10.5

else if ComboBox 1 .ItemIndex = ComboBox 1 .ComponentCount- 1 then

l 1 := Table 1 .FieldValues [ 'Unom' ] > 1100

else l 1 := (Table 1 .FieldValues [ 'Unom' ] >

StrToFloat(ComboBox 1 .Items [ ComboBox 1 .ItemIndex- 1] )) and

(Table 1 .FieldValues [ 'Unom' ] <

StrToFloat(ComboBox 1 .Items [ ComboBox 1 .ItemIndex+ 1] ));

if CheckBox 2 .Checked = false {если нет проверки I ном}

then l 2 :=true {2 условие истинно – исключаться АВН по нему не будет}

//если проверка по I ном включена и если условие - номинальный ток

//из таблицы базы данных меньше заданного в компоненте ComboBox 2,

//то второму условию (l 2) присваивается значение ложь

else l 2 :=Table 1 .FieldValues [ 'Inom' ] >=

StrToFloat(ComboBox 2 .Items [ ComboBox 2 .ItemIndex ] );

if CheckBox 3 .Checked = false then l 3 :=true

else l 3 :=Table 1 .FieldValues [ 'Inomotkl' ] >=

StrToFloat(ComboBox 3 .Items [ ComboBox 3 .ItemIndex ] );

result:=l 1 and l 2 and l 3;

end;{function CheckCondition}

var l:boolean; i,j:integer;

Begin

for i:= 0 to 4 do for j:= 1 to 130 do StringGrid 1 .Cells [ i,j ] :='';

ListBox 1 .Clear;

Table 1 .First; {переход на первую запись базы данных}

j:= 1;

for i:= 1 to Table 1 .RecordCount do {цикл до конца базы}

begin

l:=CheckConditions;

if l then begin

StringGrid 1 .Cells [0 ,j ] :=Table 1 .FieldValues [ 'Firma' ];

ListBox 1 .Items.Add(Table 1 .FieldValues [ 'Marka' ] );

StringGrid 1 .Cells [1 ,j ] :=Table 1 .FieldValues [ 'Marka' ];

StringGrid 1 .Cells [2 ,j ] :=FloatToStrF(Table 1 .FieldValues [ 'Unom' ] ,ffFixed, 4,1 );

StringGrid 1 .Cells [3 ,j ] :=FloatToStrF(Table 1 .FieldValues [ 'Inom' ] ,ffFixed, 5,1 );

StringGrid 1 .Cells [4 ,j ] :=FloatToStrF(Table 1 .FieldValues [ 'Inomotkl' ] ,ffFixed, 4,1 );

j:=j+ 1;

end; { if }

Table 1 .Next; {переход на следующую запись базы данных}

end; {цикла просмотра базы}

end ;{procedure TForm 1 .Button 1 Click}

После ввода кода сохраните программу в своём отдельном каталоге для этой программы, подав команду File/Save all. Убедитесь, что в этом каталоге находятся не менее 6 файлов. Запустите программу на исполнение и выполните отладку программы. Выполните различные варианты выбора АВН по заданным условиям и убедитесь, что программа работает без сбоев.

При выполнении расчета баланса РУ при проектировании формы в свойстве DataBaseName компонента Table 1 следует выбрать Файлы Excel, а в свойстве TableName таблицу с получасовыми данными по различным присоединениям РУ. При выборе таблицы появится окно пароля доступа к базе (Database Login). Если пароль не был изменен, то попробуйте ввести в поле имени пользователя (User Name) имя создателей SYSDBA, а в поле пароля (Password) пароль разработчиков – masterkey. Если по указанному паролю вход не получается, то обратитесь к преподавателю. Разберитесь в структуре таблицы Excel и напишите код программы подсчета баланса РУ с выводом получасовых (3 минутных, часовых, суточных, месячных) значений на график. Проанализируйте полученные графики баланса электроэнергии РУ и сделайте вывод о потерях энергии и точности измерений. Дайте предложения по совершенствованию ситуации с учетом энергии по данному РУ.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: