Всем привет.
В наличии имеется 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;
|
Заранее спасибо. |