|
SQLPREPARE()
|
|||
---|---|---|---|
#18+
Выполняю запросы к 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) начинает ругаться: "Команда содержит нераспознанное ключевое слово или фразу", хотя сам запрос однозначно правильный. Подскажите что за фигня, как побороть или обойти. Приходиться потом выбрасывать данные, которые не нужны... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2010, 14:06 |
|
SQLPREPARE()
|
|||
---|---|---|---|
#18+
Местами администраторкогда начинаю увеличивать длину запроса (указываю перечень полей для загрузки, использовать условия сортировки, группировки и т.д.) ~>240 символов, фокс (9) начинает ругаться Только по своему опыту! Не вдаваясь в детали, в таких случаях я делаю несколько запросов к вновь получаемым курсорам, всякий раз убирая лишнее. На практике время выполнения запросов некритична, а экономия на программировании - часы или даже дни. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2010, 14:38 |
|
SQLPREPARE()
|
|||
---|---|---|---|
#18+
igorbikНе вдаваясь в детали, в таких случаях я делаю несколько запросов к вновь получаемым курсорам, всякий раз убирая лишнее. На практике время выполнения запросов некритична, а экономия на программировании - часы или даже дни. Сейчас поступаю так же, но как-то не хорошо, поднимаю с сервера примерно 300 тыс записей, из которых мне нужно всего то процентов 5-15. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2010, 15:00 |
|
SQLPREPARE()
|
|||
---|---|---|---|
#18+
Местами администраторВыполняю запросы к SQL серверу через ODBC при помощи примерно такой конструкции: tVdok='"'+'select * from fn98'+'"' nResult=SQLPREPARE(nShandle, &tVdok, "fn98") ЗАЧЕМ тут эти танцы с бубном? ЗАЧЕМ здесь макроподстановка? Уберите ее и все наладится. Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2010, 15:01 |
|
SQLPREPARE()
|
|||
---|---|---|---|
#18+
проходящий.Местами администраторВыполняю запросы к SQL серверу через ODBC при помощи примерно такой конструкции: tVdok='"'+'select * from fn98'+'"' nResult=SQLPREPARE(nShandle, &tVdok, "fn98") ЗАЧЕМ тут эти танцы с бубном? ЗАЧЕМ здесь макроподстановка? Уберите ее и все наладится. Код: plaintext 1.
конкретно в этом случае макроподстановка не нужна, но это ведь примерная конструкция запроса, если его текст привести полностью, то макроподстановка еще как нужна. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2010, 15:12 |
|
SQLPREPARE()
|
|||
---|---|---|---|
#18+
Местами администраторконкретно в этом случае макроподстановка не нужна, но это ведь примерная конструкция запроса, если его текст привести полностью, то макроподстановка еще как нужна.Не надо рассказывать сказки. Для формирования любой строки макроподстановка не нужна. Точка. Лучше внимательно посмотрите на text ... endtext, особенно опцию textmerge. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2010, 15:16 |
|
SQLPREPARE()
|
|||
---|---|---|---|
#18+
проходящий.Местами администраторВыполняю запросы к SQL серверу через ODBC при помощи примерно такой конструкции: tVdok='"'+'select * from fn98'+'"' nResult=SQLPREPARE(nShandle, &tVdok, "fn98") ЗАЧЕМ тут эти танцы с бубном? ЗАЧЕМ здесь макроподстановка? Уберите ее и все наладится. Код: plaintext 1.
попробуй сам, 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' база данных не понадобиться (до нее дело не дойдет), скопируйте все в фокс и попробуйте сохранить... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2010, 15:18 |
|
SQLPREPARE()
|
|||
---|---|---|---|
#18+
Местами администраторпроходящий.Местами администраторВыполняю запросы к SQL серверу через ODBC при помощи примерно такой конструкции: tVdok='"'+'select * from fn98'+'"' nResult=SQLPREPARE(nShandle, &tVdok, "fn98") ЗАЧЕМ тут эти танцы с бубном? ЗАЧЕМ здесь макроподстановка? Уберите ее и все наладится. Код: plaintext 1.
попробуй сам, 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2010, 15:23 |
|
SQLPREPARE()
|
|||
---|---|---|---|
#18+
да прочитал, но речь то была о макроподстановке, ее "убрать и все наладиться". За ответ спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2010, 15:25 |
|
SQLPREPARE()
|
|||
---|---|---|---|
#18+
Местами администраторда прочитал, но речь то была о макроподстановке, ее "убрать и все наладиться". За ответ спасибо.Предложение попробовать мне выполнить в фоксе строку с присвоением переменной значения текстовой константы длиной боле 254 символов к макроподстановке отношения не имеет. Это ошибка писателя сей строки. Потому отсылка к статье про строки. Макроподстановка для передачи символьного параметра функции - вредная бессмыслица, вызванная, вероятно, первой причиной - неумением работать со строками и незнание правил и ограничений в такой работе. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2010, 15:35 |
|
SQLPREPARE()
|
|||
---|---|---|---|
#18+
Местами администратор, кстати, вызывать SQLPREPARE() для однокрано выполняемого батча - бессмыслица. Выигрыша по сравнению с простым SQLEXEC() никакого, даже проигрыш на количесвте выполняемых команд. Вот для повторения одно и то же команды - самое то. Код: plaintext 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2010, 15:41 |
|
SQLPREPARE()
|
|||
---|---|---|---|
#18+
проходящий., Любишь ты поучить, решения по данному вопросу предложил не ты, уперся в макроподстановку, будто я кого то убил, работает с макроподстановкой, в какой то ситуации опытным путем пришел к макроподстановке (значит без нее нельзя было), а теперь работаю по шаблону, на ограничения не натыкался, быстродействие не падает, результат правильный - ты раздуваешь проблему из нифига. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2010, 15:44 |
|
SQLPREPARE()
|
|||
---|---|---|---|
#18+
проходящий., сколько проиграю - 0,001 с ? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2010, 15:45 |
|
SQLPREPARE()
|
|||
---|---|---|---|
#18+
Местами администраторigorbikНе вдаваясь в детали, в таких случаях я делаю несколько запросов к вновь получаемым курсорам, всякий раз убирая лишнее. На практике время выполнения запросов некритична, а экономия на программировании - часы или даже дни. Сейчас поступаю так же, но как-то не хорошо, поднимаю с сервера примерно 300 тыс записей, из которых мне нужно всего то процентов 5-15. Не вдаваясь в детали и только по опыту: в каждый из запросов, в том числе первый, включите ТОЛЬКО те критерии, которые вытащат либо меньшее кол-во полей, либо строк. Это не так сложно. Сделайте это, запустите проект в работу, и уже когда все заработает (пусть неспеша, но надежно), займитесь спокойно экспериментами по сабжу. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2010, 15:46 |
|
SQLPREPARE()
|
|||
---|---|---|---|
#18+
Местами администраторпроходящий., Любишь ты поучить,Не люблю, но жизнь заставляет. решения по данному вопросу предложил не ты,Оппа... И где же тут предложенные не мной решения? уперся в макроподстановку, Да, уперся. Ибо в том числе и из-за нее вылезает описанное тобой поведение. будто я кого то убил, работает с макроподстановкой, в какой то ситуации опытным путем пришел к макроподстановке (значит без нее нельзя было),Классное доказательство. :) Можно. Любую строку можно сделать из кусков без макроподстановки. Это надо доказывать? а теперь работаю по шаблону, на ограничения не натыкался, быстродействие не падает, результат правильный - ты раздуваешь проблему из нифига.Я не раздуваю проблему, а предупреждаю любителей работать по шаблону от граблей, которые они сами себе подкладывают. Ты вот как раз и наступил именно на такие грабли. Кстати, в оценке программного кода и программ кроме работоспособности и корректности существует такой критерий, как скорость исполнения. Макроподстановка тормозит. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2010, 15:51 |
|
SQLPREPARE()
|
|||
---|---|---|---|
#18+
igorbik, да работает вся фигня уже давно, сейчас захотелось оптимизировать ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2010, 15:56 |
|
SQLPREPARE()
|
|||
---|---|---|---|
#18+
Местами администраторпроходящий., сколько проиграю - 0,001 с ?На одном вызове. Сколько всего вызовов делает программа? Например при вставке 10 000 записей? К тому же зачем делать бесполезные вещи? Из-за лени подумать? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2010, 16:03 |
|
SQLPREPARE()
|
|||
---|---|---|---|
#18+
Местами администраторigorbik, да работает вся фигня уже давно, сейчас захотелось оптимизироватьНо ускорение работы в оптимизацию не входит. Так? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2010, 16:07 |
|
SQLPREPARE()
|
|||
---|---|---|---|
#18+
Любителей поучить всегда жизнь заставляет Решение предложил PaulWist, за что ему спасибо Я не просил оценивать стиль программирования В данном случае при небольшой длине строки запроса отлично работает и с макроподстановкой, так что грабли в данной ситуацие не "эти" Скорость исполнения +- 0,000001 не существенна ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2010, 16:13 |
|
SQLPREPARE()
|
|||
---|---|---|---|
#18+
проходящий., выиграть 5 секунд, это понятно, но из-за сотых-тысячных долей не стоит кричать, что я нифига не правильно использую фокс. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2010, 16:19 |
|
SQLPREPARE()
|
|||
---|---|---|---|
#18+
Местами администраторпроходящий., выиграть 5 секунд, это понятно, но из-за сотых-тысячных долей не стоит кричать, что я нифига не правильно использую фокс.И где был крик? Как надо было сообщить об этом неправильном использовании? Мелким невидимым шрифтом? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2010, 16:21 |
|
SQLPREPARE()
|
|||
---|---|---|---|
#18+
проходящий.Местами администраторпроходящий., выиграть 5 секунд, это понятно, но из-за сотых-тысячных долей не стоит кричать, что я нифига не правильно использую фокс.И где был крик? Как надо было сообщить об этом неправильном использовании? Мелким невидимым шрифтом? Уважаю, с умными собеседниками люблю пообщаться, но проблем с макроподстановкой в данной ситуации нет, разве что те несколько символов ('"'+ и +'"') и 0,...1 с снижения быстродействия.... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2010, 16:24 |
|
SQLPREPARE()
|
|||
---|---|---|---|
#18+
Местами администраторВ данном случае при небольшой длине строки запроса отлично работает и с макроподстановкой, так что грабли в данной ситуацие не "эти" Вот именно "при небольшой". И грабли таки эти. И без макроподстановки работает еще лучше. Уж поверьте старперу, оптимизировавшему тонны показанного Вами кода. И получавшего в выигрыше отнюдь не вымышленные 5 секунд, а в разы большую скорость и уменьшение времени на минуты, часы и даже сутки. Не надо забывать про законы больших чисел и про то, что большое состоит из тысячи мелочей. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2010, 16:27 |
|
SQLPREPARE()
|
|||
---|---|---|---|
#18+
проходящий.Местами администраторВ данном случае при небольшой длине строки запроса отлично работает и с макроподстановкой, так что грабли в данной ситуацие не "эти" Вот именно "при небольшой". И грабли таки эти. И без макроподстановки работает еще лучше. Уж поверьте старперу, оптимизировавшему тонны показанного Вами кода. И получавшего в выигрыше отнюдь не вымышленные 5 секунд, а в разы большую скорость и уменьшение времени на минуты, часы и даже сутки. Не надо забывать про законы больших чисел и про то, что большое состоит из тысячи мелочей. Сам себе противоречишь - грабли таки эти, и без макроподстановки работает еще лучше - так с макроподстановкой все-таки работает, хуже, но все-таки (-+0...1 с), согласен? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2010, 16:30 |
|
|
start [/forum/topic.php?fid=41&msg=36475473&tid=1585583]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
32ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
71ms |
get tp. blocked users: |
1ms |
others: | 17ms |
total: | 169ms |
0 / 0 |