Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Курсорадаптер ОДБС. неверно паредается длина параметра  [new]
12345вышелзайчикпогулять
Guest
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


трейс
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 символа

пните, что не так? - не хочется костыль писать,
спасибо
10 сен 08, 15:22    [6169387]     Ответить | Цитировать Сообщить модератору
 Re: Курсорадаптер ОДБС. неверно паредается длина параметра  [new]
12345зайчик
Guest
дописал

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

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

пока объяснения нет
10 сен 08, 15:30    [6169447]     Ответить | Цитировать Сообщить модератору
 Re: Курсорадаптер ОДБС. неверно паредается длина параметра  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Попробуй добавить в конец команды символ точки с запятой ";" как явный признак завершения команды

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
10 сен 08, 16:16    [6169782]     Ответить | Цитировать Сообщить модератору
 Re: Курсорадаптер ОДБС. неверно паредается длина параметра  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Кстати, а есть начальное значение у параметра? Может, дело вовсе не в команде, а в самом параметре? Есть какая-то обработка самого параметра pcWhere до выполнения команды? Если поменять местами строки параметров обрезаться будет именно последний или опять же pcWhere?
10 сен 08, 16:20    [6169823]     Ответить | Цитировать Сообщить модератору
 Re: Курсорадаптер ОДБС. неверно паредается длина параметра  [new]
12345вышелзайчикпогулять
Guest
нет, ничего из этого не помогает
10 сен 08, 16:41    [6169983]     Ответить | Цитировать Сообщить модератору
 Re: Курсорадаптер ОДБС. неверно паредается длина параметра  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Т.е. обрезается именно параметр pcWhere вне зависимости от его расположения в exec? Ну, в смысле, если написать

text to lcSelectCmd noshow pretext 7
	exec SELECT_names
			@cFieldsAdd = '...',
			@cJoinAdd    = '...',
			@cSelectIntoAlias = '_names',
			@cSelectWhere = ?pcWhere,
			@cJoinAddParam = ?pcOtdel 
endtext

Да, надеюсь, непосредственно перед сбросом из FoxPro смотрел, что передается на сервер именно не обрезанное значение? Если сброс по TableUpdate(), то непосредственно перед ней.
10 сен 08, 18:36    [6170680]     Ответить | Цитировать Сообщить модератору
 Re: Курсорадаптер ОДБС. неверно паредается длина параметра  [new]
12345зайчик
Guest
единственна мысль

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

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

убираю перевод каретки - все красиво
11 сен 08, 10:32    [6171910]     Ответить | Цитировать Сообщить модератору
 Re: Курсорадаптер ОДБС. неверно паредается длина параметра  [new]
12345зайчик
Guest
пишу

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


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

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

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


пишу

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

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

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

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

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

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

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

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

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

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

что крутить?
11 сен 08, 10:43    [6171975]     Ответить | Цитировать Сообщить модератору
 Re: Курсорадаптер ОДБС. неверно паредается длина параметра  [new]
12345зайчик
Guest
fox 9сп2
SQL Server 2005sp1
ODBC SQL Native Client
11 сен 08, 11:14    [6172199]     Ответить | Цитировать Сообщить модератору
 Re: Курсорадаптер ОДБС. неверно паредается длина параметра  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Я бы все-таки посмотрел значение переменной ДО отправки на сервер. Непосредственно перед заполнением курсора. Есть подозрение, что ты сам где-то вставляешь этот перевод каретки.

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

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

CREATE PROCEDURE Test_proc 
	@par1 varchar(500)
AS
BEGIN
	SELECT @par1 as test
END

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

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() работает по другому? Делаю тест дальше

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().
11 сен 08, 11:42    [6172471]     Ответить | Цитировать Сообщить модератору
 Re: Курсорадаптер ОДБС. неверно паредается длина параметра  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
12345зайчик
fox 9сп2
SQL Server 2005sp1
ODBC SQL Native Client

С этим драйвером не работал. Возможно, Native Client действительно что-то добавляет "от себя". Вроде бы, в этом форуме уже были темы с жалобой на глюки у этого драйвера.
11 сен 08, 11:45    [6172504]     Ответить | Цитировать Сообщить модератору
 Re: Курсорадаптер ОДБС. неверно паредается длина параметра  [new]
Dima T
Member

Откуда:
Сообщений: 15297
VFPSP2 Повторил тест Владимира с обоими драйверами (SQL Server и SQL Native Client) ничего не обрезает
11 сен 08, 12:06    [6172691]     Ответить | Цитировать Сообщить модератору
 Re: Курсорадаптер ОДБС. неверно паредается длина параметра  [new]
12345вышелзайчик
Guest
смена драйвера результатов не дала - дело не в бобине

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

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

ок, спасибо
11 сен 08, 12:12    [6172736]     Ответить | Цитировать Сообщить модератору
 Re: Курсорадаптер ОДБС. неверно паредается длина параметра  [new]
12345вышелзайчик
Guest
2 Dima T

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

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

у меня проблема явная и повторяется устойчиво
11 сен 08, 12:27    [6172859]     Ответить | Цитировать Сообщить модератору
 Re: Курсорадаптер ОДБС. неверно паредается длина параметра  [new]
12345вышелзайчик
Guest
видимо влияют мои настройки када
мапварчар или еще чего-то,
очень он универсальный и живет сам как я ему наказал

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

обнаружена вот такая мелкая неприятная бяка
11 сен 08, 12:30    [6172897]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить