|
|
|
Глюк с updateblob. Помогите плиз.
|
|||
|---|---|---|---|
|
#18+
В билдере есть такой код: UPDATEBLOB CLIENTINFO SET EXTRAINFO = :iblob_data WHERE CLIENTINFO.COCLIENT = :il_Client; Который исполняется верно. То есть запись в таблице апдейтится. Далее на базе с СУБД Oracle 9i живет такой триггер. create or replace trigger tue_clientinfo_ after update on CLIENTINFO for each row declare v_userid number; v_appid number; v_compid number; v_date date; V_RET_CODE NUMBER; v_count number; v_extrainfo BLOB; begin /***/ V_RET_CODE:=GETUSERID(V_USERID,V_APPID,V_COMPID); v_date:=sysdate; select count(*) into v_count from clientinfolog where coclient = :new.coclient; if v_count = 0 then -- raise_application_error(-20001,to_char(:new.extrainfo)); insert into clientinfolog values (:new.coclient,:new.extrainfo ,v_userid,v_date,to_date('25000101','YYYYMMDD')); else -- raise_application_error(-20001,to_char(:new.extrainfo)); update clientinfolog set uptodate = v_date where uptodate = to_date('25000101','YYYYMMDD') and coclient = :old.coclient; insert into clientinfolog values (:new.coclient,:new.extrainfo,v_userid,v_date,to_date('25000101','YYYYMMDD')); end if; end; Этот триггер ведет лог, думаю из кода понятно. Затем в билдере выполняется такой вот селект. SELECTBLOB EXTRAINFO INTO :iblob_data FROM CLIENTINFOLOG WHERE CLIENTINFOLOG.COCLIENT = :il_Client AND CLIENTINFOLOG.UPTODATE = :idt_date USING SQLCA; И этот селект падает вот с такой ошибкой: ORA-24801 : illegal parameter value in OCI lob function Самое интересно если в первом апдейте написать вместо UPDATEBLOB CLIENTINFO SET EXTRAINFO = :iblob_data WHERE CLIENTINFO.COCLIENT = :il_Client; следующее ls_string = string(iblob_data) UPDATE CLIENTINFO SET EXTRAINFO = :ls_string WHERE CLIENTINFO.COCLIENT = :il_Client; То все отлично работает, и SELECTBLOB EXTRAINFO INTO :iblob_data FROM CLIENTINFOLOG WHERE CLIENTINFOLOG.COCLIENT = :il_Client AND CLIENTINFOLOG.UPTODATE = :idt_date прекрасно работает. Уважаемые, помогите плиз, в чем может быть беда? Заранее большое спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2007, 21:36 |
|
||
|
Глюк с updateblob. Помогите плиз.
|
|||
|---|---|---|---|
|
#18+
В таблице поле типа CLOB или LONG? Драйвер O90, O84 или O73? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2007, 10:48 |
|
||
|
Глюк с updateblob. Помогите плиз.
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyВ таблице поле типа CLOB или LONG? Драйвер O90, O84 или O73? В таблице clientinfolog поле extrainfo имеет тип CLOB. Драйвер O84. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2007, 18:48 |
|
||
|
Глюк с updateblob. Помогите плиз.
|
|||
|---|---|---|---|
|
#18+
А что в blob переменной? может там бинарные данные? А при преобразовании в строку перед записью они обрезаются до первого спецсимвола. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2007, 19:49 |
|
||
|
Глюк с updateblob. Помогите плиз.
|
|||
|---|---|---|---|
|
#18+
В iblob_data хранится текст. Во всяком случае должен. он получается следующим кодом из mle_editor choose case ii_format_type case ft_RTF choose case ii_mode case me_ReadOnly ab_blob = ib_blob case me_add if ab_write_user then rte_edit.Scroll(rte_edit.LineCount()) rte_edit.ReplaceText(ls_add_string) end if rte_edit.SelectTextAll() rte_edit.Cut() rte_view.Scroll(rte_view.LineCount()) rte_view.Paste() ls_replace = rte_view.CopyRTF(FALSE) ab_blob = blob(ls_replace) ls_replace = inv_string.of_GlobalReplace(string(ab_blob),'\pard\qj}','\pard\qj') ls_replace = ls_replace + '{\f1\fs20\cf0\up0\dn0\par}\pard\qj}' ab_blob = ab_blob + blob(ls_replace) case me_edit if ab_write_user then rte_edit.Scroll(rte_edit.LineCount()) rte_edit.ReplaceText(ls_add_string) end if ls_replace = rte_edit.CopyRTF(FALSE) ab_blob = blob(ls_replace) ls_replace = inv_string.of_GlobalReplace(string(ab_blob),'\pard\qj}','\pard\qj') ls_replace = ls_replace + '{\f1\fs20\cf0\up0\dn0\par}\pard\qj}' ab_blob = blob(ls_replace) end choose case ft_String choose case ii_mode case me_ReadOnly ab_blob = ib_blob case me_add ab_blob = ib_blob + blob('~r~n') + blob(mle_edit.text) if ab_write_user then ab_blob = ab_blob + blob(ls_add_string) case me_edit ab_blob = blob(mle_edit.text) if ab_write_user then ab_blob = ab_blob + blob(ls_add_string) end choose case else ab_blob = blob('') this.lof_set_error(1,'Íåâåðíî çàäàí ôîðìàò') return failure end choose ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2007, 19:55 |
|
||
|
Глюк с updateblob. Помогите плиз.
|
|||
|---|---|---|---|
|
#18+
1) Возможно при updateblob+blob данные записываются в поле в том же бинарном представлении что и хранятся на клиенте, а при updateblob+string данные перекодируются из кодировки клиента в кодировку сервера, а при Selectblob происходит обратное преобразование независимо от типа конечной переменной. Если это так, то в первом случае Selectblob возвратит мусор если кодировки клиента и сервера отличаются (например клиент PB10, а на сервере однобайтовая кодировка). 2) А почему не использовать string всегда (вообще исключить blob) раз работа идет с текстом? 3) Также, в 8i и 9i разная работа с лобами в OCI, так что возможно проблема в том что используется драйвер o84 с сервером или клиентом 9. Какой клиент используете? 8, 9? Если 9, то попробуйте сменить драйвер на o90. Если 8, то попробуйте сменить на 9 и o90. 4) Попробуйте разные билды PB ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2007, 23:42 |
|
||
|
|

start [/forum/topic.php?fid=15&tid=1336870]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
47ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
| others: | 14ms |
| total: | 153ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...