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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.08.2009, 15:39   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
Вопрос Не получается выполнить запрос

Добрый вечер! Вот, которым я заношу все данные в таблицу в БД:
Код:
procedure TForm8.BitBtn8Click(Sender: TObject);
var
 i,k,j: integer;
begin
 if Form8.Table_jur.Locate('Fam_jur;Imy_jur;Otche_jur',VarArrayOf([Form8.StringGrid1.Cells[1,j],
                                 Form8.StringGrid1.Cells[2,j],Form8.StringGrid1.Cells[3,j]]),
                                 [loCaseInsensitive,loPartialKey]) = False then
 for i:=4 to Form8.StringGrid1.ColCount - 1 do
 for j:=1 to 25 do
 if Form8.StringGrid1.Cells[0,j] <> '' then
 if Form8.StringGrid1.Cells[1,j] <> '' then
 if Form8.StringGrid1.Cells[2,j] <> '' then
 if Form8.StringGrid1.Cells[3,j] <> '' then
 if Form8.StringGrid1.Cells[i,0] <> '' then
  begin
   Form8.Table_jur.Insert;
   Form8.Table_jur.FieldByName('Data').AsString:=Form8.StringGrid1.Cells[i,0];
   Form8.Table_jur.FieldByName('Fam_jur').AsString:=Form8.StringGrid1.Cells[1,j];
   Form8.Table_jur.FieldByName('Imy_jur').AsString:=Form8.StringGrid1.Cells[2,j];
   Form8.Table_jur.FieldByName('Otche_jur').AsString:=Form8.StringGrid1.Cells[3,j];
   Form8.Table_jur.FieldByName('Chetvert').AsString:=Form8.StringGrid1.Cells[2,28];
   Form8.Table_jur.FieldByName('Pred_jur').AsString:=Form8.StringGrid1.Cells[2,29];
   Form8.Table_jur.FieldByName('Klass').AsString:=Form8.StringGrid1.Cells[4,28];
   Form8.Table_jur.FieldByName('God_jur').AsInteger:=StrToInt(Form8.StringGrid1.Cells[4,29]);
   if Form8.StringGrid1.Cells[i,j] = '2' then
    Form8.Table_jur.FieldByName('Mark_2').AsInteger:=StrToInt(Form8.StringGrid1.Cells[i,j]);
   if Form8.StringGrid1.Cells[i,j] = '3' then
    Form8.Table_jur.FieldByName('Mark_3').AsInteger:=StrToInt(Form8.StringGrid1.Cells[i,j]);
   if Form8.StringGrid1.Cells[i,j] = '4' then
    Form8.Table_jur.FieldByName('Mark_4').AsInteger:=StrToInt(Form8.StringGrid1.Cells[i,j]);
   if Form8.StringGrid1.Cells[i,j] = '5' then
    Form8.Table_jur.FieldByName('Mark_5').AsInteger:=StrToInt(Form8.StringGrid1.Cells[i,j]);
   Form8.Table_jur.Post;
  end;
end;
Результат внесения показан во вложении №2. Пытаюсь сделать такой запрос с критериями:
Код:
procedure TForm15.BitBtn1Click(Sender: TObject);
var
 WHERE, DELIM, i:string;
