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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.08.2013, 12:38   #1
maonang
Пользователь
 
Регистрация: 23.12.2010
Сообщений: 18
Вопрос Проблемы с SQL запросом

Доброго времени суток.
Столкнулся с нерешаемой, как показывает время, проблемой... Перепробовал разные, известные мне, способы, кроме отдельного указания параметров...
А теперь конкретнее.
Вот часть кода:
Код:
If (H1_Otv = 'K') and ((strtoint(KVALITET_Otv) >= 3) and (strtoint(KVALITET_Otv) <= 8)) then
begin
    Form10.ADOQuery1.SQL.Text := 'select [K-(<=8)-' + KVALITET_Otv +'] From es_max Where int([mi])<' + D1 + ' and int([ma])>=' + D1 + ';';
    Form10.ADOQuery1.Open;
    ES_Otv := Form10.ADOQuery1.Fields[0].Text;
    ...
end;
Эта программа связана с дисциплиной метрология, стандартизация и сертификация, для конкретики.
Этот запрос ищет в БД по полям одну строку, удовлетворяющую условию, чтобы Квалитет (KVALITET_Otv) был в диапазоне между двумя полями значения Свыше (mi) и До (ma).
Переменные, которые подставляются в запрос я проверял - корректные. Все названия верные, проверял.

Проблема в том, что при выполнении запроса, программа ругается и выводит ошибку: "Обнаружены символы за пределами инструкции SQL".
Помогите пожалуйста, до этого момента все запросы отлично работают и обрабатываются...
maonang вне форума Ответить с цитированием
Старый 04.08.2013, 13:56   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
[K-(<=8)-
Это если оно строковое нужно обрамлять в ковычки.
Код:
   Form10.ADOQuery1.SQL.Text := 'select '+QuotedStr('[K-(<=8)-') + KVALITET_Otv +QuotedStr(']')
+ ' From es_max Where int([mi])<' + D1 + ' and int([ma])>=' + D1 + ';';
Если это имя поля то меняй его на другое. Если же это некая лямбда-функция (хоть я и сомневаюсь но мало ли) то скорее всего нужно почитать хелп твоей СУБД как она их переваривает.
Далее: int([mi]) - mi это поле? Какого типа?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.08.2013, 14:02   #3
maonang
Пользователь
 
Регистрация: 23.12.2010
Сообщений: 18
По умолчанию

Я упростил запрос и ввел параметры такими, как они подставлялись из переменных.
Код:
Form10.ADOQuery1.SQL.Text :='select K From es_max Where mi<50 and ma>=50';
Выдел ошибку: '' is not a valid floating point value.

К - название поля текстового типа,
ma и mi - тоже поля и были раньше текстового типа, сейчас сделал Числового типа.
maonang вне форума Ответить с цитированием
Старый 04.08.2013, 14:19   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Выдел ошибку: '' is not a valid floating point value.
Эта ошибка не на этой строке проявилась. Делай пошаговку F7-F8 и выясняй на какой строке ошибка.
Цитата:
К - название поля текстового типа,
Тогда
Код:
 ES_Otv := Form10.ADOQuery1.Fields[0].AsString;
Это если ES_Otv строковая.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.08.2013, 14:30   #5
maonang
Пользователь
 
Регистрация: 23.12.2010
Сообщений: 18
По умолчанию

эм... c поочередным F7/F8 у меня дальше выделенной строки не идет:
Код:
@@haveVMT:
MOV     EDI,[EDX].vmtDynamicTable
TEST    EDI,EDI
JE      @@parent
MOVZX   ECX,word ptr [EDI]
PUSH    ECX
ADD     EDI,2
 -> REPNE   SCASW

Исправил:
Код:
Form10.ADOQuery1.SQL.Text :='select K From es_max Where mi<50 and ma>=50';
Form10.ADOQuery1.Open;
ES_Otv := Form10.ADOQuery1.Fields[0].AsString;
Но теперь ошибка: "Несоответствие типов данных в выражении условия отбора"

Закомментировал строку
Код:
ES_Otv := Form10.ADOQuery1.Fields[0].AsString;
Но ошибка осталась

Последний раз редактировалось maonang; 04.08.2013 в 14:33.
maonang вне форума Ответить с цитированием
Старый 04.08.2013, 16:28   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Несоответствие типов данных в выражении условия отбора
А точно у тебя ma и mi Числового типа?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.08.2013, 16:56   #7
maonang
Пользователь
 
Регистрация: 23.12.2010
Сообщений: 18
По умолчанию

я и числового и текстового типа пробовал...
maonang вне форума Ответить с цитированием
Старый 04.08.2013, 18:54   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ерунда какая то...
Как отработает вот такой запрос?
Код:
Form10.ADOQuery1.SQL.Text :='select count(k) From es_max';;
Form10.ADOQuery1.Open;
ES_Otv := Form10.ADOQuery1.Fields[0].AsString;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.08.2013, 19:40   #9
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

а если
Код:
var
  ES_Otv : string;
begin
  Form10.ADOQuery1.Close;
  Form10.ADOQuery1.SQL.Text :='SELECT k FROM es_max WHERE mi < :mi AND ma >= :ma';
  Form10.ADOQuery1.Parameters.ParamByName('mi').Value := 50;
  Form10.ADOQuery1.Parameters.ParamByName('ma').Value := 50;
  Form10.ADOQuery1.Open;
  ES_Otv := VarToStrDef(Form10.ADOQuery1.Fields[0].Value, '');
  ShowMessage(es_otv);
end;
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 04.08.2013, 21:05   #10
maonang
Пользователь
 
Регистрация: 23.12.2010
Сообщений: 18
По умолчанию

Yurk@
Странно... запрос выполнился, но нашел неверное значение, то есть 3 по базе, а нужно 7. Потом ошибка '' is not a valid floating point value. неразбериха... Я убрал вывод и сразу ошибка, поставил после присваивания значения из БД Exit, чтобы прервать дальнейшие действия - смысла 0, та же ошибка
maonang вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемы с SQL запросом. (Delphi) maonang Помощь студентам 4 11.08.2012 21:47
Проблемы с запросом в базу VHomer БД в Delphi 10 23.06.2010 00:36
Проблемы с запросом. Cerber24 SQL, базы данных 1 05.06.2010 02:59
Проблемы с запросом Cerber24 SQL, базы данных 10 01.04.2010 14:14
Проблемы с POST запросом... JustKurt Работа с сетью в Delphi 1 26.07.2009 01:02