Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SQL, Изменение данных таблиц. 
:(
    Опции темы
nightlife
Дата 28.5.2012, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 12.4.2009

Репутация: нет
Всего: нет



Всем привет.

В наличии имеется 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;
    


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

Это сообщение отредактировал(а) nightlife - 28.5.2012, 10:46
PM MAIL   Вверх
Akella
Дата 30.5.2012, 07:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



и где вопрос?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0837 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.