powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / VFP OLEDB и параметры ХП через ADO
23 сообщений из 23, страница 1 из 1
VFP OLEDB и параметры ХП через ADO
    #33471354
Vales
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Использую схему CBuilder6 - ADO - VFP OLEDD - VFP DBC
Есть тестовая ХП

FUNCTION tst ( C )
return '#'+C+'#'
ENDFUNC

Пытаюсь через TADOStoredProc передать параметр и получить результат, но увы. Как ни изощрялся, натыкаюсь на type mismatch или что-то подобное.

Если функция (ХП) без входного параметра - все Ок, но это малоинтересно.

Кто имеет опыт и может подсказать как правильно оформить параметры в TADOStoredProc для успеха затеи?
У меня последняя попытка выглядит так (взято из dfm формы)
========
object tsp: TADOStoredProc
Connection = dm.cn
ProcedureName = 'tst'
Parameters = <
item
DataType = ftString
Size = 5
Value = '84020'
end
item
DataType = ftString
Direction = pdReturnValue
Value = Null
end>
end
=======
Вызов tsp->ExecProc() приводит к 'Data type mismatch'

Спасибо
...
Рейтинг: 0 / 0
VFP OLEDB и параметры ХП через ADO
    #33471420
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если интересно, можете почитать пример на VB.NET передалаете под C# - там немного другой синтакс...
...
Рейтинг: 0 / 0
VFP OLEDB и параметры ХП через ADO
    #33471490
Vales
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey ChЕсли интересно, можете почитать пример на VB.NET передалаете под C# - там немного другой синтакс...
VB.NET конечно интересно, хотя в этом примере я его увидел изнутри впервые.
Не совсем понятно используется ли там тот же объект, что и ТADOStoredProc.
Не видно и возвращаемых параметров, что для меня важно.
Просто запустить ХП, задав ей параметры не составляет проблемы. Это можно сделать и без ТADOStoredProc.
Можно и результат выдать в курсор и потом его анализировать (что я сейчас и делаю и это не есть очень красиво)
Однако хотелось бы запустив процедуру, тут же получить "отчет" о ее работе.
Спасибо за участие.
...
Рейтинг: 0 / 0
VFP OLEDB и параметры ХП через ADO
    #33471705
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понятно, но к своему стыду я не знаю, что такое ТADOStoredProс...
Всегда все делал тем-же путем, что и Вы...
...
Рейтинг: 0 / 0
VFP OLEDB и параметры ХП через ADO
    #33471985
piki_piki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прощения, что-то у меня Опера глюкнула.
И так, комментарии по коду:
1) Вы не написали ни строки запроса ни строки соединения, а только def файл.
2) TADOStoredProc, зачем ? Все легко делаеться через TQuery. Всего-то создать объект, опрелить ссылка на базу, выбрать тип таблицы, заслать запрос, получить результат.
3) На крайний случай, напишие свой сервер на VFP и дергайте с него данные.
А именно так я и делаю, в силу тех причин, что приходиться поддерживать творчество С++ программистов работающих с DBF , но увы, бросивших на произвол судьбы свои программы. Вызвать метод Com server"а в С++ Builder проше простого.
Надеюсь Вы не обидетесь, что я не привожу Вам релизацию, так как даже не знаю, что там у Вас конкретно не заработало.
...
Рейтинг: 0 / 0
VFP OLEDB и параметры ХП через ADO
    #33472026
Vales
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 piki_piki
Соединение через VFP OLEDB, строка соединения стандартная.
В TADOStoredProc нет запроса. Есть имя ХП и метод ExecProc(), да еще праметры.
Или с использованием TADOCommand то же будет при CommandType=cmdStoredProcedure.
Но методы типа Exec...() этих объектов возвращают рекордсет.
Я бы хотел получить единичную величину, которую возвращает ХП. В приведенном примере это должна быть просто строка "#84020#", которая должна лежать после отработки метода ExecProc() в одном из параметров, который определяем, как выходной.
Вот такого эффекта добиться пока не удается.
А передать запрос на выполнение ХП с параметрами и получить по возврату рекордсет - это NoProblems
Эсли кто-то делал что-то подобное, прошу поделиться опытом.

