powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Проблема передачи длинных запросов через команду SQLEXEC
12 сообщений из 12, страница 1 из 1
Проблема передачи длинных запросов через команду SQLEXEC
    #32062590
Necto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как передать с помощью этой команды больше 255 символов на SQL Server.
...
Рейтинг: 0 / 0
Проблема передачи длинных запросов через команду SQLEXEC
    #32062728
Фотография Jimmy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О чем речь то? SQLexec() - чья функция?
Если VFP - то до 16 мегабайт можно заслать так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
LOCAL lcSQL, lnConn
lcSQL =  "select ....."  && Допустимая длина строки - 16М
lnConn = SQLconnect(  "MyDsn"  )
IF SQLexec( lnConn, lcSQL,  "MyResult"  ) >  0  THEN
    SELECT MyResult
    BROWSE
ELSE
    WAIT WIND  "Error executing SQL command" 
ENDIF
SQLdisconnect( lnConn )
...
Рейтинг: 0 / 0
Проблема передачи длинных запросов через команду SQLEXEC
    #32062775
Фотография NNN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>lcSQL = "select ....." && Допустимая длина строки - 16М


Maximum length of a string literal - 255.
Так что без конкатенации не обойтись.
...
Рейтинг: 0 / 0
Проблема передачи длинных запросов через команду SQLEXEC
    #32063193
Фотография Jimmy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1.Дорогой NNN, не путай пожалуйста Божий дар с яйцами :0)
Длина символьной строки (переменной):
Maximum # of characters per character string or memory variable (см. топик Visual FoxPro System Capacities).
А литерал - это символьная константа.

2. Я САМ отправлял таким образом на MS SQL сервер команды длиной в несколько десятков килобайт - все отлично работало.
Таким образом производилась конвертация приличного массива данных в скрипт, который и вставлял собственно данные в таблицы на сервере за одну транзакцию. Не быстро, но надежно и подходяще для разовой проги .

А вообще (ради эксперимента) - пробовали заслать туда команду длиной 10МБ. Тоже сожрал.
...
Рейтинг: 0 / 0
Проблема передачи длинных запросов через команду SQLEXEC
    #32063255
Фотография NNN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> 1.Дорогой NNN, не путай пожалуйста Божий дар с яйцами :0)

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

А вообще (ради эксперимента) - пробовали заслать туда команду длиной 10МБ. Тоже сожрал.

В качестве эксперимента советую вбить эти 10 мегов ручками одной строкой, а заодно зайти в библиотеку и почитать словарь иностранных слов.
И уж совсем, ты удивишься, что в переменную можно загнать не 16М, а 2Г, но это к делу не относится..

PS Кстати, по существу вопроса, для сокращения длины передаваемой строки можно использовать параметеризированные запросы.
...
Рейтинг: 0 / 0
Проблема передачи длинных запросов через команду SQLEXEC
    #32063303
Фотография Jimmy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчет примера - ты прав. Это было сделано для ясности, но вышло противоречие. Каюсь.

Насчет 2 ГБ в символьную переменную (Char) - это как же, интересно?
Попробуй:
Код: plaintext
1.
c=SPACE( 1024 * 1024 * 16  - 32 ) && OK
c=SPACE( 1024 * 1024 * 16  - 31 ) && Error!!!


Насчет параметризированных запросов: что быстрее?
1.
Код: plaintext
1.
2.
3.
4.
5.
6.
:::
SELECT MyTable && MyTable содержит поля Field1 & Field2
SQLprepare( lnConn,  "INSERT ... VALUES( ?Field1, ?Field2 )"  )
SCAN
    * N запросов к серверу
    SQLexec( lnConn )
ENDSCAN

2.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
:::
lcSQL = ''
SELECT MyTable && MyTable содержит поля Field1 & Field2
SCAN
    lcSQL = lcSQL +  "INSERT ... VALUES('" + Field1+"','..." + CHR( 13 )
ENDSCAN
*  1  запрос к серверу
SQLexec(lnConn, lcSQL)


ЗЫ И еще не понял я наезда насчет библиотеки, но спишем на эмоции.
...
Рейтинг: 0 / 0
Проблема передачи длинных запросов через команду SQLEXEC
    #32063311
