powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SQLPREPARE()
25 сообщений из 61, страница 1 из 3
SQLPREPARE()
    #36475056
Местами администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выполняю запросы к SQL серверу через ODBC при помощи примерно такой конструкции:
nShandle=SQLCONNECT('Taxes',.T.)
tVdok='"'+'select * from fn98'+'"'
nResult=SQLPREPARE(nShandle, &tVdok, "fn98")
IF nResult=1
SQLEXEC(nShandle)
endif
SQLDISCONNECT(nShandle)
Все проходит отлично, однако когда начинаю увеличивать длину запроса (указываю перечень полей для загрузки, использовать условия сортировки, группировки и т.д.) ~>240 символов,
фокс (9) начинает ругаться:
"Команда содержит нераспознанное ключевое слово или фразу", хотя сам запрос однозначно правильный.
Подскажите что за фигня, как побороть или обойти.
Приходиться потом выбрасывать данные, которые не нужны...
...
Рейтинг: 0 / 0
SQLPREPARE()
    #36475209
igorbik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Местами администраторкогда начинаю увеличивать длину запроса (указываю перечень полей для загрузки, использовать условия сортировки, группировки и т.д.) ~>240 символов,
фокс (9) начинает ругаться
Только по своему опыту!
Не вдаваясь в детали, в таких случаях я делаю несколько запросов к вновь получаемым курсорам, всякий раз убирая лишнее. На практике время выполнения запросов некритична, а экономия на программировании - часы или даже дни.
...
Рейтинг: 0 / 0
SQLPREPARE()
    #36475273
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
SQLPREPARE()
    #36475292
Местами администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
igorbikНе вдаваясь в детали, в таких случаях я делаю несколько запросов к вновь получаемым курсорам, всякий раз убирая лишнее. На практике время выполнения запросов некритична, а экономия на программировании - часы или даже дни.

Сейчас поступаю так же, но как-то не хорошо, поднимаю с сервера примерно 300 тыс записей, из которых мне нужно всего то процентов 5-15.
...
Рейтинг: 0 / 0
SQLPREPARE()
    #36475294
Местами администраторВыполняю запросы к SQL серверу через ODBC при помощи примерно такой конструкции:
tVdok='"'+'select * from fn98'+'"'
nResult=SQLPREPARE(nShandle, &tVdok, "fn98")
ЗАЧЕМ тут эти танцы с бубном? ЗАЧЕМ здесь макроподстановка? Уберите ее и все наладится.
Код: plaintext
1.
tVdok='select * from fn98'
nResult=SQLPREPARE(nShandle, tVdok, "fn98") 
...
Рейтинг: 0 / 0
SQLPREPARE()
    #36475334
Местами администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проходящий.Местами администраторВыполняю запросы к SQL серверу через ODBC при помощи примерно такой конструкции:
tVdok='"'+'select * from fn98'+'"'
nResult=SQLPREPARE(nShandle, &tVdok, "fn98")
ЗАЧЕМ тут эти танцы с бубном? ЗАЧЕМ здесь макроподстановка? Уберите ее и все наладится.
Код: plaintext
1.
tVdok='select * from fn98'
nResult=SQLPREPARE(nShandle, tVdok, "fn98") 


конкретно в этом случае макроподстановка не нужна, но это ведь примерная конструкция запроса, если его текст привести полностью, то макроподстановка еще как нужна.
...
Рейтинг: 0 / 0
SQLPREPARE()
    #36475352
Местами администраторконкретно в этом случае макроподстановка не нужна, но это ведь примерная конструкция запроса, если его текст привести полностью, то макроподстановка еще как нужна.Не надо рассказывать сказки. Для формирования любой строки макроподстановка не нужна. Точка. Лучше внимательно посмотрите на text ... endtext, особенно опцию textmerge.
...
Рейтинг: 0 / 0
SQLPREPARE()
    #36475363
Местами администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проходящий.Местами администраторВыполняю запросы к SQL серверу через ODBC при помощи примерно такой конструкции:
tVdok='"'+'select * from fn98'+'"'
nResult=SQLPREPARE(nShandle, &tVdok, "fn98")
ЗАЧЕМ тут эти танцы с бубном? ЗАЧЕМ здесь макроподстановка? Уберите ее и все наладится.
Код: plaintext
1.
tVdok='select * from fn98'
nResult=SQLPREPARE(nShandle, tVdok, "fn98") 


попробуй сам,
tVdok='select A.n1,A.d6,A.D428_2,A.D270,C.N590,B.d84,B.d87_2,d86_2,C.d3587_101,C.d3587_104,C.d3587_106,C.d3587_107,C.d3587_110,C.d250 from FN1532 A join FN1552 B on B.D270=A.D270 join FN15521 C on C.D270=A.D270 left join fn1505 D on A.n1=D.n1 and D.d83<0 where A.D789=11 and C.D09=1 and C.d250=2009'

