Формирование нескольких баз данных, основная из которых – «Морские сражения», страница 4

thisform.CMBQueries.AddItem("Найти корабли, кол-во главных орудий которых было наибольшим среди кораблей с орудиями того же калибра")

thisform.CMBQueries.AddItem("Найти среднее кол-во главных орудий для класса ...")

thisform.CMBQueries.AddItem("Найти для каждого класса корабля значение даты спуска на воду первого корабля этого класса")

thisform.CMBQueries.AddItem("Найти для каждого класса кол-во кораблей этого класса, потопленных в морских сражениях")

Здесь программным путем, в список добавляются новые элементы – описания запросов.

Событие KeyPress() – одинаковое для объектов: поле ввода (TXTMan) и 3-х выпадающих списков (CMBMan1, CMBMan2, CMBMan3):

LPARAMETERS nKeyCode, nShiftAltCtrl

if nKeyCode==13

  thisform.CMDMan.Default=.t.

endif

Данная процедура обрабатывает нажатие клавиши Enter. Как результат, она передает управление процессом обработки запроса командной кнопке.

Событие TXTMan.GotFocus():

thisform.TXTMan.SelStart = 0

thisform.TXTMan.SelLength = LEN(TRIM(thisform.TXTMan.Text))

При передачи фокуса полю ввода, содержащийся в нем текст выделяется подсветкой.

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

Запросы

·  Вывести все корабли

Выпадающий список с запросами - CMBQueries.Click:

  case thisform.CMBQueries.ListIndex==1

    thisform.GRDMList.all

    SELECT Types.class,;

      Battleships.name, Battleships.water_cap, Battleships.fire1_diameter,;

      Battleships.fire1_num, Battleships.fire2_diameter,;

      Battleships.fire2_num, Battleships.fire3_diameter,;

      Battleships.fire3_num, country.country,;

      Battleships.date_creation;

FROM  ships!battleships INNER JOIN ships!types  ON  Battleships.class_id = Types.class_id;

INNER JOIN ships!country ON Battleships.country_id = country.country_id;

      ORDER BY Battleships.name;

      INTO TABLE Temp;

      NOCONSOLE

    thisform.GRDMList.RecordSourceType = 0

    thisform.GRDMList.RecordSource = 'Temp.dbf'

    thisform.LBLMan.Visible=.f.

    thisform.TXTMan.Visible=.f.

    thisform.CMDMan.Visible=.f.

    thisform.LBLMan2.Visible=.f.

    thisform.CMBMan1.Visible=.f.

    thisform.CMBMan2.Visible=.f.

    thisform.CMBMan3.Visible=.f.

·  Найти корабли, обладающие наивысшей огневой мощью.

Выпадающий список с запросами - CMBQueries.Click:

  case thisform.CMBQueries.ListIndex==6

    SELECT Types.class, Battleships.name, Battleships.water_cap,;

Battleships.fire1_diameter,Battleships.fire1_num,; Battleships.fire2_diameter,Battleships.fire2_num,; Battleships.fire3_diameter,Battleships.fire3_num,;

MAX(Battleships.fire1_diameter*Battleships.fire1_num+; Battleships.fire2_diameter*Battleships.fire2_num+;

Battleships.fire3_diameter*Battleships.fire3_num),;

      country.country, Battleships.date_creation;

FROM  ships!battleships INNER JOIN ships!types ON  Battleships.class_id = Types.class_id;

INNER JOIN ships!country ON Battleships.country_id = country.country_id;

    INTO TABLE Temp;

    NOCONSOLE

    thisform.GRDMList.maxfire  

    thisform.GRDMList.RecordSourceType = 0

    thisform.GRDMList.RecordSource = 'Temp.dbf'

    thisform.LBLMan.Visible=.f.

    thisform.TXTMan.Visible=.f.

    thisform.CMDMan.Visible=.f.

    thisform.LBLMan2.Visible=.f.

    thisform.CMBMan1.Visible=.f.

    thisform.CMBMan2.Visible=.f.

    thisform.CMBMan3.Visible=.f.

·  Найти наименования стран, корабли которых принимали участие в указанном сражении.

Выпадающий список с запросами - CMBQueries.Click:

  case thisform.CMBQueries.ListIndex==17

    thisform.LBLMan.Caption="В сражении:"

    thisform.LBLMan.Visible=.t.

    thisform.TXTMan.Visible=.f.

    thisform.CMDMan.Visible=.t.

    thisform.LBLMan2.Visible=.f.

    thisform.CMBMan1.Visible=.f.