Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.06.2009, 16:31   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
Восклицание Проблемка с результатом запроса в БД

Уважаемые коллеги! Помогите с проблемой и постарайтесь правильно понять мою проблему . Когда я внес первого ученика, то было все нормально. Добавилось только один раз предмет и другие показатели. А когда я добавил этого же ученика, но уже по другому предмету и с другими результатами, то при запросе у меня отображается неправильно строка. Должен отображаться только результат для того предмета, который я выбрал из списка, и, если этот ученик изучал этот предмет и получал по нему какие-либо результаты, то должна показаться только строка, содержащая результат по этому предмету. На скрине, первая строка отображалась правильно до тех пор, когда я внес ученика в первый раз, а второй строки по идее быть не должно при результате. Но получается проблема в том плане, что когда я выбираю, например, предмет «Алгебра» для этого же ученика, то должна показаться только строка с результатом для этого предмета, а получается, что меняется только название предмета, а результаты остаются те же. А получается, что он все результаты, по всем предметам сопоставляет для ученика. Так не должно быть. Должна показываться только строка для выбранного предмета. У кого какие мысли? Кто что может предложить? Если нужно выложить куски нужного кода, то говорите какие. А то я уже голову сломал и не могу этот косяк исправить. Вот такая вот головоломка. СУБД у меня Paradox. Технология – BDE.
Изображения
Тип файла: jpg Безымянный.jpg (13.4 Кб, 170 просмотров)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 13.06.2009, 16:40   #2
DenisWilson
Новичок
Джуниор
 
Регистрация: 13.06.2009
Сообщений: 7
По умолчанию

У Вас с гридом связан TQuery?
DenisWilson вне форума Ответить с цитированием
Старый 13.06.2009, 16:50   #3
Evgeniy26
Форумчанин
 
Аватар для Evgeniy26
 
Регистрация: 29.05.2009
Сообщений: 384
По умолчанию

Покажи код, как ты отбираешь необходимые записи.
Evgeniy26 вне форума Ответить с цитированием
Старый 13.06.2009, 16:51   #4
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Грид связан с DataSource-ом, а DataSource связан с Query_ITOG...
Вот код (чуть ниже идут проверки на выбранные условия поиска):
Код:
procedure TForm2.BitBtn5Click(Sender: TObject);
var
WHERE, DELIM, i:string;
begin
 with  Form2.Query_ITOG do
 begin
  Form2.Query_ITOG.SQL.Clear;
  Form2.Query_ITOG.SQL.Add('SELECT DISTINCT LAST_NAME,FIRST_NAME,OTCHESTVO,Predmet,Chetvert,GOD,DVOEK,TROEK,CHETVEROK,PYTEROK,KO,SB,KY,Y,O,CHO');
  Form2.Query_ITOG.SQL.Add('FROM rezult.db,infa.db,period.db,chetverty.db,predmety.db');
  Form2.Query_ITOG.Active:=True;
  DELIM:='';
  WHERE:='';

{LAST_NAME}
  Form2.DBGridEh7.Columns[0].Visible:= Form2.CheckBox46.Checked;
{FIRST_NAME}
  Form2.DBGridEh7.Columns[1].Visible:= Form2.CheckBox47.Checked;
{OTCHESTVO}
  Form2.DBGridEh7.Columns[2].Visible:= Form2.CheckBox48.Checked;
{DVOEK}
  Form2.DBGridEh7.Columns[6].Visible:= Form2.CheckBox4.Checked;
{TROEK}
  Form2.DBGridEh7.Columns[7].Visible:= Form2.CheckBox5.Checked;
{CHETVEROK}
  Form2.DBGridEh7.Columns[8].Visible:= Form2.CheckBox6.Checked;
{PYTEROK}
  Form2.DBGridEh7.Columns[9].Visible:= Form2.CheckBox7.Checked;
{KO}
  Form2.DBGridEh7.Columns[10].Visible:= Form2.CheckBox8.Checked;
{SB}
  Form2.DBGridEh7.Columns[11].Visible:= Form2.CheckBox9.Checked;
{KY}
  Form2.DBGridEh7.Columns[12].Visible:= Form2.CheckBox10.Checked;
{Y}
  Form2.DBGridEh7.Columns[13].Visible:= Form2.CheckBox11.Checked;
{O}
  Form2.DBGridEh7.Columns[14].Visible:= Form2.CheckBox13.Checked;
{CHO}
  Form2.DBGridEh7.Columns[15].Visible:= Form2.CheckBox12.Checked;
{Predmet}
  Form2.DBGridEh7.Columns[3].Visible:= Form2.CheckBox14.Checked;
{Chetvert}
  Form2.DBGridEh7.Columns[4].Visible:= Form2.CheckBox15.Checked;
{GOD}
  Form2.DBGridEh7.Columns[5].Visible:= Form2.CheckBox16.Checked;
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

