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

    thisform.CMBMan2.Visible=.f.

    thisform.CMBMan3.Visible=.t.

В результате работы этой процедуры, на форме появляются надпись "В сражении", выпадающий список, содержащий названия всех сражений и кнопка "Вывести". Для вывода результата нужно выбрать в списке нужный элемент и нажать на кнопку "Вывести", либо клавишу Enter.

Кнопка "Вывести" - CMDMan.Click:

case thisform.CMBQueries.ListIndex==17

  SELECT battles.place, battles.b_date, Battleships.name, battles.damage, battles.drawn, Country.country;

   FROM  ships!battles INNER JOIN ships!battleships;

      INNER JOIN ships!country ;

     ON  Battleships.country_id = Country.country_id ;

     ON  battles.ship_id = Battleships.ship_id;

     WHERE battles.battle_id=thisform.CMBMan3.ListIndex-1;

  ORDER BY battles.place, Country.country, Battleships.name;

  INTO TABLE Temp;

  NOCONSOLE

  thisform.GRDMList.countriesinbattle

  thisform.GRDMList.RecordSourceType=0

  thisform.GRDMList.RecordSource='Temp.dbf'

·  Вывести наименования стран, понесших наибольшие потери из-за того, что их корабли были потоплены и повреждены.

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

  case thisform.CMBQueries.ListIndex==18

    SELECT country.country_id;

    FROM ships!country;

    INTO ARRAY countries;

    NOCONSOLE

    SELECT country.country;

    FROM ships!country;

    INTO ARRAY countries_name;

    NOCONSOLE

    n=ALEN(countries)

    DIMENSION c[n,n]

    FOR i=1 TO n

    SELECT COUNT(battles.drawn);

     FROM  ships!battles INNER JOIN ships!battleships ;

       ON  battles.ship_id = Battleships.ship_id;

     WHERE battles.drawn = .t. AND Battleships.country_id=countries[i];

     INTO ARRAY drawn

    SELECT COUNT(battles.damage);

     FROM  ships!battles INNER JOIN ships!battleships ;

       ON  battles.ship_id = Battleships.ship_id;

     WHERE battles.damage = .t. AND Battleships.country_id=countries[i];

     INTO ARRAY damage

    c[i,1]=countries_name[i]

    c[i,2]=drawn[1]+damage[1]

    ENDFOR

    CREATE TABLE Temp4 FREE (col1 C(30), col2 N(3), col3 N(3))

    APPEND FROM ARRAY c

    SELECT col1, MAX(Temp4.col2) FROM Temp4;

    INTO TABLE Temp;

    NOCONSOLE

    thisform.GRDMList.countriesmaxdamage

    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.

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

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

  case thisform.CMBQueries.ListIndex==16

    thisform.LBLMan.Caption="Не менее:"

    thisform.LBLMan.Visible=.t.

    thisform.TXTMan.Visible=.t.

    thisform.CMDMan.Visible=.t.

    thisform.LBLMan2.Visible=.f.

    thisform.CMBMan1.Visible=.f.

    thisform.CMBMan2.Visible=.f.

    thisform.CMBMan3.Visible=.f.

В результате работы этой процедуры, на форме появляются надпись "Не менее", поле ввода данных и кнопка "Вывести". Для вывода результата нужно ввести данные и нажать на кнопку "Вывести", либо клавишу Enter.

Кнопка "Вывести" - CMDMan.Click:

case thisform.CMBQueries.ListIndex==16

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

    Battleships.fire1_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;

  WHERE Battleships.fire1_num=>val(thisform.TXTMan.Text);

  ORDER BY Battleships.fire1_num;

  INTO TABLE Temp;

  NOCONSOLE

  thisform.GRDMList.numfiremore

  thisform.GRDMList.RecordSourceType=0

  thisform.GRDMList.RecordSource='Temp.dbf'