begin
 with  Form15.Query1 do
 begin
  Form15.Query1.SQL.Clear;
  Form15.Query1.SQL.Add('SELECT DISTINCT Pred_jur,Chetvert,God_jur,Klass,Data,Mark_2,Mark_3,Mark_4,Mark_5');
  Form15.Query1.SQL.Add('FROM jur');
  Form15.Query1.Active:=True;
  DELIM:='';
  WHERE:='';
{Pred_jur}
  Form15.DBGridEh1.Columns[0].Visible:= Form15.CheckBox7.Checked;
{Chetvert}
  Form15.DBGridEh1.Columns[1].Visible:= Form15.CheckBox8.Checked;
{God_jur}
  Form15.DBGridEh1.Columns[2].Visible:= Form15.CheckBox6.Checked;
{Klass}
  Form15.DBGridEh1.Columns[3].Visible:= Form15.CheckBox5.Checked;
{Data}
  Form15.DBGridEh1.Columns[4].Visible:= Form15.CheckBox9.Checked;
{Mark_2}
  Form15.DBGridEh1.Columns[5].Visible:= Form15.CheckBox1.Checked;
{Mark_3}
  Form15.DBGridEh1.Columns[6].Visible:= Form15.CheckBox2.Checked;
{Mark_4}
  Form15.DBGridEh1.Columns[7].Visible:= Form15.CheckBox3.Checked;
{Mark_5}
  Form15.DBGridEh1.Columns[8].Visible:= Form15.CheckBox4.Checked;

 begin
  WHERE:=WHERE+DELIM+'Fam_jur = ' + QuotedStr(Form15.DBLookupComboboxEh3.Text);
  DELIM:=' AND '
 end;

 begin
  WHERE:=WHERE+DELIM+'Imy_jur = ' + QuotedStr(Form15.DBLookupComboboxEh4.Text);
  DELIM:=' AND '
 end;

 if Form15.DBLookupComboboxEh5.Text <> '' then
  begin
   WHERE:=WHERE+DELIM+'Otche_jur = ' + QuotedStr(Form15.DBLookupComboboxEh5.Text);
   DELIM:=' AND '
  end;

  if Form15.CheckBox5.Checked = True then
    begin
     WHERE:=WHERE+DELIM+'Klass = ' + QuotedStr(Form15.Edit1.Text);
     DELIM:=' AND '
    end;

  if Form15.CheckBox8.Checked = True then
    begin
     WHERE:=WHERE+DELIM+'Chetvert = ' + QuotedStr(Form15.DBLookupComboBoxEh2.Text);
     DELIM:=' AND '
    end;

  if Form15.CheckBox7.Checked = True then
    begin
     WHERE:=WHERE+DELIM+'Pred_jur = ' + QuotedStr(Form15.DBLookupComboBoxEh1.Text);
     DELIM:=' AND '
    end;

  if Form15.CheckBox6.Checked = True then
    begin
     WHERE:=WHERE+DELIM+'God_jur = ' + Form15.ComboBox1.Text;
     DELIM:=' AND '
    end;

  if Form15.CheckBox9.Checked = True then
    begin
     WHERE:=WHERE+DELIM+'Data = ' + QuotedStr(Form15.Edit2.Text);
     DELIM:=' AND '
    end;

{  if Form15.CheckBox1.Checked = True then
    begin
     WHERE:=WHERE+DELIM+'Mark_2 = ' + Form15.ComboBox1.Text;
     DELIM:=' AND '
    end; }

   if WHERE <> '' then
    begin
     Form15.Query1.SQL.Add('WHERE  '+ WHERE);
    end;
   Form15.Query1.Active:=True;
 end;

end;
Результат запроса во вложении №1. А должна получиться (как я думаю) такая строка:
"Инешин Адрей Юрьевич 2006 11в География 1 четверть 05.08.09 4".
В чем моя ошибка?
Изображения
Тип файла: jpg 1.jpg (16.1 Кб, 159 просмотров)
Тип файла: jpg 2.jpg (11.1 Кб, 159 просмотров)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 05.08.2009, 16:05   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Form15.Query1.SQL.Add('WHERE '+ WHERE);
Обычно в таких случаях я ставлю бряк на этакие строчки и смотрю чему стало равно значение в переменных (в данном случае в WHERE)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.08.2009, 16:22   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
По умолчанию

Цитата:
Stilet
Дык ведь код же в момент выполнения, ошибки не выдает. Зачем же бряк туда? И как отследить
Цитата:
чему стало равно значение в переменных (в данном случае в WHERE)
????
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 05.08.2009, 16:53   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
И как отследить
Оч. просто. Ставишь брекпоинт на ту строку. Выполняешь прогу, как только брякнется, стань на WHERE мышкой (или добавь ее в Watch) и посмотри что в эту переменку пишется, может сама команда (да скорее всего) у тебя содержит неточность.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.08.2009, 18:43   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
По умолчанию

