23.12.2004, 12:05 | #1 |
Участник
|
Как вызвать через ADO хранимую процедуру с параметрами ?
Задача такая - нужно из таблиц аксапты экспортировать данные на SQL.....
( Так что для любителей все делать средствами аксапты для обеспечения целостности сразу скажу что ничего не пострадает... ;-) ) Написана хранимая процедура экспорта которая нормально работает - например такая - CREATE PROCEDURE [dbo].[axExp] @Res_ TINYINT OUTPUT AS.... и т. д. Нужно запустить процедуру из аксапты передав ей параметр и получить значение этого параметра после выполнения.... ПОмогите плиз.... |
|
23.12.2004, 12:31 | #2 |
Moderator
|
Про Oracle я писал здесь (http://www.axforum.info/forums/showt...E5%E4%F3%F0%E0).
Переделайте под MS SQL. Цитата:
Задача такая - нужно из таблиц аксапты экспортировать данные на SQL.....
|
|
23.12.2004, 12:31 | #3 |
Участник
|
Я делал так.
В моем примере хранимая процедура принимает один параметр - дату PHP код:
|
|
23.12.2004, 12:39 | #4 |
Участник
|
В том-то и дело что у CCADOComand нет такой хорошей и полезной вещи как ADOParameter....
Как же с его помошью вернуть значение ? Помогите начинающему аксаптеру.... |
|
23.12.2004, 12:43 | #5 |
Участник
|
Я ближе к вечеру Вам напишу. Сейчас некогда. А вообще - если Вы умеете работать с ADO на VB или Delphi - очень просто переписать этот код в Аксапту. Та же последовательность действий при инициализации объектов.
|
|
23.12.2004, 13:05 | #6 |
Участник
|
Очень жду ответа....
А Delphi проблем набыло - но там в ADO компонентах реализованы и методы и "пропитисы"..... Здесь непоняытно - стандартных нет - надо описывать свой класс ? Каскадные обращения не прокатили... или делал что-то не так.... |
|
23.12.2004, 13:54 | #7 |
Участник
|
Цитата:
Изначально опубликовано LSA
Очень жду ответа.... А Delphi проблем набыло - но там в ADO компонентах реализованы и методы и "пропитисы"..... если в двух словах то объектная модель ADO состоит из объектов коннект комманд параметерс еррорс с коннектом понятно, ониинициализируется строкой подключения и устанавливает соединение с сервером с команд тоже, он инициализируется командой и ее типом, в Вашем случае это хранимая процедура. параметерс, это колекция параметров каждый из которых инициализируется значением параметра, его типом и свойством возвращаемы или нет еррорс это коллекция ошибок, которую по правилам хорошего тона перед каждым шагом обнуляют а после читают на предмет ошибок сценарий доступа к данным в общем такой: - инициализировать объект коннект и подключиться к серверу - инициализировать обект комманд командой (именем SP) - инициализировать коллекцию параметерс - добавить параметер (по числу парметров SP ) - иниализировать параметры - выполнить команду - прочитать возвращенное значение переметра - закрыть соединение Каджый объект создается на основании интерфейса ком сервера ADO... по другому возвратить параметры нельзя. Можно правда запускать запускать процедуру еще одной поцедурой-оболочкой, которая будет возращать значение в возвращаемом курсоре, но это криво и не красиво.. |
|
23.12.2004, 13:56 | #8 |
Участник
|
Готово!
Вот такая хранимая процедура: PHP код:
Вот такой код в Аксапте вызывает эту процедуру и передает/получает из нее значение параметра: PHP код:
|
|
23.12.2004, 14:02 | #9 |
Участник
|
Цитата:
Изначально опубликовано LSA
В том-то и дело что у CCADOComand нет такой хорошей и полезной вещи как ADOParameter.... Как же с его помошью вернуть значение ? Помогите начинающему аксаптеру.... |
|
23.12.2004, 16:41 | #10 |
Участник
|
Спасибо большое ! Все получилось !!!
Во только работает крайне медленно... Существует ли способ ускорить ? |
|
23.12.2004, 17:37 | #11 |
Участник
|
А Вы код приведите. Должно все бысто работать. Судя по трасссировке в SQL Profiler, Аксапта сама через ADO или OLEDB с SQL-сервером работает.
|
|
23.12.2004, 17:49 | #12 |
Участник
|
Вот такой код у меня работает 6 секунд:
PHP код:
|
|
23.12.2004, 17:52 | #13 |
Участник
|
А без вызова info() вообще меньше секунды отрабатывает!
|
|
23.12.2004, 17:56 | #14 |
Участник
|
Цитата:
Изначально опубликовано Ace of Database
А Вы код приведите. Должно все бысто работать. Судя по трасссировке в SQL Profiler, Аксапта сама через ADO или OLEDB с SQL-сервером работает. насколько мне известно, все технологии всего лишь интерфейсная надстройка над API SQL server... |
|
23.12.2004, 18:07 | #15 |
Участник
|
Выдержка из MS SQL Server BooksOnline
___________________________________________________ These system stored procedures support the cursor functionality of ADO, OLE DB, ODBC, and the DB-Library Cursor Library: sp_cursor sp_cursorclose sp_cursorexecute sp_cursorfetch sp_cursoropen sp_cursoroption sp_cursorprepare sp_cursorunprepare ___________________________________________________ Почему я пришел к выводу, что Аксапта использует OLE DB, наверное потому, что при установке клиента Аксапта требует наличия не самой древней версии MDAC. |
|
23.12.2004, 18:15 | #16 |
Участник
|
Цитата:
Изначально опубликовано Ace of Database
Выдержка из MS SQL Server BooksOnline ___________________________________________________ These system stored procedures support the cursor functionality of ADO, OLE DB, ODBC, and the DB-Library Cursor Library: Других технология я и не слышал ))) но они то и являются всего лишь оболочками, правда в ADO есть еще свой процессор данных (RecordSet) Почему я пришел к выводу, что Аксапта использует OLE DB, наверное потому, что при установке клиента Аксапта требует наличия не самой древней версии MDAC. [/ Косвенные методы тоже имеют место в познании... но согласись, к трассировщику они не имеют ни какогоотношения... Хотя скорее всего ты прав, доступ осуществляется посредством OLE DB провайдера... |
|
23.12.2004, 18:17 | #17 |
Участник
|
стоп.. поначалу не понял ))) да действительно процесс создания аксаптой курсоров виденв трассировщике... ))) ты прав...
|
|