![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
BDE Oracle Blob
_Anton © (2005-07-13 11:13:00)По непонятной причене при использовании BDE TQuery при выгрузке и записи Blob объекта в файл - пишется только его часть размером-32k.
При чем размер не меняется даже при выставлении максимума BLOB size 1000 в алиасе БД
Неужели придется использовать TTable, или может кто уже с этим сталкивался?
код:
(Qu_All_Params.FieldByName('attribute') as TBlobField).SaveToFile(Foto_reference);
Reindeer Moss Eater (2005-07-14 12:49:00) [1]Верно. Я прогнал.
Заявление было справедливо только для DLL32=sqlora32.dll
Val (2005-07-14 10:13:00) [2]> [20] Reindeer Moss Eater © (14.07.05 08:27)
работал нормально и с тем и с другим.
Reindeer Moss Eater (2005-07-14 08:27:00) [3]BDE, насколько я помню, вообще не поддерживает ни blob ни clob.
evvcom (2005-07-14 08:09:00) [4]
> Может все же расскажешь про базовый тип блоба?
Был же ответ:
> _Anton (13.07.05 14:54) [9]
> в БД тип BLOB;
> Очень жалко, что заказчик из прошлого века - требует BDE;
> через ADO говорят все в порядке.
Попробуй DOA, он вроде халявный. Или я не прав? Если прав, то заказчику и знать необязательно, что сделано через DOA. Да и какая ему разница, если дополнительных настроек никаких (даже меньше, чем с BDE!) и денег платить не надо.
Reindeer Moss Eater (2005-07-13 20:27:00) [5]Может все же расскажешь про базовый тип блоба?
Потому что у БДЕ нет никаких проблем с поддерживаемыми им типами блоб.
> например во временной табл обязательно должен быть PK, иначе не пашет!!
Ты хочешь сказать, что у тебя была таблица без ПК и ты с помошью TQuery пытался тянуть нужную тебе запись на клиента?
_Anton (2005-07-13 17:30:00) [6]ну товарищи, не работает :((
blob cache не влияет
Остановился на решении с временной таблицей(через TTable);
правда это накладывает ряд ограничений(например во временной табл обязательно должен быть PK, иначе не пашет!!) ну и в таком духе.
Очень жалко, что заказчик из прошлого века - требует BDE;
через ADO говорят все в порядке.
Спасибо всем.
Val (2005-07-13 16:29:00) [7]хм. действительно, это не размером ли с BLOBS TO CACHE ли он вываливает?
Reindeer Moss Eater (2005-07-13 16:22:00) [8]Перед выгрузкой попробуй явно зафетчить блоб
Val (2005-07-13 16:09:00) [9]Повторяю - у меня работала и выгрузка и загрузка на обычном TQuery(в BDE blob size 1024 и т.д.).
Попробуйте чистый эксперимент - новый отдельный проект/новая форма - 1 квери поставленный в дизайне с запросом вида 'select myblobfield from mytable where id = ...'...
_Anton (2005-07-13 15:45:00) [10]1. генерим динамически не просто так, статически query тоже не выгружает, попробовал(задал blob поле)
2. Отвечаю на вопрос - в БД хранится не 32k - хотя бы потому, что через Table выгружается 635k из этого поля;
Val (2005-07-13 15:12:00) [11]Ответьте все-таки на вопрос - вы уверены что проблема при выгрузке данных из базы, откуда вы знаете, что в базе не хранится этих самых 32кб?
evvcom (2005-07-13 15:04:00) [12]А зачем вообще SQL генерить динамически? Геморроя больше, а толку мало, а то и вовсе никакого. Кроме того, постоянное Prepare увеличивает тормоза.
> выдает ошибку - доступ по адресу закрыт
Где выдает? На какой строке?
_Anton (2005-07-13 14:55:00) [13]выдает ошибку - доступ по адресу закрыт
_Anton (2005-07-13 14:54:00) [14]в БД тип BLOB;
вот в клиенте: я думал, что он автоматом определяется
после добавления запроса SQL.add (как и параметры)
возможно это не так?
делал так Qu_All_Params.Fields.Add(Qu_All_ParamsATTRIBUTE);
тогда как добавить это поле динамически?
пробовал так:
var
Qu_All_ParamsATTRIBUTE : TBlobField;
...
Qu_All_Params.SQL.Clear;
Qu_All_Params.Params.Clear;
Qu_All_Params.SQL.Add('select BIODATA.attribute from BIODATA, GR_HO_PASP where BIODATA.personid = GR_HO_PASP.id_gr_ho_pasp and BIODATA.attributetypeid=2 and GR_HO_PASP.NUM_QUESTIONNAIRE = :P_NUM_QUESTIONNAIRE');
Qu_All_Params.ParamByName('P_NUM_QUESTIONNAIRE').Value := BlankNumber;
Qu_All_ParamsATTRIBUTE.Create(nil);
Qu_All_Params.Fields.Add(Qu_All_ParamsATTRIBUTE);
Qu_All_Params.Prepared := False;
Qu_All_Params.Close;
Qu_All_Params.Open;
Reindeer Moss Eater (2005-07-13 14:10:00) [15]Ограничений на параметры не существует.
Но зато есть разница в типах данных в SQL и PL/SQL контекстах.
Например LONG ROW (но не только LONG RAW):
В таблице его длина не ограничена.
В PL/SQL максимальная длина 32760.
Поэтому и переменная и параметр процедуры этого типа не могут вместить больше данных чем 32760.
evvcom (2005-07-13 14:01:00) [16]Работаю через ODAC, тоже была подобная проблема. Уже точности не помню, писал через хранимку. Нашел инфу, что ограничения есть на передачу параметров BLOB в хранимку, причем, по-моему, не 32к, а 4к. Но у меня политика такая, что не давать юзеру прямого доступа к таблицам, поэтому ХП. Что выяснилось?
Во-первых, параметр типа BLOB должен быть in out.
Во-вторых, в insert или update обязательно вставляемое/изменяемое значение BLOB должно возвращаться опять же в этот параметр, т.е., например:
insert into MyTable (MyBLOBField) values (MyBLOBParam) returning MyBLOBField into MyBLOBParam;
В случае с TQuery попробуй такой же запрос. Удачи.
Val (2005-07-13 12:26:00) [17]какой тип данного поля в таблице на сервере?
какой тип поля на клиенте в квери(если статичекское)?
_Anton (2005-07-13 12:11:00) [18]в параметрах БД ничего, связанного с размером Blob не нашел
_Anton (2005-07-13 11:59:00) [19]загрузку в БД делал другой человек и через TTable (временную таблицу), почему не через Query - наверное тоже не работало;
Мысль интересная - посмотреть настройки Oracle - может размер там режется; Сейчас глянем
Если есть под рукой этот алиас (.cfg файл) - который рабочий -
не перешлешь глянуть?
Val (2005-07-13 11:53:00) [20]а в базу из файла загружается - нормально?