база данных не понадобиться (до нее дело не дойдет), скопируйте все в фокс и попробуйте сохранить...
...
Рейтинг: 0 / 0
SQLPREPARE()
    #36475382
Местами администраторпроходящий.Местами администраторВыполняю запросы к SQL серверу через ODBC при помощи примерно такой конструкции:
tVdok='"'+'select * from fn98'+'"'
nResult=SQLPREPARE(nShandle, &tVdok, "fn98")
ЗАЧЕМ тут эти танцы с бубном? ЗАЧЕМ здесь макроподстановка? Уберите ее и все наладится.
Код: plaintext
1.
tVdok='select * from fn98'
nResult=SQLPREPARE(nShandle, tVdok, "fn98") 


попробуй сам,
tVdok='select A.n1,A.d6,A.D428_2,A.D270,C.N590,B.d84,B.d87_2,d86_2,C.d3587_101,C.d3587_104,C.d3587_106,C.d3587_107,C.d3587_110,C.d250 from FN1532 A join FN1552 B on B.D270=A.D270 join FN15521 C on C.D270=A.D270 left join fn1505 D on A.n1=D.n1 and D.d83<0 where A.D789=11 and C.D09=1 and C.d250=2009'

база данных не понадобиться (до нее дело не дойдет), скопируйте все в фокс и попробуйте сохранить...1. ВНИМАТЕЛЬНО читаем статью по ссылке представленной PaulWist.
2. В качестве демонстрации предложенного text ... endtext:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
text to tVdok textm noshow flags  3  pretext  15 
select A.n1,A.d6,A.D428_2,A.D270,C.N590,B.d84,B.d87_2,d86_2,C.d3587_101,C.d3587_104,C.d3587_106,C.d3587_107,C.d3587_110,C.d250 
from FN1532 A 
join FN1552 B on B.D270=A.D270 
join FN15521 C on C.D270=A.D270 
left join fn1505 D on A.n1=D.n1 and D.d83< 0  
where A.D789= 11  and C.D09= 1  and C.d250= 2009 ' 
endtext
? tVdok
...
Рейтинг: 0 / 0
SQLPREPARE()
    #36475404
Местами администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да прочитал, но речь то была о макроподстановке, ее "убрать и все наладиться".
За ответ спасибо.
...
Рейтинг: 0 / 0
SQLPREPARE()
    #36475433
Местами администраторда прочитал, но речь то была о макроподстановке, ее "убрать и все наладиться".
За ответ спасибо.Предложение попробовать мне выполнить в фоксе строку с присвоением переменной значения текстовой константы длиной боле 254 символов к макроподстановке отношения не имеет. Это ошибка писателя сей строки. Потому отсылка к статье про строки.
Макроподстановка для передачи символьного параметра функции - вредная бессмыслица, вызванная, вероятно, первой причиной - неумением работать со строками и незнание правил и ограничений в такой работе.
...
Рейтинг: 0 / 0
SQLPREPARE()
    #36475465
Местами администратор,
кстати, вызывать SQLPREPARE() для однокрано выполняемого батча - бессмыслица. Выигрыша по сравнению с простым SQLEXEC() никакого, даже проигрыш на количесвте выполняемых команд.
Вот для повторения одно и то же команды - самое то.
Код: plaintext
1.
2.
3.
SQLPREPARE(lnHandle, 'Insert into #tmp values (?crsTemp.field1, ?crsTemp.field2)')
scan
  SQLEXEC(lnHandle)
endscan
...
Рейтинг: 0 / 0
SQLPREPARE()
    #36475471
Местами администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проходящий.,
Любишь ты поучить, решения по данному вопросу предложил не ты, уперся в макроподстановку,
будто я кого то убил, работает с макроподстановкой, в какой то ситуации опытным путем пришел к макроподстановке (значит без нее нельзя было), а теперь работаю по шаблону, на ограничения не натыкался, быстродействие не падает, результат правильный - ты раздуваешь проблему из нифига.
...
Рейтинг: 0 / 0
SQLPREPARE()
    #36475473
Местами администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проходящий.,

сколько проиграю - 0,001 с ?
...
Рейтинг: 0 / 0
SQLPREPARE()
    #36475478
igorbik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Местами администраторigorbikНе вдаваясь в детали, в таких случаях я делаю несколько запросов к вновь получаемым курсорам, всякий раз убирая лишнее. На практике время выполнения запросов некритична, а экономия на программировании - часы или даже дни.

Сейчас поступаю так же, но как-то не хорошо, поднимаю с сервера примерно 300 тыс записей, из которых мне нужно всего то процентов 5-15.
Не вдаваясь в детали и только по опыту:
в каждый из запросов, в том числе первый, включите ТОЛЬКО те критерии, которые вытащат либо меньшее кол-во полей, либо строк. Это не так сложно. Сделайте это, запустите проект в работу, и уже когда все заработает (пусть неспеша, но надежно), займитесь спокойно экспериментами по сабжу.
...
Рейтинг: 0 / 0
SQLPREPARE()
    #36475492
