|
|
|
VFP OLEDB и параметры ХП через ADO
|
|||
|---|---|---|---|
|
#18+
Использую схему 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' Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2006, 18:04 |
|
||
|
VFP OLEDB и параметры ХП через ADO
|
|||
|---|---|---|---|
|
#18+
Если интересно, можете почитать пример на VB.NET передалаете под C# - там немного другой синтакс... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2006, 20:19 |
|
||
|
VFP OLEDB и параметры ХП через ADO
|
|||
|---|---|---|---|
|
#18+
Sergey ChЕсли интересно, можете почитать пример на VB.NET передалаете под C# - там немного другой синтакс... VB.NET конечно интересно, хотя в этом примере я его увидел изнутри впервые. Не совсем понятно используется ли там тот же объект, что и ТADOStoredProc. Не видно и возвращаемых параметров, что для меня важно. Просто запустить ХП, задав ей параметры не составляет проблемы. Это можно сделать и без ТADOStoredProc. Можно и результат выдать в курсор и потом его анализировать (что я сейчас и делаю и это не есть очень красиво) Однако хотелось бы запустив процедуру, тут же получить "отчет" о ее работе. Спасибо за участие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2006, 22:36 |
|
||
|
VFP OLEDB и параметры ХП через ADO
|
|||
|---|---|---|---|
|
#18+
Понятно, но к своему стыду я не знаю, что такое ТADOStoredProс... Всегда все делал тем-же путем, что и Вы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2006, 12:30 |
|
||
|
VFP OLEDB и параметры ХП через ADO
|
|||
|---|---|---|---|
|
#18+
Прошу прощения, что-то у меня Опера глюкнула. И так, комментарии по коду: 1) Вы не написали ни строки запроса ни строки соединения, а только def файл. 2) TADOStoredProc, зачем ? Все легко делаеться через TQuery. Всего-то создать объект, опрелить ссылка на базу, выбрать тип таблицы, заслать запрос, получить результат. 3) На крайний случай, напишие свой сервер на VFP и дергайте с него данные. А именно так я и делаю, в силу тех причин, что приходиться поддерживать творчество С++ программистов работающих с DBF , но увы, бросивших на произвол судьбы свои программы. Вызвать метод Com server"а в С++ Builder проше простого. Надеюсь Вы не обидетесь, что я не привожу Вам релизацию, так как даже не знаю, что там у Вас конкретно не заработало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2006, 19:17 |
|
||
|
VFP OLEDB и параметры ХП через ADO
|
|||
|---|---|---|---|
|
#18+
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() (Кажется так, пишу по памяти) в моем объекте нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2006, 20:34 |
|
||
|
VFP OLEDB и параметры ХП через ADO
|
|||
|---|---|---|---|
|
#18+
То Vales,я вот не уверен, что OLE DB VFP подерживает вызов VFP ХP. Что-то как-то даже не встерчал упоминания ни в Help по VFP ни в описании OLE DB VFP 9.0. Может запросом дернуть лучьше. И вообще зачем тебе ADO ? Пользуйся TQuery для этих целей. И BDE настраивать не нужно на источник, сам задашь текущий каталог с таблицами в качестве параметра и запросы он отрабатывает, и множественные и скаларные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2006, 21:06 |
|
||
|
VFP OLEDB и параметры ХП через ADO
|
|||
|---|---|---|---|
|
#18+
piki_pikiТо Vales,я вот не уверен, что OLE DB VFP подерживает вызов VFP ХP. Что-то как-то даже не встерчал упоминания ни в Help по VFP ни в описании OLE DB VFP 9.0. Может запросом дернуть лучьше. И вообще зачем тебе ADO ? Пользуйся TQuery для этих целей. И BDE настраивать не нужно на источник, сам задашь текущий каталог с таблицами в качестве параметра и запросы он отрабатывает, и множественные и скаларные. По поводу возможностей OLE DB я тоже не совсем уверен, поэтому и спрашиваю. А по поводу TQuery не пойму, чем это лучше например TADOQuery, да к тому же и BDE нужен. А возвращает TQuery все тот же рекордсет, как я понимаю. Или я в чем-то неправ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2006, 21:23 |
|
||
|
VFP OLEDB и параметры ХП через ADO
|
|||
|---|---|---|---|
|
#18+
piki_pikiТо Vales,я вот не уверен, что OLE DB VFP подерживает вызов VFP ХP...Поддерживает - в моем примере приведенном выше это как раз показано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2006, 09:20 |
|
||
|
VFP OLEDB и параметры ХП через ADO
|
|||
|---|---|---|---|
|
#18+
Vales2 Sergey_Ch Очевидно, что в Вашем проекте объект StoredProc совсем другое, чем TADOStoredProc. По крайней мере метода ExecScalar() (Кажется так, пишу по памяти) в моем объекте нет. Это всего-лишь стандартные вещи из ADO.NET - там много чего есть простого и надежного ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2006, 09:22 |
|
||
|
VFP OLEDB и параметры ХП через ADO
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2006, 23:54 |
|
||
|
VFP OLEDB и параметры ХП через ADO
|
|||
|---|---|---|---|
|
#18+
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 и ничего кроме имени ХП там по идее быть не должно. Спасибо за участие ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2006, 01:05 |
|
||
|
VFP OLEDB и параметры ХП через ADO
|
|||
|---|---|---|---|
|
#18+
А что мешает тебе создать объект ADO в Билдере ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2006, 14:33 |
|
||
|
VFP OLEDB и параметры ХП через ADO
|
|||
|---|---|---|---|
|
#18+
qwertyqwertyА что мешает тебе создать объект ADO в Билдере ... А в этом что-то есть :) Надо правда сначала прверить работает ли то, чего я жду в ADODB ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2006, 16:32 |
|
||
|
VFP OLEDB и параметры ХП через ADO
|
|||
|---|---|---|---|
|
#18+
В общем забил я на TADOStoredProc. Сделал промежуточную функцию, которая запускает ХП передав ей параметры через запрос. ХП возвращает курсор с одной записью и одним полем-ответом о результатах своей работы. А уж эта функция возвращает мне скалярный результат. Думаю это не хуже, чем привлекать других посредников типа OleObject и т.п., которые тоже необходимо оснастить конектом и прочее. Т.е. накладные расходы будут не менее ощутимыми. Похоже провайдер не совсем корректно возвращает информацию о ХП и ее параметрах. По крайней мере метод Refresh параметров ни к чему не приводит. Если все же кто-то обуздает параметры TADOStoredProc в сязке с VFP OLEDB провайдером от 9-й лисы, буду признателен за информацию. Удачи всем :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2006, 01:20 |
|
||
|
VFP OLEDB и параметры ХП через ADO
|
|||
|---|---|---|---|
|
#18+
Кому еще интересно! Решил подвести некоторые итоги своих изысков. Цивилизованным способом передать параметры так и не удалось. Отладка в начале ХП показывала, что параметр не поступает в процедуру, тип параметра по Туре('C') выдает всегда L. (Здесь я сохранил в качестве имени параметра С, чтобы сохранить описанную в начале ХП. В реальной я заменил название параметра на многобуквенное.) Удалось вернуть значение с использованием ExeсScript Код: plaintext 1. 2. 3. 4. Т.о. передал всю работу со входными параметрами фоксовской составляющей. Еще "проходил" вариант с передачей параметров через dbf-ку, но это тоже неудобно. С использованием ExecScript можно работать с любой процедурой, возвращающей скаляр без модификаций самих процедур. Всем удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2006, 18:29 |
|
||
|
VFP OLEDB и параметры ХП через ADO
|
|||
|---|---|---|---|
|
#18+
Никогда не пользуйся TADOStoredProc - это великий глюк билдера. Но и это: Код: plaintext 1. 2. 3. Удачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2006, 20:05 |
|
||
|
VFP OLEDB и параметры ХП через ADO
|
|||
|---|---|---|---|
|
#18+
luserНикогда не пользуйся TADOStoredProc - это великий глюк билдера. Но и это ... - не выход. Тебе подсказали. Есть TQuery. Да, но как я понимаю TQuery не дружит с VFP OLEDB провайдером. Или я заблуждаюсь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2006, 20:50 |
|
||
|
VFP OLEDB и параметры ХП через ADO
|
|||
|---|---|---|---|
|
#18+
Hi Vales! Если ты всё-же перешел к использованию собственно ADO - то проверь ещё раз вариант с CommandText = "tst(?)" ну и прочими настройками и параметарми что я написал - ибо у меня оно без проблем работает в таком виде (из фокса, но не вижу причин почему в другой среде будет иначе) Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2006, 01:08 |
|
||
|
VFP OLEDB и параметры ХП через ADO
|
|||
|---|---|---|---|
|
#18+
В варианте CommandText = "tst(: tPar)" с использованием TADOCommand и с CommandType=cmdText действительно работает, если еще отключить возврат данных в рекордсет. При CommandType=cmdStoredProc в CommandText должно быть только "tst", как и в TADOStoredProc. Вот это - не хочет работать. Впрочем меня смущало, что метод ADOCommand->Execute() возвращает рекордсет, но похоже, что если он не формируется в ХП, то никаких проблем с этим нет. Хотя, как я понимаю, пустой объект все же создается и уходит в небытие по выходу из зоны видимости, а скалярная величина, возвращаемая ХР благополучно принимается параметром ADOCommand с типом Output или ReturnValue. Думаю вопрос можно закрыть, но с TADOStoredProc так и остается непонятно. То-ли этот объект глючный, то-ли провайдер с кривизной. Всем спасибо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2006, 22:49 |
|
||
|
VFP OLEDB и параметры ХП через ADO
|
|||
|---|---|---|---|
|
#18+
Hi Vales! Помоему там как раз параметром Execute регулируется возвращает метод RS или нет... А тип запроса вроде как не имеет к этому отношения. Про то что надо указывать "маркер" параметра писал Алексей Цингауз - разработчик из MSFT - поищи на foxclub.ru Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2006, 23:59 |
|
||
|
VFP OLEDB и параметры ХП через ADO
|
|||
|---|---|---|---|
|
#18+
автор авторluser Никогда не пользуйся TADOStoredProc - это великий глюк билдера. Но и это ... - не выход. Тебе подсказали. Есть TQuery. Да, но как я понимаю TQuery не дружит с VFP OLEDB провайдером. Или я заблуждаюсь? Ты "долбишься" к базе DBC. TQuery работает с ней так же легко как ты по утрам чистишь зубы. И ADO тебе не нужен. В данном случае - точно не нужен. Причем , я тебя уверяю, из OLE DB провайдера никуя не возвращается. Я проверял. Так, что за базар отвечаю. Уж если хочешь ADO в С++ билдере, то посмотри в сторону TADOQuery. Удачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2006, 15:35 |
|
||
|
VFP OLEDB и параметры ХП через ADO
|
|||
|---|---|---|---|
|
#18+
luser Ты "долбишься" к базе DBC. TQuery работает с ней так же легко как ты по утрам чистишь зубы. И ADO тебе не нужен. В данном случае - точно не нужен. Причем , я тебя уверяю, из OLE DB провайдера никуя не возвращается. Я проверял. Так, что за базар отвечаю. Уж если хочешь ADO в С++ билдере, то посмотри в сторону TADOQuery. Удачи. Вот пристал со своим TQuery. Да использую я TADOQuery там, где нужен именно он, и TADODataSet, и TADOCommand, и даже TADOStoredProc в урезанном варианте. Что использовать я не спрашивал и решу сам. Вопрос заключался в другом и подразумевал участие тех, кто имеет опыт работы имено со связкой VFP OLEDB и TADOStoredProc. На предмет того, что luser я тебя уверяю, из OLE DB провайдера никуя не возвращается так это ложное утверждение. Все из него возвращается в лучшем виде, вот передать ему параметры именно через TADOStoredProc не удается. Возможно все же ситуация когда-нибудь изменится к лучшему, ведь и у OLEDB и у ADO ноги растут из одного места - Microsoft. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2006, 00:29 |
|
||
|
|

start [/forum/topic.php?fid=41&fpage=278&tid=1592494]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
48ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
| others: | 263ms |
| total: | 414ms |

| 0 / 0 |