P.S. А по поводу COM сервера не хочется плодить посредников. Выбор схемы определен именно компактностью решения и возможностью локального использования. Иначе можно было бы использовать что-нибудь более существенное в качестве СУБД (MS SQL и т.п.)

2 Sergey_Ch

Очевидно, что в Вашем проекте объект StoredProc совсем другое, чем TADOStoredProc. По крайней мере метода ExecScalar() (Кажется так, пишу по памяти) в моем объекте нет.
...
Рейтинг: 0 / 0
VFP OLEDB и параметры ХП через ADO
    #33472047
piki_piki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То Vales,я вот не уверен, что OLE DB VFP подерживает вызов VFP ХP. Что-то как-то даже не встерчал упоминания ни в Help по VFP ни в описании OLE DB VFP 9.0. Может запросом дернуть лучьше. И вообще зачем тебе ADO ?
Пользуйся TQuery для этих целей. И BDE настраивать не нужно на источник, сам задашь текущий каталог с таблицами в качестве параметра и запросы он отрабатывает, и множественные и скаларные.
...
Рейтинг: 0 / 0
VFP OLEDB и параметры ХП через ADO
    #33472060
Vales
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
piki_pikiТо Vales,я вот не уверен, что OLE DB VFP подерживает вызов VFP ХP. Что-то как-то даже не встерчал упоминания ни в Help по VFP ни в описании OLE DB VFP 9.0. Может запросом дернуть лучьше. И вообще зачем тебе ADO ?
Пользуйся TQuery для этих целей. И BDE настраивать не нужно на источник, сам задашь текущий каталог с таблицами в качестве параметра и запросы он отрабатывает, и множественные и скаларные.
По поводу возможностей OLE DB я тоже не совсем уверен, поэтому и спрашиваю.
А по поводу TQuery не пойму, чем это лучше например TADOQuery, да к тому же и BDE нужен. А возвращает TQuery все тот же рекордсет, как я понимаю.
Или я в чем-то неправ?
...
Рейтинг: 0 / 0
VFP OLEDB и параметры ХП через ADO
    #33472328
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
piki_pikiТо Vales,я вот не уверен, что OLE DB VFP подерживает вызов VFP ХP...Поддерживает - в моем примере приведенном выше это как раз показано.
...
Рейтинг: 0 / 0
VFP OLEDB и параметры ХП через ADO
    #33472331
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vales2 Sergey_Ch

Очевидно, что в Вашем проекте объект StoredProc совсем другое, чем TADOStoredProc. По крайней мере метода ExecScalar() (Кажется так, пишу по памяти) в моем объекте нет.
Это всего-лишь стандартные вещи из ADO.NET - там много чего есть простого и надежного
...
Рейтинг: 0 / 0
VFP OLEDB и параметры ХП через ADO
    #33473112
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Vales!

Для начала в ХП обзови переменную 2-мя буквами - или поставь префикс m. (в
строке с RETURN) - дабы не путать имя переменной с именем рабочей области.

Ну а что касается кода вызова - замени в ProcedureName значение на
'tst(?)' - по крайней мере для работы через ADO изнутри самого фокса
проходит такой синтаксис, а "голый" tst не проходит. Конечно я предполагаю
что используется наиболее свежая версия VFP OleDB провайдера - если это не
так - то скачай свежую версию с сайта MS (она свободно доступна).

Кроме того для вызова ХП через ADO надо указать явно для ADODB.Command
CommandType = adCmdStoredProc (эта константа равна 4) и при вызове метода
Execute() указать 3-й параметр - adExecuteNoRecords (эта константа равна
128) - иначе будет создан совершенно ненужный нам объект RecordSet...

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
VFP OLEDB и параметры ХП через ADO
    #33480239
Vales
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hi Igor Korolyov

По поводу m. это вряд ли что-то изменит. Здесь нет никаких рабочих областей, да и при обращении к функции другими способами, она возвращает правильный результат (например внутри select tst('jfhgkj') as qqq ).