Последний раз редактировалось artemavd; 13.06.2009 в 16:55.
artemavd вне форума Ответить с цитированием
Старый 13.06.2009, 16:55   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Продолжение кода:
Код:
 if CheckBox15.Checked = True then
    begin
     WHERE:=WHERE+DELIM+'Chetvert = ' + QuotedStr(Form2.DBLookupComboBox3.Text);
     DELIM:=' AND '
    end;

  if CheckBox14.Checked = True then
    begin
     WHERE:=WHERE+DELIM+'Predmet = ' + QuotedStr(Form2.DBLookupComboBox2.Text);
     DELIM:=' AND '
    end;

  if CheckBox16.Checked = True then
    begin
     WHERE:=WHERE+DELIM+'GOD = ' + Form2.Edit9.Text;
     DELIM:=' AND '
    end;

  if CheckBox21.Checked = True then
    begin
     WHERE:=WHERE+DELIM+'DVOEK ' + Form2.ComboBox1.Text + Form2.Edit5.Text;
     DELIM:=' AND '
    end;

  if CheckBox22.Checked = True then
    begin
     WHERE:=WHERE+DELIM+'TROEK ' + Form2.ComboBox2.Text + Form2.Edit6.Text;
     DELIM:=' AND '
    end;

  if CheckBox23.Checked = True then
    begin
     WHERE:=WHERE+DELIM+'CHETVEROK ' + Form2.ComboBox3.Text + Form2.Edit7.Text;
     DELIM:=' AND '
    end;

  if CheckBox24.Checked = True then
    begin
     WHERE:=WHERE+DELIM+'PYTEROK ' + Form2.ComboBox4.Text + Form2.Edit10.Text;
     DELIM:=' AND '
    end;

  if CheckBox25.Checked = True then
    begin
     WHERE:=WHERE+DELIM+'KO ' + Form2.ComboBox5.Text + Form2.Edit11.Text;
     DELIM:=' AND '
    end;

  if CheckBox26.Checked = True then
    begin
     WHERE:=WHERE+DELIM+'SB ' + Form2.ComboBox6.Text + Form2.Edit12.Text;
     DELIM:=' AND '
    end;

  if CheckBox27.Checked = True then
    begin
     WHERE:=WHERE+DELIM+'KY ' + Form2.ComboBox7.Text + Form2.Edit13.Text;
     DELIM:=' AND '
    end;

  if CheckBox28.Checked = True then
    begin
     WHERE:=WHERE+DELIM+'Y ' + Form2.ComboBox8.Text + Form2.Edit14.Text;
     DELIM:=' AND '
    end;

  if CheckBox29.Checked = True then
    begin
     WHERE:=WHERE+DELIM+'O ' + Form2.ComboBox9.Text + Form2.Edit15.Text;
     DELIM:=' AND '
    end;

  if CheckBox30.Checked = True then
    begin
     WHERE:=WHERE+DELIM+'CHO ' + Form2.ComboBox10.Text + Form2.Edit16.Text;
     DELIM:=' AND '
    end;

  if CheckBox35.Checked = True then
    begin
     WHERE:=WHERE+DELIM+'DVOEK ' + Form2.ComboBox1.Text + Form2.Edit5.Text +
                        ' AND DVOEK ' + Form2.ComboBox11.Text + '''' +
                        Form2.Edit18.Text + '''';
     DELIM:=' AND '
    end;

  if CheckBox39.Checked = True then
    begin
     WHERE:=WHERE+DELIM+'TROEK ' + Form2.ComboBox2.Text + Form2.Edit6.Text +
                        ' AND TROEK ' + Form2.ComboBox12.Text + '''' +
                        Form2.Edit19.Text + '''';
     DELIM:=' AND '
    end;

  if CheckBox37.Checked = True then
    begin
     WHERE:=WHERE+DELIM+'CHETVEROK ' + Form2.ComboBox3.Text + Form2.Edit7.Text +
                        ' AND CHETVEROK ' + Form2.ComboBox13.Text + '''' +
                        Form2.Edit20.Text + '''';
     DELIM:=' AND '
    end;

  if CheckBox38.Checked = True then
    begin
     WHERE:=WHERE+DELIM+'PYTEROK ' + Form2.ComboBox4.Text + Form2.Edit10.Text +
                        ' AND PYTEROK ' + Form2.ComboBox14.Text + '''' +
                        Form2.Edit21.Text + '''';
     DELIM:=' AND '
    end;

  if CheckBox40.Checked = True then
    begin
     WHERE:=WHERE+DELIM+'KO ' + Form2.ComboBox5.Text + Form2.Edit11.Text +
                        ' AND KO ' + Form2.ComboBox15.Text + '''' +
                        Form2.Edit22.Text + '''';
     DELIM:=' AND '
    end;

  if CheckBox41.Checked = True then
    begin
     WHERE:=WHERE+DELIM+'SB ' + Form2.ComboBox6.Text + Form2.Edit12.Text +
                        ' AND SB ' + Form2.ComboBox16.Text + '''' +
                        Form2.Edit23.Text + '''';
     DELIM:=' AND '
    end;

  if CheckBox42.Checked = True then
    begin
     WHERE:=WHERE+DELIM+'KY ' + Form2.ComboBox7.Text + Form2.Edit13.Text +
                        ' AND KY ' + Form2.ComboBox17.Text + '''' +
                        Form2.Edit24.Text + '''';
     DELIM:=' AND '
    end;

  if CheckBox43.Checked = True then
    begin
     WHERE:=WHERE+DELIM+'Y ' + Form2.ComboBox8.Text + Form2.Edit14.Text +
                        ' AND Y ' + Form2.ComboBox18.Text + '''' +
                        Form2.Edit25.Text + '''';
     DELIM:=' AND '
    end;

  if CheckBox44.Checked = True then
    begin
     WHERE:=WHERE+DELIM+'O ' + Form2.ComboBox9.Text + Form2.Edit15.Text +
                        ' AND O ' + Form2.ComboBox19.Text + '''' +
                        Form2.Edit26.Text + '''';
     DELIM:=' AND '
    end;

  if CheckBox45.Checked = True then
    begin
     WHERE:=WHERE+DELIM+'CHO ' + Form2.ComboBox10.Text + Form2.Edit16.Text +
                        ' AND CHO ' + Form2.ComboBox20.Text + '''' +
                        Form2.Edit27.Text + '''';
     DELIM:=' AND '
    end;
  if WHERE <> '' then
    begin
     Form2.Query_ITOG.SQL.Add('WHERE '+ WHERE);
    end;
  Open;
 end;
