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

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

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

Восстановить пароль

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

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

Добрый день! Программа должна выдать студентов, которые учатся на том же курсе , что и студент с заданным номером. Есть бд Access, в ней 3 поля id - int, fio - string, groups - string, course - int. При вводе в поле (edit) цифры (то есть номер студента) и соответственно после нажатии кнопки (getnumber - button), то программа пишет " несоответствие типов данных"

Код:
procedure TForm1.GetnumberClick(Sender: TObject);
var n:integer;
begin
n:=strtoint(add_spisok.text);
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=''+n+'')');
adoquery1.open;
end;
xbron вне форума Ответить с цитированием
Старый 28.05.2014, 11:35   #2
xbron
Пользователь
 
Регистрация: 27.04.2012
Сообщений: 27
По умолчанию

Сам SQL-код работает в Access'e, если вместо n вставить число(номер из списка)
xbron вне форума Ответить с цитированием
Старый 28.05.2014, 11:41   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Здесь попытка сцепить символьные строки с Integer. Не пройдет. Или преобразовать n в строку. Или использовать параметризованный запрос, что лучше
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 29.05.2014, 17:40   #4
xbron
Пользователь
 
Регистрация: 27.04.2012
Сообщений: 27
По умолчанию

А не могли бы вы объяснить, как это можно написать? С параметрами я не очень сильно знаком. А вот почему не сработала моя переменная, я же её преобразовал в Integer ?
xbron вне форума Ответить с цитированием
Старый 29.05.2014, 18:05   #5
Konstantin_ua
Не судите строго
Форумчанин
 
Аватар для Konstantin_ua
 
Регистрация: 31.03.2011
Сообщений: 202
По умолчанию

Цитата:
Сообщение от xbron Посмотреть сообщение
А не могли бы вы объяснить, как это можно написать? С параметрами я не очень сильно знаком. А вот почему не сработала моя переменная, я же её преобразовал в Integer ?
Код:

      procedure TForm1.GetnumberClick(Sender: TObject);
var n:integer;
begin
n:=strtoint(add_spisok.text);
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select id as par1 ,fio as par2,groups as par3,course as par4 from students where course=(select course from students where id=:par5)');
adoquery1.Parameters.ParamByName('par1').Value:=''Номер'';
adoquery1.Parameters.ParamByName('par2').Value:=значение которое нужно;
adoquery1.Parameters.ParamByName('par3').Value:=значение которое нужно;
adoquery1.Parameters.ParamByName('par4').Value:=значение которое нужно;
adoquery1.Parameters.ParamByName('par5').Value:=значение которое нужно;
adoquery1.open;
end;
Думаю так

Цитата:
id=''+n+''
id=n так разве не работает?

Последний раз редактировалось Konstantin_ua; 29.05.2014 в 18:12.
Konstantin_ua вне форума Ответить с цитированием
Старый 29.05.2014, 19:17   #6
xbron
Пользователь
 
Регистрация: 27.04.2012
Сообщений: 27
По умолчанию

id=n также говорит, что не соответствует тип данных. Простите, а что за par5, если у меня всего 4 поля?
xbron вне форума Ответить с цитированием
Старый 29.05.2014, 19:31   #7
xbron
Пользователь
 
Регистрация: 27.04.2012
Сообщений: 27
По умолчанию

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

      procedure TForm1.GetnumberClick(Sender: TObject);
var n:integer;
begin
n:=strtoint(add_spisok.text);
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select id as par1 ,fio as par2,groups as par3,course as par4 from students where course=(select course from students where id=:par5)');
adoquery1.Parameters.ParamByName('par1').Value:=''Номер'';
adoquery1.Parameters.ParamByName('par2').Value:=значение которое нужно;
adoquery1.Parameters.ParamByName('par3').Value:=значение которое нужно;
adoquery1.Parameters.ParamByName('par4').Value:=значение которое нужно;
adoquery1.Parameters.ParamByName('par5').Value:=значение которое нужно;
adoquery1.open;
end;
Думаю так


id=n так разве не работает?
Кстати этот код не работает, пишет, что не найден par1 я написал вот так
Код:
     procedure TForm1.GetnumberClick(Sender: TObject);
var n:integer;
begin
n:=strtoint(add_spisok.text);
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select id as par1 ,fio as par2,groups as par3,course as par4 from students where course=(select course from students where id=:par4)');
adoquery1.Parameters.ParamByName('par1').Value:='Номер';
adoquery1.Parameters.ParamByName('par2').Value:='ФИО';
adoquery1.Parameters.ParamByName('par3').Value:='Группы';
adoquery1.Parameters.ParamByName('par4').Value:=n;
adoquery1.open;
end;
xbron вне форума Ответить с цитированием
Старый 29.05.2014, 19:35   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Здесь только один параметр - par4. Откуда другие взялись?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 29.05.2014, 19:39   #9
xbron
Пользователь
 
Регистрация: 27.04.2012
Сообщений: 27
По умолчанию

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

Попробовал вот так, теперь в DBGrid ничего не выводит
Код:
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=:par1)');
adoquery1.Parameters.ParamByName('par1').Value:=strtoint(add_spisok.text);
end;
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