Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > SQL, Изменение данных таблиц.


Автор: nightlife 28.5.2012, 09:19
Всем привет.

В наличии имеется 2 таблицы: Students, Журнал.

Задание было таково, с определёнными условиями вытащить данные из обоих таблиц. Если вкратце, из таблицы Students ФИО, из таблицы Журнал, оценки по определённому предмету за определённый месяц, определённой группы. Связь идет по N_s.

Получаем что-то в духе:

FIO  1 2 3 4 5 6 ..... (где 1, 2 и т.д. день месяца).

Позже было надо задание, по которому необходимо сделать возможность изменения и вписывание новых оценок. Возник вопрос, как сделать, напрямую через DBGrid само собой нельзя, значит надо через ADOQuery.

Но вписывать новые данные через Edit'ы не приветствуется.

Решил сделать через StringGrid, собственно тут и завис, времени в обрез, поэтому и обращаюсь.

Запрос, который сделал для вывода в DBGrid:

Код

procedure TMagazine.Button1Click(Sender: TObject);
begin
  Connection.ADOQueryMagazine.Close;
  Connection.ADOQueryMagazine.SQL.Clear;
  Connection.ADOQueryMagazine.SQL.Add('SELECT Фамилия, ');
  Connection.ADOQueryMagazine.SQL.Add('[1], [2], [3], [4], [5], [6], [7], [8], [9], [10], ');
  Connection.ADOQueryMagazine.SQL.Add('[11], [12], [13], [14], [15], [16], [17], [18], [19], [20], ');
  Connection.ADOQueryMagazine.SQL.Add('[21], [22], [23], [24], [25], [26], [27], [28], [29], [30], ' );
  Connection.ADOQueryMagazine.SQL.Add('[31] ');
  Connection.ADOQueryMagazine.SQL.Add('FROM  ');
  Connection.ADOQueryMagazine.SQL.Add(' (SELECT s.Fam as [Фамилия], DAY([Дата]) as pole, [Оценка] ');
  Connection.ADOQueryMagazine.SQL.Add('FROM ');
  Connection.ADOQueryMagazine.SQL.Add('Students s ');
  Connection.ADOQueryMagazine.SQL.Add('INNER JOIN [Журнал] j ON s.N_s = j.N_s ');
  Connection.ADOQueryMagazine.SQL.Add('WHERE YEAR([Дата]) = 2011 AND MONTH([Дата]) = '''+Edit1.Text+''' ');
  Connection.ADOQueryMagazine.SQL.Add('AND n_gr = '''+ComboBox1.Text+''' AND Lesson = '''+ComboBox2.Text+''' ');
  Connection.ADOQueryMagazine.SQL.Add(' ) as sourcet  ');
  Connection.ADOQueryMagazine.SQL.Add('PIVOT ');
  Connection.ADOQueryMagazine.SQL.Add('(MIN([Оценка]) ');
  Connection.ADOQueryMagazine.SQL.Add('FOR pole IN ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], ');
  Connection.ADOQueryMagazine.SQL.Add('[11], [12], [13], [14], [15], [16], [17], [18], [19], [20], ');
  Connection.ADOQueryMagazine.SQL.Add('[21], [22], [23], [24], [25], [26], [27], [28], [29], [30], ');
  Connection.ADOQueryMagazine.SQL.Add('[31])) as pivott');
  Connection.ADOQueryMagazine.Open;
  Connection.ADOQueryMagazine.Requery();
end;


Необходимо соответственно выводить сей запрос в StringGrid и вписывать изменение оценок в таблицу Журнал. (изменение соответственно производятся пользователем вручную и вписываются после нажатии на кнопку)

Проставление оценок я полагаю будут выглядеть как-то так:
Код

StringGrid1.RowCount:=Connection.ADOQuery.RecordCount + 1; //Вписываем Фамилии
  Connection.ADOQuery.First;
    for i:= 1 to StringGrid1.RowCount do
        begin
            StringGrid1.Cells[0,i]:=Connection.ADOQuery.FieldByName('Фамилия').AsString;
            Connection.ADOQuery2.Next;
        end;
        
    for k:= 1 to StringGrid1.RowCount                        //Вписываем оценки
        for m:= 1 to 31
            begin
                StringGrid1.Cells[m,k]:=Connection.ADOQuery.FieldByName('Оценка').AsString;
                Connection.ADOQuery2.Next;
            end;
    


Заранее спасибо.

Автор: Akella 30.5.2012, 07:29
и где вопрос?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)