Фотография Jimmy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 NNN
Взглянул на свой топик и увидел - похоже начинается флейм. Завершим тему.

Только вот насчет 2ГБ в переменной - как?
...
Рейтинг: 0 / 0
Проблема передачи длинных запросов через команду SQLEXEC
    #32063427
Фотография NNN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Jimmy


> Взглянул на свой топик и увидел - похоже начинается флейм. Завершим тему.


С открытыми вопросами? А хорошо ли это? :) Я понимаю, что фокспро и флейм в данном форуме являются ругательствами, но для меня они стали привычкой :)

> Насчет параметризированных запросов: что быстрее?

Честно скажу - не знаю. Похоже, что второй вариант. Но я бы выбрал первый (если потеря скорости была бы некритична для пользователя) - он понятнее при чтении кода (лично для меня). Вообще, у параметризации можно выделить 3 преимущества:
1. достаточно короткая и понятная строка;
2. не требуется преобразование различных типов в строку;
3. возможность использования выходных параметров хранимых процедур.
В некоторых случаях за счет этого можно получить прирост скорости.

> Только вот насчет 2ГБ в переменной - как?

Может быть ты удивишься, но это работает:
Код: plaintext
1.
2.
3.
a = SPACE( 2 ^ 24 - 32 )
a =a + a
?LEN(a)


А 2ГБ - это ограничение размера файла в WIN32, нужно всего лишь найти подоходящий файл :)
Код: plaintext
1.
2.
a = FILETOSTR(GETFILE()) && выбираем файл пожирнее и проявляем терпение пока он грузится
?LEN(a)

Правда, особого практического применения я в этом не вижу.

>ЗЫ И еще не понял я наезда насчет библиотеки, но спишем на эмоции.

Абсолютно верно, надо же мне было чем-то ответить на Божий дар? :)

Удачи!
...
Рейтинг: 0 / 0
Проблема передачи длинных запросов через команду SQLEXEC
    #32063462
Фотография Jimmy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 NNN
Второй вариант я использовал для конвертера справочных данных и вот почему:
-- один запрос на сервер
-- этот скрипт я сохранил так же и в файл, который был приобщен к скрипту генерации БД, т.е. заскриптовал начальные данные
-- дело привычки - я уверен в результате, если посылаю полностью готовую команду, а что там делает Фокс при параметризации запроса - не знаю. В общем - не люблю.
Переменные:
Код: plaintext
1.
2.
3.
4.
5.
* Сработало на УРА (файл 44М) -  действительно удивлен!
a = FILETOSTR( "c:\arhiv\jbuilder6\jb6_windows.zip" )
? LEN(a)

* А вот здесь - ошибка (String is too long to fit)
a=a+a


PS Заходи сюда: Российский FoxPro Клуб - здесь Фокс любят и лелеят :0)
...
Рейтинг: 0 / 0
Проблема передачи длинных запросов через команду SQLEXEC
    #32063483
Фотография NNN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Jimmy

Каждому овощу - свой фрукт, в твоем случае я поступил бы также.

> а что там делает Фокс при параметризации запроса - не знаю.

Если я не ошибаюсь, то он перекладывает всю работу на ODBC. Кстати, при старых драйверах можно наткнуться на траблы.

> А вот здесь - ошибка (String is too long to fit)

Зависит от версии. Проверил на 5-м, действительно вылезает ошибка, а на 7-м все работает. У тебя видимо 6-й.

> PS Заходи сюда: Российский FoxPro Клуб - здесь Фокс любят и лелеят :0)

ОК, спасибо за приглашение :)
...
Рейтинг: 0 / 0
Проблема передачи длинных запросов через команду SQLEXEC
    #32063659
Фотография Jimmy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 NNN
Проверял на VFP7 + SP1, W2000 Pro rus + SP2
...
Рейтинг: 0 / 0
Проблема передачи длинных запросов через команду SQLEXEC
    #32063684
Фотография NNN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Jimmy

Странно все это, у меня точно такая же конфигурация. Хотя на a=a+a+a ошибка все-таки вылетает. Так что строки свыше 16М лучше не использовать, потому как недокументировано и непредсказуемо. На сим топик можно и закрыть.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Проблема передачи длинных запросов через команду SQLEXEC
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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