Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Возвращение результата из хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Сервер: Informix 9.4 на WinXP SP2 Клиент - winXp Sp2 + informix connect 2.90 TC6 (октябрь 2006 г.) + BDE 5.2 Запись в таблицу через хранимую процедуру в поле типа byte через BDE 5.2 проходит нормально, через ODBC (informix connect 2.90 TC6) - не проходит, молча без всяких сообщений об ошибке. По условию нужно сделать вторым способом. В чем ошибка? Процедура примерно такая: create procedure procX( x1 integer, references byte ) returning integer as doc_cnt; define xx integer; . let xx = xx + 1; . return xx; end procedure; Как видно, возвращается какое-то значение типа integer (счетчик ...). Через BDE 5.2 на query.open в тексте программы - нормально через ODBC - ошибка создания handle cursor ... Да, sql в query такой - execute procedure procX(x1, x2); Прошу помощи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2007, 23:20 |
|
||
|
Возвращение результата из хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
nm.... через ODBC - ошибка создания handle cursor ... Через Ado? или? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 08:22 |
|
||
|
Возвращение результата из хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Не через ADO. В порядке изучения ситуации сегодня установил, что выполнение, например, в ServerStudio3.5 команды вида select count(*), function_A(x1, x2) from table1 возвращает два столбца column1, column2. Через BDE и TQuery - также. Через ODBC и TQuery такой запрос не проходит - ошибка создания cursor handle. Могут (с учетом того, что x2 - это references byte) на это влиять значения client_locale и db_locale в setnet? Сейчас они не заданы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 19:19 |
|
||
|
Возвращение результата из хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Устанавливаю client_locale и db_locale в setnet в ru_ru.CP1251. Базу создаю через dbaccess (и там client_locale и db_locale = ru_ru.CP1251). dbaccess->database->info->nls = ru_ru.1251 В источнике в ODBC client_locale и db_locale = ru_ru.CP1251, соединение проверяется успешно. Через BDE идет, а через ODBC - нет. Вот полный текст процедуры, которая (execute procedure setText(...)) через ODBC не выполняется, а возвращает ошибку Error creating cursor handle. create procedure setText(iop integer, iid integer, idata references byte) returning integer as res_code; define cnt_use integer; define isid integer; let isid = dbinfo("sessionid"); select count(*) into cnt_use from i2_lock_doc where id_doc = iid and sid <> isid; if (cnt_use > 0) then return 1; end if; if (iop = 0) then update i2_Docs_text set data = idata where id_doc= iid; else insert into i2_docs_text(data, id_doc) values(idata, iid); end if; return 0; end procedure; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 22:31 |
|
||
|
Возвращение результата из хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Попробуй другие ODBC-драйверы, в разных клиентах шли разные версии и даже двух типов. Возможно, это проблема конкретного драйвера... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 22:40 |
|
||
|
Возвращение результата из хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Иду дальше: Если на вход этой процедуры create procedure setText(iop integer, iid integer, idata references byte) returning integer as res_code; вместо idata давать null (execute procedure settext(100, 200, null) ), то в ODBC она выполняется нормально и возвращает значение. ТОлько по смыслу работы там не должно быть null Попробовал несколько драйверов - одинаково. вот таблица, куда пишет setText: create table "informix".docs_text ( id SERIAL not null , id_doc INTEGER, data BYTE in ol_nm, primary key (id) constraint "informix".u111_25 ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 23:50 |
|
||
|
Возвращение результата из хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Чем все кончилось? Разбил хранимую процедуру на два отдельных запроса: select count(*) into cnt_use from i2_lock_doc where id_doc = iid and sid <> isid; и update i2_Docs_text set data = idata where id_doc= iid; / insert into i2_docs_text(data, id_doc) values(idata, iid); Так под ODBC заработало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 19:15 |
|
||
|
|

start [/forum/topic.php?fid=44&msg=34314227&tid=1608458]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
46ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
2ms |
| others: | 255ms |
| total: | 420ms |

| 0 / 0 |
