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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.07.2010, 13:51   #1
Ks2010
Пользователь
 
Регистрация: 08.07.2010
Сообщений: 62
По умолчанию SQL:Statement too long

пишу SQL запрос в ADOQuery, а он мне пишет - SQL:Statement too long

мне надо как-то это обойти, потому что текст запроса и правда длиный (порядка 30 строк), но он такой и должен быть.

может где-то в настройках ADO что поменять?? (потому что раньше всё осуществлялось на BDE - TQuery - и такой ошибки не было )
Ks2010 вне форума Ответить с цитированием
Старый 19.07.2010, 14:24   #2
Korben5E
Форумчанин
 
Аватар для Korben5E
 
Регистрация: 13.07.2010
Сообщений: 346
По умолчанию

шайтан-запрос !!!
можно в студию?
Non est culpa vin, sed culpa bibentis
Korben5E вне форума Ответить с цитированием
Старый 19.07.2010, 15:42   #3
Ks2010
Пользователь
 
Регистрация: 08.07.2010
Сообщений: 62
По умолчанию

вот например такой выполняется

select * from ЕВЖО0711 where
region = 123456789
or vessel = :ves
or
cruise_n > 50.00 or cruise_n < 1.00
or
latitude>90.00 or latitude<(-90.00)
or
longitude > 180.00 or longitude< (-180.00)
or
(n_hawl>300.00 or n_hawl<1.00)
or
(num > 200.00 or num < 1.00)
or ((obj_code = 85400901) and
((sex="M" and ((matur_st = 10 and (m_lngth>:X10 or m_lngth<:R10))
or (matur_st = 20 and (m_lngth>:X20 or m_lngth<:R20))
or (matur_st = 30 and (m_lngth>:X30 or m_lngth<:R30))
or (matur_st = 40 and (m_lngth>:X40 or m_lngth<:R40))
or (matur_st = 51 and (m_lngth<:X51 or m_lngth>:R51))
or (matur_st = 52 and (m_lngth<:X52 or m_lngth>:R52))
or (matur_st = 53 and (m_lngth<:X53 or m_lngth>:R53))
or (matur_st = 60 and (m_lngth<:X60 or m_lngth>:R60))
or (matur_st = 70 and (m_lngth<:X70 or m_lngth>:R70)) or m_lngth>:RR2 or m_lngth<:RR0))
or (sex="F" and ((matur_st = 10 and (m_lngth>:Y10 or m_lngth<:S10))
or (matur_st = 20 and (m_lngth>:Y20 or m_lngth<:S20))
or (matur_st = 30 and (m_lngth>:Y30 or m_lngth<:S30))
or (matur_st = 40 and (m_lngth>:Y40 or m_lngth<:S40))
or (matur_st = 51 and (m_lngth<:Y51 or m_lngth>:S51))
or (matur_st = 52 and (m_lngth<:Y52 or m_lngth>:S52))
or (matur_st = 53 and (m_lngth<:Y53 or m_lngth>:S53))
or (matur_st = 60 and (m_lngth<:Y60 or m_lngth>:S60))
or (matur_st = 70 and (m_lngth<:Y70 or m_lngth>:S70)) or m_lngth>:SS2 or m_lngth<:SS0))
or (sex="J" and ( m_lngth>:TT1 or m_lngth<:TT0))))
or
(sex <> "M" and sex <> "F" and sex <> "J")

а вот такой уже нет

select * from ЕВЖО0711 where
region = 123456789
or vessel = :ves
or
cruise_n > 50.00 or cruise_n < 1.00
or
latitude>90.00 or latitude<(-90.00)
or
longitude > 180.00 or longitude< (-180.00)
or
(n_hawl>300.00 or n_hawl<1.00)
or
(num > 200.00 or num < 1.00)
or ((obj_code = 85400901) and
((sex="M" and ((matur_st = 10 and (m_lngth>:X10 or m_lngth<:R10))
or (matur_st = 20 and (m_lngth>:X20 or m_lngth<:R20))
or (matur_st = 30 and (m_lngth>:X30 or m_lngth<:R30))
or (matur_st = 40 and (m_lngth>:X40 or m_lngth<:R40))
or (matur_st = 51 and (m_lngth<:X51 or m_lngth>:R51))
or (matur_st = 52 and (m_lngth<:X52 or m_lngth>:R52))
or (matur_st = 53 and (m_lngth<:X53 or m_lngth>:R53))
or (matur_st = 60 and (m_lngth<:X60 or m_lngth>:R60))
or (matur_st = 70 and (m_lngth<:X70 or m_lngth>:R70)) or m_lngth>:RR2 or m_lngth<:RR0))
or (sex="F" and ((matur_st = 10 and (m_lngth>:Y10 or m_lngth<:S10))
or (matur_st = 20 and (m_lngth>:Y20 or m_lngth<:S20))
or (matur_st = 30 and (m_lngth>:Y30 or m_lngth<:S30))
or (matur_st = 40 and (m_lngth>:Y40 or m_lngth<:S40))
or (matur_st = 51 and (m_lngth<:Y51 or m_lngth>:S51))
or (matur_st = 52 and (m_lngth<:Y52 or m_lngth>:S52))
or (matur_st = 53 and (m_lngth<:Y53 or m_lngth>:S53))
or (matur_st = 60 and (m_lngth<:Y60 or m_lngth>:S60))
or (matur_st = 70 and (m_lngth<:Y70 or m_lngth>:S70)) or m_lngth>:SS2 or m_lngth<:SS0))
or (sex="J" and ( m_lngth>:TT1 or m_lngth<:TT0))))
or
(sex <> "M" and sex <> "F" and sex <> "J")
or
stom_weig*5>=weigth
Ks2010 вне форума Ответить с цитированием
Старый 19.07.2010, 16:05   #4
quit
Я есть!
Форумчанин
 