Stilet, вот сделал как ты говорил. Результат на скриншоте. Что это значит? А то я с Watch впервый раз.
Изображения
Тип файла: jpg 3.jpg (36.4 Кб, 157 просмотров)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 05.08.2009, 20:11   #6
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
По умолчанию

Слушайте, народ, я че то ниче не понимаю! Почему у меня вот такой запрос в Explorer-e превосходно работает как надо, а в коде нет!?!?
Сам запрос:
Код:
SELECT DISTINCT Pred_jur,Chetvert,God_jur,Klass,Data,Mark_2,Mark_3,Mark_4,Mark_5
FROM jur
WHERE Fam_jur='Иванов' AND Imy_jur='Иван' AND Otche_jur='Иванович'
?????
Код запроса в программе приведен в посте №1.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 05.08.2009, 23:53   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

думаю, что всё дело в пробелах..
как минимум добавьте в строку Form15.Query1.SQL.Add('FROM jur');
пробел перед from и пробел после jur:
Код:
Form15.Query1.SQL.Add(' FROM jur ');

Последний раз редактировалось Serge_Bliznykov; 05.08.2009 в 23:55.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.08.2009, 07:44   #8
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

в коде напиши запрос так
Код:
SELECT DISTINCT Pred_jur,Chetvert,God_jur,Klass,Data,Mark_2,Mark_3,Mark_4,Mark_5
FROM jur
WHERE Fam_jur=''Иванов'' AND Imy_jur=''Иван'' AND Otche_jur=''Иванович''
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 06.08.2009, 08:12   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
artemavd
Ну ты правильно работаешь с отладчиком. Теперь просто нужно такую строку запустить в СУБД (чем ты там пользуешь? Акцессом Парадоксом?) и посмотреть чтоона выдаст. А вообще советую все SQL сначала тестировать в СУБД, а уж потом в Делфи вгонять.
Цитата:
Serge_Bliznykov
Врядли, дружище. DB модуль разделяет строки.
Вот попробуй сам:
Код:
Query1.SQL.Add('select *');
Query1.SQL.Add('from animals');
Query1.Open;
База DBDEMOS из стандартной поставки Делфи
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.08.2009, 13:15   #10
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
По умолчанию

Цитата:
Код:
SELECT DISTINCT Pred_jur,Chetvert,God_jur,Klass,Data,Mark_2,Mark_3,Mark_4,Mark_5
FROM jur
WHERE Fam_jur=''Иванов'' AND Imy_jur=''Иван'' AND Otche_jur=''Иванович''
Так написал. Работает.
Цитата:
Ну ты правильно работаешь с отладчиком.
Спасибо
Цитата:
чем ты там пользуешь? Акцессом Парадоксом?
Paradox.
Цитата:
А вообще советую все SQL сначала тестировать в СУБД, а уж потом в Делфи вгонять.
Имеешь ввиду в Explorer-e?
Код:

 with  Form15.Query1 do
 begin
  Form15.Query1.Active:=False;
  Form15.Query1.SQL.Clear;
  Form15.Query1.SQL.Add('SELECT DISTINCT Pred_jur,Chetvert,God_jur,Klass,Data,Mark_2,Mark_3,Mark_4,Mark_5');
  Form15.Query1.SQL.Add('FROM jur');
