![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Передать BLOB без использования Temporary LOB
dima1983 © (2010-06-17 17:56:00)Нужно передать параметр BLOB в хранимую процедуру без использования временного LOB локатора. Используются компоненты DOA. Оказалось, что на машине стоят 8 клиены, а они не работают со временными LOBами :).
Сейчас вот так:
...
LOB := TLOBLocator.CreateTemporary(Oq.Session, otBLOB, true);
LOB.CopyFrom(ms,ms.size);
(*
Здесь ms это поток, который содержит передаваемые данные
*)
with OQ do begin
SetComplexVariable('sDoc',LOB);
...
Execute;
Doc.sNameDoc:=GetVariable('id');
...
Session.Commit;
end;
Кщд (2011-04-15 04:31:00) [21]>dima1983 (14.04.11 22:15) [8]
каждый сам мостит себе дорогу в ад)
успехов)
dima1983 (2011-04-14 22:15:00) [22]
> >dima1983 (13.04.11 11:55) [6]
> >8ой клиент клиент!!! ну читайте же вопрос!
> 8-ой клиент не поддерживает работу с GTT?
>
> >И зачем заводить PK если таблица только для твоего приложения
> и строчка в >ней живет менее минуты.
> затем, что достоверно полагаться можно на PK, но нельзя
> на rowid
Думаю дальше диалог бессмыслен.
Вы такой классный специалист куда там!
Кщд (2011-04-13 12:07:00) [23]>dima1983 (13.04.11 11:55) [6]
>8ой клиент клиент!!! ну читайте же вопрос!
8-ой клиент не поддерживает работу с GTT?
>И зачем заводить PK если таблица только для твоего приложения и строчка в >ней живет менее минуты.
затем, что достоверно полагаться можно на PK, но нельзя на rowid
dima1983 (2011-04-13 11:55:00) [24]
> global temporary table.
> и пляски с rowid - чреваты, ибо для записи он может меняться
> со временем.
> поэтому лучше заводить честный PK.
8ой клиент клиент!!! ну читайте же вопрос!
И зачем заводить PK если таблица только для твоего приложения и строчка в ней живет менее минуты.
Кщд (2011-04-11 08:04:00) [25]>dima1983 (11.04.11 00:07) [4]
2) Делаете в неё insert (без использования временного LOB локатора)
3) А в процедуру передаете RowId, главное потом не забыть удалить в процедуре после считывания ненужную строчку :))))
global temporary table.
и пляски с rowid - чреваты, ибо для записи он может меняться со временем.
поэтому лучше заводить честный PK.
dima1983 (2011-04-11 00:07:00) [26]Нашёл случайно свой старый вопрос :)))
Поскольку нормальных ответов на на него так никто и не дал напишу своё решение. Оно очень простое.
1) Создаете табличку в БД с полем BLOB
2) Делаете в неё insert (без использования временного LOB локатора)
3) А в процедуру передаете RowId, главное потом не забыть удалить в процедуре после считывания ненужную строчку :))))
Вот так всё просто и не нужно на Камчатку ехать клиенты обновлять :))) экономит массу гос.средств :)
Правильный$Вася (2010-06-17 19:57:00) [27]
> клиентов несколько тысяч от Калиненграда до Камчатки
кто хочет - ищет пути, кто не хочет - ищет отмазки
dima1983 (2010-06-17 19:41:00) [28]
> > Оказалось, что на машине стоят 8 клиены
>
> так заменить на те, которые соответствуют серверу
> я, кстати, неоднократно сталкивался с неработоспособностью
> в некоторых случаях комбинаций разных версий клинетов и
> сервера, что моментально исчезало при синхронизации версий
>
> так что не костыли нужно делать, а переломы лечить
Обязательно, особенно если клиентов несколько тысяч от Калиненграда до Камчатки, это ж как 2 байта переслать :) поменять пару строчек в программе гораздо сложнее :)
Ведь до 8 клиента передавались же как-то BLOB в хранимые процедуры?
Правильный$Вася (2010-06-17 19:10:00) [29]
> Оказалось, что на машине стоят 8 клиены
так заменить на те, которые соответствуют серверу
я, кстати, неоднократно сталкивался с неработоспособностью в некоторых случаях комбинаций разных версий клинетов и сервера, что моментально исчезало при синхронизации версий
так что не костыли нужно делать, а переломы лечить