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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2014, 19:53   #11
xbron
Пользователь
 
Регистрация: 27.04.2012
Сообщений: 27
По умолчанию

Если написать просто так
Код:
procedure TForm1.GetnumberClick(Sender: TObject);
begin
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select id as ''Номер'' ,fio as ''ФИО'' ,groups as ''Группа',course as ''Курс'' from students where course=(select course from students where id=56)');
end;
То код работает нормально, т.е. выводит всех студентов того же курса, что и студент под номером 56
xbron вне форума Ответить с цитированием
Старый 29.05.2014, 20:05   #12
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Программа должна выдать студентов, которые учатся на том же курсе , что и студент с заданным номером.
номер - это что, ID студента?! А откуда пользователь этот ID знает?!
Ну, раз знает, тогда можно и запрос написать...

так устроит?
Код:
procedure TForm1.GetnumberClick(Sender: TObject);
begin
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select id as [Номер] ,fio as [ФИО] ,groups as [Группа], course as [Курс] from students where course=(select course from students where id='+add_spisok.text+')');
adoquery1.open;
end;
p.s. Но лучше, конечно, с параметром написать:
Код:
procedure TForm1.GetnumberClick(Sender: TObject);
begin
  adoquery1.Close;
  adoquery1.SQL.Clear;
  adoquery1.SQL.Add('select id as [Номер] ,fio as [ФИО] ,groups as [Группа], course as [Курс] from students where course=(select course from students where id=:parId)');
  adoquery1.Parameters.ParamByName('par1').Value:=StrToInt(add_spisok.text);
  adoquery1.open;
end;

Последний раз редактировалось Serge_Bliznykov; 29.05.2014 в 20:09.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.05.2014, 20:20   #13
xbron
Пользователь
 
Регистрация: 27.04.2012
Сообщений: 27
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение

Код:
procedure TForm1.GetnumberClick(Sender: TObject);
begin
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select id as [Номер] ,fio as [ФИО] ,groups as [Группа], course as [Курс] from students where course=(select course from students where id='+add_spisok.text+')');
adoquery1.open;
end;
Код:
procedure TForm1.GetnumberClick(Sender: TObject);
begin
  adoquery1.Close;
  adoquery1.SQL.Clear;
  adoquery1.SQL.Add('select id as [Номер] ,fio as [ФИО] ,groups as [Группа], course as [Курс] from students where course=(select course from students where id=:parId)');
  adoquery1.Parameters.ParamByName('par1').Value:=StrToInt(add_spisok.text);
  adoquery1.open;
end;
Писал и так и так...В первом случае выдает, что не соответствует тип данных, т.к. у меня id - int, а +add_spisok+.text - string. Во втором случае выводит пустой DBGrid
xbron вне форума Ответить с цитированием
Старый 29.05.2014, 20:24   #14
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

беда, ну ни как не хочет работать пол строки кода
eval вне форума Ответить с цитированием
Старый 29.05.2014, 20:43   #15
xbron
Пользователь
 
Регистрация: 27.04.2012
Сообщений: 27
По умолчанию

Я о том же, перепробовал все варианты. И с параметрами и без. На вид код самый обыкновенный и легкий, а работать отказывается, думал моя невнимательность и что-то упустил, так нет же, всё также, как и форумчане написали
xbron вне форума Ответить с цитированием
Старый 29.05.2014, 21:50   #16
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я не верю, что запрос:
Цитата:
Код:
'select id as ''Номер'' ,fio as ''ФИО'' ,groups as ''Группа',course as ''Курс'' from students where course=(select course from students where id=56)'
работает.

а запрос:
Код:
adoquery1.SQL.Add('select id as [Номер] ,fio as [ФИО] ,groups as [Группа], course as [Курс] from students where course=(select course from students where id='+add_spisok.text+')');
НЕТ!

проверяйте, что у Вас в add_spisok.text...

так. а такой запрос будет работать?!

Код:
procedure TForm1.GetnumberClick(Sender: TObject);
begin
  add_spisok.text := '56';

  adoquery1.Close;
  adoquery1.SQL.Clear;
  adoquery1.SQL.Add('select id as [Номер] ,fio as [ФИО] ,groups as [Группа], course as [Курс] from students where course=(select course from students where id='+add_spisok.text+')');
adoquery1.open;
end;
если нет - то покажите скриншот с вашми кодом и скриншот ошибки.

Цитата:
Во втором случае выводит пустой DBGrid
у Вас есть уверенность, что указанный вами в add_spisok номер имеется в списке ID студентов?!


p.s. часто для отладки удобно отобразить запрос где-нибудь в Memo (туда же выгрузить параметры, если запрос с параметрами) и посмотреть, что за запрос Вы фактически выполняете...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.05.2014, 22:22   #17
xbron
Пользователь
 
Регистрация: 27.04.2012
Сообщений: 27
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
я не верю, что запрос:

работает.

у Вас есть уверенность, что указанный вами в add_spisok номер имеется в списке ID студентов?!


p.s. часто для отладки удобно отобразить запрос где-нибудь в Memo (туда же выгрузить параметры, если запрос с параметрами) и посмотреть, что за запрос Вы фактически выполняете...
Да, работает. Проверил в Accesse и в Delphi. Да я уверен, так как вписывал в add_spisok.text то же число что и в обычном запросе. А как выгрузить параметры? Я просто писал, что не сильно знаком с параметрами.
xbron вне форума Ответить с цитированием
Старый 29.05.2014, 22:25   #18
xbron
Пользователь
 
Регистрация: 27.04.2012
Сообщений: 27
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
так. а такой запрос будет работать?!

Код:
procedure TForm1.GetnumberClick(Sender: TObject);
begin
  add_spisok.text := '56';

  adoquery1.Close;
  adoquery1.SQL.Clear;
  adoquery1.SQL.Add('select id as [Номер] ,fio as [ФИО] ,groups as [Группа], course as [Курс] from students where course=(select course from students where id='+add_spisok.text+')');
adoquery1.open;
end;
если нет - то покажите скриншот с вашми кодом и скриншот ошибки.
Да, работает. Я же говорю, что, если просто вставить вместо +add_spisok.text+ например то же самое число 56, то работать будет! А вот мне нужно, чтобы это число вводил я сам.
xbron вне форума Ответить с цитированием
Старый 29.05.2014, 22:29   #19
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

может с руками что? попросите кого другого ввести
eval вне форума Ответить с цитированием
Старый 29.05.2014, 22:37   #20
xbron
Пользователь
 
Регистрация: 27.04.2012
Сообщений: 27
По умолчанию

По-вашему я написал программу, а ввести в эдит цифру не могу?
xbron вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
несоответствие типов данных Pushkin1983 Microsoft Office Access 6 08.01.2014 12:49
Несоответствие типов данных SeNaT БД в Delphi 1 07.05.2013 12:54
SQL. Несоответствие типов данных Xaenar БД в Delphi 1 22.06.2012 00:17
несоответствие типов данных Constellation Общие вопросы Delphi 4 28.06.2011 08:46