Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / BCB и получение RecordSet'а, возвращаемого SP by SQL-Links / 8 сообщений из 8, страница 1 из 1
15.03.2007, 08:24
    #34392007
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BCB и получение RecordSet'а, возвращаемого SP by SQL-Links
Вот: решил еще и сюда запостить - мо, тут помогут... Бо Борманцы мовчать, як сало в посылке

select @@version
Adaptive Server Enterprise/12.5.1/EBF 11428/P/NT (IX86)/OS 4.0/ase1251/1823/32-bit/OPT/Wed Sep 17 11:10:54 2003

ЭстЪ SP
Код: plaintext
1.
2.
3.
4.
5.
create procedure SPSmth 
as 
begin 
  select * from TableSmth
end
И вот как теперь этот recordset получить посредством SQL-Links?
На
Код: plaintext
1.
2.
3.
4.
5.
Query1->SQL->Add("SPSmth");
||
Query1->SQL->Add("exec SPSmth");
||
Query1->SQL->Add("execute SPSmth");
(после Open() ) EDBEngineError
General SQL error.
ct_fetch(): user api layer: external error: This routine cannot be called because another command structure has results pending

На
Код: plaintext
1.
Query1->SQL->Add("call SPSmth");
при Open() EDBEngineError
General SQL error.
Stored procedure 'call' not found. Specify owner.objectname or use sp_help to check whether the object exists (sp_help may produce lots of output).

На
Код: plaintext
1.
Query1->SQL->Add("{call SPSmth}");
при Open() EDBEngineError
General SQL error.
Incorrect syntax near '{'.

Для чистоты эксперимента и совести, на характер проверил Ышо и
Код: plaintext
1.
Query1->SQL->Add("select * from SPSmth");
при Open() EDBEngineError
Table does not exist.
ct_cursor(CLOSE): user api layer: external error: A cursor must be opened before this command type can be initialized

Ляно... Попробуем заюзать TStoredProc... На
Код: plaintext
1.
StoredProc1->StoredProcName="SPSmth";
(после Open() ) EDBEngineError
General SQL error.
ct_fetch(): user api layer: external error: This routine cannot be called because another command structure has results pending

Если же делать StoredProc1->ExecProc() - ессесно ничего: ни ашипок, ни данных...

Ну и как сие заборотЪ? Или Борман, опять, обложался?
_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
15.03.2007, 11:20
    #34392520
Dmitry.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BCB и получение RecordSet'а, возвращаемого SP by SQL-Links
в борланде не разбераюсь.
по sybase:

ошибка типа:
This routine cannot be called because another command structure has results pending

происходит если приходит резалт одного типа а пытаются забрать другой.

когда ты выполняешь процедуру типа:
exec SPSmth

сразу после выполнения процедуры приходит резалт типа CS_STATUS_RESULT
это есть return процедуры.

если return явно не написан - то это 0
--
думаю трабл именно в этом
...
Рейтинг: 0 / 0
15.03.2007, 11:30
    #34392575
moris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BCB и получение RecordSet'а, возвращаемого SP by SQL-Links
авторошибка типа:
This routine cannot be called because another command structure has results pending

происходит если приходит резалт одного типа а пытаются забрать другой.

Не так. Эта ошибка, говорит только о том, что перед выполнением текущей команды, была выполнена предыдущая и результат от ее выполнения - не был обработан.

Касательно борланд-метода ExecProc, то вы не можете его использовать для получения result set
You can execute a stored procedure that does not return a result set by calling ExecProc.


И вообще какой интерфейс используется - BDE/ODBC или OLEDB ?
...
Рейтинг: 0 / 0
15.03.2007, 12:00
    #34392734
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BCB и получение RecordSet'а, возвращаемого SP by SQL-Links
I'm so sorry...
Просто в дрозофиле было набросано все в кучу. А когда оставил только (за'rem'ив впереди идущие Query)
Код: plaintext
1.
2.
StoredProc1->StoredProcName="SPSmth";
StoredProc1->Open();
отработало как часики

100%-но
moris
перед выполнением текущей команды, была выполнена предыдущая и результат от ее выполнения - не был обработан

поскольку DBGrid'ы лежат на TabSheet'ах PageControl'а. А для неактивных - ничего не делается. Соответственно RecordSet от Query держал RecordSet от StoredProc.
moris
Касательно борланд-метода ExecProc, то вы не можете его использовать для получения result set
You can execute a stored procedure that does not return a result set by calling ExecProc.

