powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Курсорадаптер ОДБС. неверно паредается длина параметра
15 сообщений из 15, страница 1 из 1
Курсорадаптер ОДБС. неверно паредается длина параметра
    #35532154
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
text to lcSelectCmd noshow pretext  7 
	exec SELECT_names
			@cFieldsAdd = '
				kolotd    = isnull(nso1.kol,00000000.000)
			   ,cehaotd   = case when isnull(nso1.ceha,0)>0 then nso1.ceha else ns.ceha end
			   ,cehabotd  = case when nso1.cehab>0 then nso1.cehab else ns.cehab end
			   ,sell      = isnull(nso1.sell,0)
			   ,cehavotd  = isnull(nso1.cehav,00000000.000)
			   ,kolminotd = isnull(nso1.kolmin,00000000.000)
			   ,kolmaxotd = isnull(nso1.kolmax,00000000.000)
			   ,kolotdall = (select sum(kol) from namesotd nso where nso.aptik=ns.aptik)',
			@cJoinAdd    = 'inner JOIN namesotd nso1 on ns.aptik=nso1.aptik AND nso1.otdel=',
			@cJoinAddParam = ?pcOtdel, 
			@cSelectIntoAlias = '_names',
			@cSelectWhere = ?pcWhere
endtext


трейс
Код: plaintext
1.
2.
3.
4.
5.
6.
exec sp_executesql N'exec SELECT_names @cFieldsAdd = '' kolotd    = isnull(nso1.kol,00000000.000) ,cehaotd   = case when isnull(nso1.ceha,0)>0 then nso1.ceha 
else ns.ceha end ,cehabotd  = case when nso1.cehab>0 then nso1.cehab else ns.cehab end ,sell      = isnull(nso1.sell,0) ,cehavotd  = 
isnull(nso1.cehav,00000000.000) ,kolminotd = isnull(nso1.kolmin,00000000.000) ,kolmaxotd = isnull(nso1.kolmax,00000000.000) ,kolotdall = (select sum(kol) from 
namesotd nso where nso.aptik=ns.aptik)'', @cJoinAdd    = ''inner JOIN namesotd nso1 on ns.aptik=nso1.aptik AND nso1.otdel='', @cJoinAddParam = @P1 , 
@cSelectIntoAlias = ''_names'', @cSelectWhere = @P2   ',N'@P1 varchar(1),@P2 varchar(157)','0','_names.group_id IN (307,378) AND 
(_names.kol-_names.kolotdall+_names.cehavotd-_names.kcomp<>0 OR _names.kol-_names.kolotdall-_names.cehavotd-_names.kcomp<>0)'


@P2 varchar(157)

неверно передается длина параметра,

почему 157 а не 159??? режет параметр на 2 символа

пните, что не так? - не хочется костыль писать,
спасибо
...
Рейтинг: 0 / 0
Курсорадаптер ОДБС. неверно паредается длина параметра
    #35532188
12345зайчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
дописал

-- подставляемое условие запроса

долетает
..._names.kcomp<>0) -- подставляемое условие запро

пока объяснения нет
...
Рейтинг: 0 / 0
Курсорадаптер ОДБС. неверно паредается длина параметра
    #35532351
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй добавить в конец команды символ точки с запятой ";" как явный признак завершения команды

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
text to lcSelectCmd noshow pretext  7 
	exec SELECT_names
			@cFieldsAdd = '
				kolotd    = isnull(nso1.kol,00000000.000)
			   ,cehaotd   = case when isnull(nso1.ceha,0)>0 then nso1.ceha else ns.ceha end
			   ,cehabotd  = case when nso1.cehab>0 then nso1.cehab else ns.cehab end
			   ,sell      = isnull(nso1.sell,0)
			   ,cehavotd  = isnull(nso1.cehav,00000000.000)
			   ,kolminotd = isnull(nso1.kolmin,00000000.000)
			   ,kolmaxotd = isnull(nso1.kolmax,00000000.000)
			   ,kolotdall = (select sum(kol) from namesotd nso where nso.aptik=ns.aptik)',
			@cJoinAdd    = 'inner JOIN namesotd nso1 on ns.aptik=nso1.aptik AND nso1.otdel=',
			@cJoinAddParam = ?pcOtdel, 
			@cSelectIntoAlias = '_names',
			@cSelectWhere = ?pcWhere
	;
endtext
...
Рейтинг: 0 / 0
Курсорадаптер ОДБС. неверно паредается длина параметра
    #35532367
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, а есть начальное значение у параметра? Может, дело вовсе не в команде, а в самом параметре? Есть какая-то обработка самого параметра pcWhere до выполнения команды? Если поменять местами строки параметров обрезаться будет именно последний или опять же pcWhere?
...
Рейтинг: 0 / 0
Курсорадаптер ОДБС. неверно паредается длина параметра
    #35532436
нет, ничего из этого не помогает
...
Рейтинг: 0 / 0
Курсорадаптер ОДБС. неверно паредается длина параметра
    #35532757
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. обрезается именно параметр pcWhere вне зависимости от его расположения в exec? Ну, в смысле, если написать

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
text to lcSelectCmd noshow pretext  7 
	exec SELECT_names
			@cFieldsAdd = '...',
			@cJoinAdd    = '...',
			@cSelectIntoAlias = '_names',
			@cSelectWhere = ?pcWhere,
			@cJoinAddParam = ?pcOtdel 
endtext

Да, надеюсь, непосредственно перед сбросом из FoxPro смотрел, что передается на сервер именно не обрезанное значение? Если сброс по TableUpdate(), то непосредственно перед ней.
...
Рейтинг: 0 / 0
Курсорадаптер ОДБС. неверно паредается длина параметра
    #35533398