Далее, речь идет не об ADODB.Command , а об объекте живущем в BCBuilder++(Delphi) : TADOStoredProc. В нем нет типа команды (уже как бы по умолчанию adCmdStoredProc). Есть еще объект TADOCommand, но и с ним не получается.
Может с ADODB.Command в VB или в VBS оно и прокатит, но мне нужно другое - в С++ программе работать с FOX базой.

'tst(?)' не пробовал- обязательно попробую, правда пытался пробовать 'tst(: par)' - ругается. А 'tst' устанавливается путем выбора из всплывающего меню в свойствах объекта, если указано конкретное значение Connection и ничего кроме имени ХП там по идее быть не должно.

Спасибо за участие
...
Рейтинг: 0 / 0
VFP OLEDB и параметры ХП через ADO
    #33481615
qwertyqwerty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что мешает тебе создать объект ADO в Билдере ...
...
Рейтинг: 0 / 0
VFP OLEDB и параметры ХП через ADO
    #33481956
Vales
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwertyqwertyА что мешает тебе создать объект ADO в Билдере ...
А в этом что-то есть :)
Надо правда сначала прверить работает ли то, чего я жду в ADODB
...
Рейтинг: 0 / 0
VFP OLEDB и параметры ХП через ADO
    #33483187
Vales
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем забил я на TADOStoredProc.
Сделал промежуточную функцию, которая запускает ХП передав ей параметры через запрос. ХП возвращает курсор с одной записью и одним полем-ответом о результатах своей работы. А уж эта функция возвращает мне скалярный результат.
Думаю это не хуже, чем привлекать других посредников типа OleObject и т.п., которые тоже необходимо оснастить конектом и прочее. Т.е. накладные расходы будут не менее ощутимыми.

Похоже провайдер не совсем корректно возвращает информацию о ХП и ее параметрах. По крайней мере метод Refresh параметров ни к чему не приводит.

Если все же кто-то обуздает параметры TADOStoredProc в сязке с VFP OLEDB провайдером от 9-й лисы, буду признателен за информацию.

Удачи всем :)
...
Рейтинг: 0 / 0
VFP OLEDB и параметры ХП через ADO
    #33505882
Vales
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кому еще интересно!

Решил подвести некоторые итоги своих изысков.
Цивилизованным способом передать параметры так и не удалось.
Отладка в начале ХП показывала, что параметр не поступает в процедуру, тип параметра по Туре('C') выдает всегда L.
(Здесь я сохранил в качестве имени параметра С, чтобы сохранить описанную в начале ХП. В реальной я заменил название параметра на многобуквенное.)
Удалось вернуть значение с использованием ExeсScript
Код: plaintext
1.
2.
3.
4.
ADOCommand->CommandText="ExecScript('rv=tst([84020])'+chr(13)+'return rv')";
ADOCommand->Parameters->CreateParameter("rv",ftString, pdReturnValue, 15 ,"");
ADOCommand->Execute();
ShowMessage(String(ADOCommand->Parameters->Items[ 0 ]->Value));
И увидел таки ожидаемое #84020# :)

Т.о. передал всю работу со входными параметрами фоксовской составляющей.
Еще "проходил" вариант с передачей параметров через dbf-ку, но это тоже неудобно.
С использованием ExecScript можно работать с любой процедурой, возвращающей скаляр без модификаций самих процедур.

Всем удачи!
...
Рейтинг: 0 / 0
VFP OLEDB и параметры ХП через ADO
    #33506045
luser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никогда не пользуйся TADOStoredProc - это великий глюк билдера.
Но и это:
Код: plaintext
1.
2.
3.
ADOCommand->CommandText="ExecScript('rv=tst([84020])'+chr(13)+'return rv')";
ADOCommand->Parameters->CreateParameter("rv",ftString, pdReturnValue, 15 ,"");
ADOCommand->Execute();
ShowMessage(String(ADOCommand->Parameters->Items[ 0 ]->Value));
- не выход. Тебе подсказали. Есть TQuery.
Удачи.
...
Рейтинг: 0 / 0
VFP OLEDB и параметры ХП через ADO
    #33506103