Да в курсе я... То - от бессилия
и для полного перебора, так сказать, всевозможных вариантов...
moris
И вообще какой интерфейс используется - BDE/ODBC или OLEDB ?

BDE/ODBC
С OLEDB как раз проблем - никаких...
_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
15.03.2007, 12:11
    #34392782
moris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BCB и получение RecordSet'а, возвращаемого SP by SQL-Links
авторBDE/ODBC

И зачем вы разрабатываете новый код на основе BDE? BDE уже неподдерживается и последняя сертифицированная верися ASЕ кажется была 12.5.0. Как этот BDE будет работать на новых версиях ASE - не понятно. Вернее понятно - будут проблемы.... и никто их уже не исправит...
...
Рейтинг: 0 / 0
15.03.2007, 13:18
    #34393113
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BCB и получение RecordSet'а, возвращаемого SP by SQL-Links
moris
зачем вы разрабатываете новый код на основе BDE

Та то дрозофила была... Так сказать, для проверки возможности получения RecordSet'а, возвращаемого SP by SQL-Links вообще как такового...
_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
15.03.2007, 14:02
    #34393324
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BCB и получение RecordSet'а, возвращаемого SP by SQL-Links
Ex_Soft пишет:

> И вот как теперь этот recordset получить посредством SQL-Links?
> На
>
> Query1->SQL->Add("SPSmth");
> ||
> Query1->SQL->Add("exec SPSmth");
> ||
> Query1->SQL->Add("execute SPSmth");
>
> (после *Open()*)
> EDBEngineError

Open всегда использует первыый (и единственный ) набор данных.
Для перехода к последующим наборам надо использовать аналог
ODBC-шного SQLMoreResults() . Я знаю, что он есть в IDAPI
и BDE, но он не поддерживается самим VCL. Да он и не нужен
VCL-ю, потому что не понятно, что VCL мог бы с ним сделать.

> Query1->SQL->Add("call SPSmth");
> при *Open()*
> EDBEngineError
>
> General SQL error.
> Stored procedure 'call' not found. Specify owner.objectname or use
> sp_help to check whether the object exists (sp_help may produce lots of
> output).
>
>
> На
>
> Query1->SQL->Add("{call SPSmth}");
> General SQL error.
> Incorrect syntax near '{'.
Это синтаксис ODBC. В BDE все по другому.

> Ляно... Попробуем заюзать TStoredProc... На
Вот это правильно. Но только он может вызывать
только одну процедуру, не несколько подряд.

> Если же делать *StoredProc1->ExecProc()* - ессесно ничего: ни ашипок, ни
> данных...

Правильно, ExecProc() не фетчить данные. Надо использовать Open, но
он не будет обрабатывать множественные наборы данных.

> Ну и как сие заборотЪ? Или Борман, опять, обложался?

Он всегда был этим славен :-)
У них всегда была только одна ошибка - в ДНК.


Короче, если хочешь использовать множественные наборы данных, забей на
BDE и используй не BDEшные компоненты доступа. И если хочешь
использовать множественные наборы, наверное придется забить и на
VCL-ные визуальные компоненты. Потому как они ничего сделать с
несколькими наборами не смогут. Но на чисто вызовах TDataSet можно
и получить данные и что-то даже с ними сделать.

К сожалению не знаю подробностей, потому что с дельфой уже давно
завязал, чего и всем желаю. Не люблю я ее...
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
15.03.2007, 14:28
    #34393462
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BCB и получение RecordSet'а, возвращаемого SP by SQL-Links
Да весь этот менингит произрос из другого: ЭстЪ некая организация, которой поставила некая фирма ПО. В составе этого ПО ЭстЪ модуль который вытягивает по указанным в настройках командам через ODBC данные из БД. И вот он, вроде бы как, ниасилил SP, возвращающую RecordSet
Для того, что бы расставить все точки над i, необходима была дрозофила, которая через ODBC посредством нативного Sybase'вским драйвера этот RecordSet получала бы. Вот я и наваял ее быренько на стройке и VC++. И там и там - все сухо
Что и требовалось доказать. А с BDE связываться - Боже упаси
Правда у борманов и ADO с заморочками... Но это уже, как говориться, тема выходит за рамки данного форума...
_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / BCB и получение RecordSet'а, возвращаемого SP by SQL-Links / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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