12345зайчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
единственна мысль

по трейсу вижу, что эта редиска ставит перевод каретки в строку
(хотя я его об этом не прошу)

вот если взять из трейса запрос
и в выполнить в аналайзере - обрезает

убираю перевод каретки - все красиво
...
Рейтинг: 0 / 0
Курсорадаптер ОДБС. неверно паредается длина параметра
    #35533415
12345зайчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пишу

cFilter = "1=0"+space(10)
cFilter= cFilter + " -- подставляемое условие запроса"


выполняю рефреш курсора

трейс
Код: plaintext
1.
.....  '@P1 varchar(1),@P2 varchar(48)','0','1=0             -- подставляемое условие запроса'

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


пишу

cFilter = "1=0"+space(200)
cFilter= cFilter + " -- подставляемое условие запроса"

увиличиваю длину колбасы

Код: plaintext
1.
2.
3.
,N'@P1 varchar(1),@P2 
varchar(238)','0','1=0                                                                                                                                                                                                           
-- подставляемое условие запроса'

тащу в аналайзер
выполняю

в запрос подставил
Код: plaintext
-- подставляемое условие запро
- редиска

хорошо
убираю переводы каретки

выполняю
Код: plaintext
1.
N'@P1 varchar(1),@P2 
varchar(238)','0','1=0                                                                                                                                                                                                     -- подставляемое условие запроса'

и получаю все красиво
-- подставляемое условие запроса

такая вот ерунда

при увеличении длины переменной - параметра
драйвер ее парсит и добавляет каретки

что крутить?
...
Рейтинг: 0 / 0
Курсорадаптер ОДБС. неверно паредается длина параметра
    #35533491
12345зайчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fox 9сп2
SQL Server 2005sp1
ODBC SQL Native Client
...
Рейтинг: 0 / 0
Курсорадаптер ОДБС. неверно паредается длина параметра
    #35533602
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы все-таки посмотрел значение переменной ДО отправки на сервер. Непосредственно перед заполнением курсора. Есть подозрение, что ты сам где-то вставляешь этот перевод каретки.

Ну, не может парсер по собственной инициативе влезть в середину параметра и вставить туда какой-то символ. У него же нет никаких оснований вообще лезть в параметр. Зачем? Что именно он должен парсить? Это же еще не сам запрос, а всего-лишь набор параметров.

Сделал тестовую процедурку на SQL-сервере

Код: plaintext
1.
2.
3.
4.
5.
6.
CREATE PROCEDURE Test_proc 
	@par1 varchar( 500 )
AS
BEGIN
	SELECT @par1 as test
END

Далее передаю параметр

Код: plaintext
1.
2.
3.
4.
5.
cFilter = "1=0"+space( 200 )
cFilter= cFilter + " -- подставляемое условие запроса"
=SQLExec( 1 ,"exec Test_proc @par1 = ?cFilter")
?AT(chr( 13 ),test)
?AT(chr( 10 ),test)

Все нормально. Нет символов chr(13) или chr(10) в полученной строке. Т.е. драйвер здесь не при чем. Проблема именно в самом параметре. Он уже попадает на сервер с переводом строки.

Хорошо, может прямой SQLExec() работает по другому? Делаю тест дальше

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
ca=CreateObject("CursorAdapter")
ca.DataSourceType="ODBC"
ca.Alias = "test"
ca.DataSource =  1 
ca.SelectCmd = "exec MVB_Test_proc @par1=?cFilter"
ca.cursorFill()
?AT(chr( 13 ),test.test)
?AT(chr( 10 ),test.test)

* Все норально. Добавляю значение в параметр

cFilter= cFilter + " -- дополнение"
ca.CursorRefresh()
?AT(chr( 13 ),test.test)
?AT(chr( 10 ),test.test)

Нет проблемы. Что добавил, то и пришло на сервере. Без каких-либо дополнений.

Все-таки посмотри на значение параметра на стороне FoxPro непосредственно перед выполнением CursorFill() или CursorRefresh().
...
Рейтинг: 0 / 0
Курсорадаптер ОДБС. неверно паредается длина параметра
    #35533619
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
12345зайчикfox 9сп2
SQL Server 2005sp1
ODBC SQL Native Client
С этим драйвером не работал. Возможно, Native Client действительно что-то добавляет "от себя". Вроде бы, в этом форуме уже были темы с жалобой на глюки у этого драйвера.
...
Рейтинг: 0 / 0
Курсорадаптер ОДБС. неверно паредается длина параметра
    #35533680
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VFPSP2 Повторил тест Владимира с обоими драйверами (SQL Server и SQL Native Client) ничего не обрезает
...
Рейтинг: 0 / 0
Курсорадаптер ОДБС. неверно паредается длина параметра
    #35533699
смена драйвера результатов не дала - дело не в бобине

остается добавить ему комментарий - пусть кушает - сколько влезет

пока не могу разобраться

ок, спасибо
...
Рейтинг: 0 / 0
Курсорадаптер ОДБС. неверно паредается длина параметра
    #35533740
2 Dima T

сам под столом

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

у меня проблема явная и повторяется устойчиво
...
Рейтинг: 0 / 0
Курсорадаптер ОДБС. неверно паредается длина параметра
    #35533754
видимо влияют мои настройки када
мапварчар или еще чего-то,
очень он универсальный и живет сам как я ему наказал

сейчас ломать пока не могу

обнаружена вот такая мелкая неприятная бяка
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Курсорадаптер ОДБС. неверно паредается длина параметра
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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