end;
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 13.06.2009, 17:05   #6
Evgeniy26
Форумчанин
 
Аватар для Evgeniy26
 
Регистрация: 29.05.2009
Сообщений: 384
По умолчанию

У тебя на скрине две "истории"? Конечно он будет выводить все записи.
Evgeniy26 вне форума Ответить с цитированием
Старый 13.06.2009, 17:10   #7
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
Сообщение от Evgeniy26 Посмотреть сообщение
У тебя на скрине две "истории"? Конечно он будет выводить все записи.
Дык в том то и дело, что не должно быть так). Вторая то строка относится к другому предмету. К Алгебре. Должна отображаться только первая. Понятно?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 13.06.2009, 17:39   #8
Evgeniy26
Форумчанин
 
Аватар для Evgeniy26
 
Регистрация: 29.05.2009
Сообщений: 384
По умолчанию

Сформируй таблицу подзапросом для студента и предмета (что бы он работал правильно без оценок). Потом INNER JOIN - oм прикрути оценки. Типа этого Select * From (подзапрос студента и предмета) p Inner Join (Оценки) o On o.Index = p.Index.Ты хранишь в таблице оценки индекс предмета и студента к которому они относятся?

Последний раз редактировалось Evgeniy26; 13.06.2009 в 17:51.
Evgeniy26 вне форума Ответить с цитированием
Старый 13.06.2009, 17:54   #9
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Ээээ...Evgeniy26, у меня запрос формируется из выбранных пользователем условий. Мне когда то показывали, что можно сделать что то типа связи. Как то так infa.ID=rezult.ID_Info, но я не знаю точно как это сделать. Про поззапрос я что то не очень понял...Что такое "р"? И "о"?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 13.06.2009, 18:45   #10
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

а давай ка проэкт в студию ... а там посмотрим
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
свойствах показывает 1,50 гб (хотя должно быть 2, 00 гб) MORFIK Компьютерное железо 21 15.06.2009 04:31
проблемка lucky Паскаль, Turbo Pascal, PascalABC.NET 1 12.05.2009 22:32
проблемка( Alexcomeback Общие вопросы C/C++ 4 16.04.2009 18:38
Помогите с кнопочкой и выводом результатом diznt Помощь студентам 50 24.08.2008 21:38