Местами администраторпроходящий.,
Любишь ты поучить,Не люблю, но жизнь заставляет. решения по данному вопросу предложил не ты,Оппа... И где же тут предложенные не мной решения? уперся в макроподстановку, Да, уперся. Ибо в том числе и из-за нее вылезает описанное тобой поведение.
будто я кого то убил, работает с макроподстановкой, в какой то ситуации опытным путем пришел к макроподстановке (значит без нее нельзя было),Классное доказательство. :) Можно. Любую строку можно сделать из кусков без макроподстановки. Это надо доказывать? а теперь работаю по шаблону, на ограничения не натыкался, быстродействие не падает, результат правильный - ты раздуваешь проблему из нифига.Я не раздуваю проблему, а предупреждаю любителей работать по шаблону от граблей, которые они сами себе подкладывают. Ты вот как раз и наступил именно на такие грабли. Кстати, в оценке программного кода и программ кроме работоспособности и корректности существует такой критерий, как скорость исполнения. Макроподстановка тормозит.
...
Рейтинг: 0 / 0
SQLPREPARE()
    #36475512
Местами администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
igorbik,
да работает вся фигня уже давно, сейчас захотелось оптимизировать
...
Рейтинг: 0 / 0
SQLPREPARE()
    #36475540
Местами администраторпроходящий.,

сколько проиграю - 0,001 с ?На одном вызове. Сколько всего вызовов делает программа? Например при вставке 10 000 записей? К тому же зачем делать бесполезные вещи? Из-за лени подумать?
...
Рейтинг: 0 / 0
SQLPREPARE()
    #36475554
Местами администраторigorbik,
да работает вся фигня уже давно, сейчас захотелось оптимизироватьНо ускорение работы в оптимизацию не входит. Так? :)
...
Рейтинг: 0 / 0
SQLPREPARE()
    #36475568
Местами администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Любителей поучить всегда жизнь заставляет
Решение предложил PaulWist, за что ему спасибо
Я не просил оценивать стиль программирования
В данном случае при небольшой длине строки запроса отлично работает и с макроподстановкой, так что грабли в данной ситуацие не "эти"
Скорость исполнения +- 0,000001 не существенна
...
Рейтинг: 0 / 0
SQLPREPARE()
    #36475587
Местами администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проходящий.,
выиграть 5 секунд, это понятно, но из-за сотых-тысячных долей не стоит кричать, что я нифига не правильно использую фокс.
...
Рейтинг: 0 / 0
SQLPREPARE()
    #36475588
Местами администраторпроходящий.,
выиграть 5 секунд, это понятно, но из-за сотых-тысячных долей не стоит кричать, что я нифига не правильно использую фокс.И где был крик? Как надо было сообщить об этом неправильном использовании? Мелким невидимым шрифтом?
...
Рейтинг: 0 / 0
SQLPREPARE()
    #36475598
Местами администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проходящий.Местами администраторпроходящий.,
выиграть 5 секунд, это понятно, но из-за сотых-тысячных долей не стоит кричать, что я нифига не правильно использую фокс.И где был крик? Как надо было сообщить об этом неправильном использовании? Мелким невидимым шрифтом?

Уважаю, с умными собеседниками люблю пообщаться, но проблем с макроподстановкой в данной ситуации нет, разве что те несколько символов ('"'+ и +'"') и 0,...1 с снижения быстродействия....
...
Рейтинг: 0 / 0
SQLPREPARE()
    #36475607
Местами администраторВ данном случае при небольшой длине строки запроса отлично работает и с макроподстановкой, так что грабли в данной ситуацие не "эти"
Вот именно "при небольшой". И грабли таки эти. И без макроподстановки работает еще лучше. Уж поверьте старперу, оптимизировавшему тонны показанного Вами кода. И получавшего в выигрыше отнюдь не вымышленные 5 секунд, а в разы большую скорость и уменьшение времени на минуты, часы и даже сутки. Не надо забывать про законы больших чисел и про то, что большое состоит из тысячи мелочей.
...
Рейтинг: 0 / 0
SQLPREPARE()
    #36475617
Местами администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проходящий.Местами администраторВ данном случае при небольшой длине строки запроса отлично работает и с макроподстановкой, так что грабли в данной ситуацие не "эти"
Вот именно "при небольшой". И грабли таки эти. И без макроподстановки работает еще лучше. Уж поверьте старперу, оптимизировавшему тонны показанного Вами кода. И получавшего в выигрыше отнюдь не вымышленные 5 секунд, а в разы большую скорость и уменьшение времени на минуты, часы и даже сутки. Не надо забывать про законы больших чисел и про то, что большое состоит из тысячи мелочей.

Сам себе противоречишь - грабли таки эти, и без макроподстановки работает еще лучше - так с макроподстановкой все-таки работает, хуже, но все-таки (-+0...1 с), согласен?
...
Рейтинг: 0 / 0
25 сообщений из 61, страница 1 из 3
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SQLPREPARE()
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]