Аватар для quit
 
Регистрация: 17.02.2008
Сообщений: 318
По умолчанию

О МАЙ ГАД!!! Это просто изнасилование!!! Учите SQL!

фуф... ну теперь, к вопросу... мой вам первый совет: не используйте OR пишите объединенные запросы, так будет сто процентов быстрее... постарайтесь сократить условия выборки, используйте логику.

UPD И еще! Оформляйте тему нормально. Код заключайте в тэг [CODE] или кнопка "#". А то смотреть противно!
©Учиться, учиться и еще раз учиться!

Последний раз редактировалось quit; 19.07.2010 в 16:18.
quit вне форума Ответить с цитированием
Старый 19.07.2010, 16:17   #5
Ks2010
Пользователь
 
Регистрация: 08.07.2010
Сообщений: 62
По умолчанию

ну как бы да.... я нуб....

сейчас буду разбирать условия, посокращается что-нить.

а есть какой-то способ писать длинные запросы??
просто у меня добавляются условия на усмотрение пользователя. и длинные всё равно будут получаться.
Ks2010 вне форума Ответить с цитированием
Старый 19.07.2010, 16:23   #6
quit
Я есть!
Форумчанин
 
Аватар для quit
 
Регистрация: 17.02.2008
Сообщений: 318
По умолчанию

Если бы я был пользователем, я бы застрелился вводить столько параметров, чтобы осуществить трудноосуществимый запрос.
Способ писать длинные запросы есть, если структура БД грамотно спроектирована и нужные поля проиндексированы, тогда, и запрос будет написать проще, и работать он будет шустро.
©Учиться, учиться и еще раз учиться!
quit вне форума Ответить с цитированием
Старый 19.07.2010, 16:29   #7
Ks2010
Пользователь
 
Регистрация: 08.07.2010
Сообщений: 62
По умолчанию

у меня пользователь будет только галочки ставить, а в запросе появляются доп. условия.

БД - (не ругайтесь - поменять не имею права) таблицы DBF.
Ks2010 вне форума Ответить с цитированием
Старый 19.07.2010, 16:39   #8
quit
Я есть!
Форумчанин
 
Аватар для quit
 
Регистрация: 17.02.2008
Сообщений: 318
По умолчанию

хорошо, тогда делай нормальную постановку задачи(мы как бы не телепаты), описание таблицы и попробуй написать еще раз запрос, только постарайся как можно меньше использовать OR или покопай инфу в сторону объединения UNION... и вообще в sql по глубже копай
©Учиться, учиться и еще раз учиться!
quit вне форума Ответить с цитированием
Старый 19.07.2010, 17:05   #9
Ks2010
Пользователь
 
Регистрация: 08.07.2010
Сообщений: 62
По умолчанию

структура запроса простая

select все столбцы from таблица(DBF формата, которую пользователь сам выбирает)
where условие 1 or условие 2 ... условие n

причем условия сложные.. с параметрами (они устанавливаются либо пользователем либо автоматически)
добавляются при checkbox.Checked=true
вот я и решила просто добавлять условия ADOQuery1.SQL.Add('...')

а оказывается получается длинный запрос, который ADO не выполняет.
Ks2010 вне форума Ответить с цитированием
Старый 19.07.2010, 17:07   #10
Korben5E
Форумчанин
 
Аватар для Korben5E
 
Регистрация: 13.07.2010
Сообщений: 346
По умолчанию

я сообщу по секрету что m_lngth в данном условии может иметь любое значение m_lngth>:X20 or m_lngth<:R20


т.е. условие обрабатывается сервером - но результата не приносит.
Non est culpa vin, sed culpa bibentis
Korben5E вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перевод строки в long long и обратно Dimarik Общие вопросы C/C++ 9 16.09.2009 13:27
Ошибки «If statement missing )» Яр|/||< (^_^) Общие вопросы C/C++ 14 23.06.2009 23:17
Long file name (LFN) Liquor Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 29.03.2009 17:10
Statement Global blutang Microsoft Office Excel 4 07.02.2009 12:33