//  Form15.Query1.SQL.Add('WHERE Fam_jur= '+QuotedStr(Form15.Edit3.Text)+' AND Imy_jur='+QuotedStr(Form15.Edit4.Text)+'');
//  Form15.Query1.Active:=True;
  DELIM:='';
  WHERE:='';
{Pred_jur}
//  Form15.DBGridEh1.Columns[0].Visible:= Form15.CheckBox7.Checked;
{Chetvert}
//  Form15.DBGridEh1.Columns[1].Visible:= Form15.CheckBox8.Checked;
{God_jur}
//  Form15.DBGridEh1.Columns[2].Visible:= Form15.CheckBox6.Checked;
{Klass}
//  Form15.DBGridEh1.Columns[3].Visible:= Form15.CheckBox5.Checked;
{Data}
//  Form15.DBGridEh1.Columns[4].Visible:= Form15.CheckBox9.Checked;
{Mark_2}
//  Form15.DBGridEh1.Columns[5].Visible:= Form15.CheckBox1.Checked;
{Mark_3}
//  Form15.DBGridEh1.Columns[6].Visible:= Form15.CheckBox2.Checked;
{Mark_4}
//  Form15.DBGridEh1.Columns[7].Visible:= Form15.CheckBox3.Checked;
{Mark_5}
//  Form15.DBGridEh1.Columns[8].Visible:= Form15.CheckBox4.Checked;

{ if Form15.DBLookupComboboxEh5.Text <> '' then
  begin
   WHERE:=WHERE+DELIM+'Otche_jur = ' + QuotedStr(Form15.Edit5.Text);
   DELIM:=' AND '
  end; }

{  if Form15.CheckBox5.Checked = True then
    begin
     WHERE:=WHERE+DELIM+'Klass = ' + QuotedStr(Form15.Edit1.Text);
     DELIM:=' AND '
    end;

  if Form15.CheckBox8.Checked = True then
    begin
     WHERE:=WHERE+DELIM+'Chetvert = ' + QuotedStr(Form15.DBLookupComboBoxEh2.Text);
     DELIM:=' AND '
    end;

  if Form15.CheckBox7.Checked = True then
    begin
     WHERE:=WHERE+DELIM+'Pred_jur = ' + QuotedStr(Form15.DBLookupComboBoxEh1.Text);
     DELIM:=' AND '
    end;

  if Form15.CheckBox6.Checked = True then
    begin
     WHERE:=WHERE+DELIM+'God_jur = ' + Form15.ComboBox1.Text;
     DELIM:=' AND '
    end;
}
{  if Form15.CheckBox9.Checked = True then
    begin
     WHERE:=WHERE+DELIM+'Data= ' + QuotedStr(Form15.Edit2.Text);
     DELIM:=' AND '
    end;

{  if Form15.CheckBox1.Checked = True then
    begin
     WHERE:=WHERE+DELIM+'Mark_2 = ' + Form15.ComboBox1.Text;
     DELIM:=' AND '
    end; }

//   if WHERE <> '' then
//    begin
     Form15.Query1.SQL.Add('WHERE Fam_jur= '+QuotedStr(Form15.Edit3.Text)+
                           ' AND Imy_jur='+QuotedStr(Form15.Edit4.Text)+
                           ' AND Data='+QuotedStr(Form15.Edit2.Text)+
                           ' AND Klass='+QuotedStr(Form15.Edit1.Text)+
                           ' AND God_jur='+QuotedStr(Form15.ComboBox1.Text)+
                           ' AND Pred_jur='+QuotedStr(Form15.Edit6.Text)+
                           ' AND Chetvert='+QuotedStr(Form15.DBLookupComboboxEh2.Text)+
                           '');
//    end;
   Form15.Query1.Active:=True;
Почему не получается сделать рабочими те строки, которые я закоментировал? Тот код, который не закоментирован - работает. Помогите пожалуйста поправить его
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
БД, Запрос на приход/расход, не получается задействовать несколько обьектов kvadratnt Помощь студентам 0 06.06.2009 15:23
Как выполнить SQL запрос, записанный в Memo artemavd БД в Delphi 8 26.03.2009 17:41
не получается запрос с inner join :mad: Только_Учусь SQL, базы данных 16 21.07.2008 09:40
запрос ссылается на несвязанный с ним запрос kolebatel SQL, базы данных 0 11.06.2008 12:50