Vales
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
luserНикогда не пользуйся TADOStoredProc - это великий глюк билдера.
Но и это ...
- не выход. Тебе подсказали. Есть TQuery.

Да, но как я понимаю TQuery не дружит с VFP OLEDB провайдером.
Или я заблуждаюсь?
...
Рейтинг: 0 / 0
VFP OLEDB и параметры ХП через ADO
    #33506318
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Vales!

Если ты всё-же перешел к использованию собственно ADO - то проверь ещё раз
вариант с
CommandText = "tst(?)" ну и прочими настройками и параметарми что я
написал - ибо у меня оно без проблем работает в таком виде (из фокса, но не
вижу причин почему в другой среде будет иначе)

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
VFP OLEDB и параметры ХП через ADO
    #33509140
Vales
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В варианте CommandText = "tst(: tPar)" с использованием TADOCommand и с CommandType=cmdText действительно работает, если еще отключить возврат данных в рекордсет.
При CommandType=cmdStoredProc в CommandText должно быть только "tst", как и в TADOStoredProc. Вот это - не хочет работать.
Впрочем меня смущало, что метод ADOCommand->Execute() возвращает рекордсет, но похоже, что если он не формируется в ХП, то никаких проблем с этим нет. Хотя, как я понимаю, пустой объект все же создается и уходит в небытие по выходу из зоны видимости, а скалярная величина, возвращаемая ХР благополучно принимается параметром ADOCommand с типом Output или ReturnValue.
Думаю вопрос можно закрыть, но с TADOStoredProc так и остается непонятно.
То-ли этот объект глючный, то-ли провайдер с кривизной.

Всем спасибо :)
...
Рейтинг: 0 / 0
VFP OLEDB и параметры ХП через ADO
    #33509182
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Vales!

Помоему там как раз параметром Execute регулируется возвращает метод RS или
нет... А тип запроса вроде как не имеет к этому отношения.
Про то что надо указывать "маркер" параметра писал Алексей Цингауз -
разработчик из MSFT - поищи на foxclub.ru

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
VFP OLEDB и параметры ХП через ADO
    #33509430
luser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор авторluser
Никогда не пользуйся TADOStoredProc - это великий глюк билдера.
Но и это ...
- не выход. Тебе подсказали. Есть TQuery.

Да, но как я понимаю TQuery не дружит с VFP OLEDB провайдером.
Или я заблуждаюсь?
Ты "долбишься" к базе DBC. TQuery работает с ней так же легко как ты по утрам чистишь зубы. И ADO тебе не нужен. В данном случае - точно не нужен. Причем , я тебя уверяю, из OLE DB провайдера никуя не возвращается. Я проверял. Так, что за базар отвечаю.
Уж если хочешь ADO в С++ билдере, то посмотри в сторону TADOQuery.
Удачи.
...
Рейтинг: 0 / 0
VFP OLEDB и параметры ХП через ADO
    #33509709
Vales
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
luser Ты "долбишься" к базе DBC. TQuery работает с ней так же легко как ты по утрам чистишь зубы. И ADO тебе не нужен. В данном случае - точно не нужен. Причем , я тебя уверяю, из OLE DB провайдера никуя не возвращается. Я проверял. Так, что за базар отвечаю.
Уж если хочешь ADO в С++ билдере, то посмотри в сторону TADOQuery.
Удачи.
Вот пристал со своим TQuery.
Да использую я TADOQuery там, где нужен именно он, и TADODataSet, и TADOCommand, и даже TADOStoredProc в урезанном варианте.
Что использовать я не спрашивал и решу сам. Вопрос заключался в другом и подразумевал участие тех, кто имеет опыт работы имено со связкой VFP OLEDB и TADOStoredProc.
На предмет того, что
luser я тебя уверяю, из OLE DB провайдера никуя не возвращается
так это ложное утверждение.
Все из него возвращается в лучшем виде, вот передать ему параметры именно через TADOStoredProc не удается.
Возможно все же ситуация когда-нибудь изменится к лучшему, ведь и у OLEDB и у ADO ноги растут из одного места - Microsoft.
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / VFP OLEDB и параметры ХП через ADO
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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