![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
MIDAS, Oracle, передача в BLOB через параметр
Unk © (2004-04-08 05:58:00)При вставке двоичного файла в BLOB поле через параметр ClientDatasеt-а происходит резка файла до 6 байт. Текстовый файл вставляется нормально.
BlobClientDataSet.CommandText:=’insert into app_files (file_name, binary_file) values (:file_name, :binary_file);
BlobClientDataSet.params.findparam(‘file_name’).asstring:=extractfilename(‘c:\files\test.mp3’);
BlobClientDataSet.params.findparam(‘binary_file’).LoadFromFile(‘c:\files\test.mp3’, ftBlob);
BlobClientDataSet.execute;
При LoadFromStream происходит то же самое. На сервере приложений у провайдера dataset-ом является TOraQuery (компоненты ODAC).
Что не так или что необходимо добавить в код? Буду очень признателен за помощь.
Unk (2004-04-08 17:37:00) [1]Кто-нибудь сталкивался с подобной проблемой в конце концов?
Reindeer Moss Eater (2004-04-08 12:09:00) [2]Попробуй подменить свой mp3 большим текстовым файлом.
Хотя и так ясно, что это тонкий клиент не понимает, что поле не текстовое а двоичное
Unk (2004-04-08 11:42:00) [3]через параметры TOraQuery (ODAC) все записывает нормально, а вот через параметр ClientDataSet не передает
Reindeer Moss Eater (2004-04-08 11:39:00) [4]Тогда наверное тонкий клиент считает что поле текстовое или мемо. Ну и до первого нулевого байта принимает данные.
Попробуй подменить свой mp3 большим текстовым файлом
Unk (2004-04-08 11:37:00) [5]я уже использовал условие returning и Empty_Blob() и с локаторами вообще ничего не вставляет, а без них только 6-7 байт файла
Reindeer Moss Eater (2004-04-08 11:33:00) [6]Скорее всего неправильно сгенерирован SQL для insert операции на сервере приложений.
С блобами работают через локаторы, которые сначала надо создать и связать с полем конкретной записи
Reindeer Moss Eater (2004-04-08 11:25:00) [7]Хотя нет, вру
Reindeer Moss Eater (2004-04-08 11:25:00) [8]Нет такого типа поля в Оракл
Unk (2004-04-08 11:24:00) [9]Поле типа Blob в БД Oracle
Reindeer Moss Eater (2004-04-08 11:22:00) [10]Тип поля в таблице вообще какой?
Johnmen (2004-04-08 11:20:00) [11]>Reindeer Moss Eater © (08.04.04 11:14) [9]
На это лучше не надеяться...
>Unk (08.04.04 11:13) [8]
MySream.Seek(soFromBeginning,0);
Reindeer Moss Eater (2004-04-08 11:14:00) [12]Тип данных у параметра определяется операцией присвоения параметру значения.
Так что это здесь - не причем
Unk (2004-04-08 11:13:00) [13]>это не влияет на результат
И как указатель потока установить в начало?
Unk (2004-04-08 11:11:00) [14]А как его задать, пример можно, у меня комп с делфей пока недоступен, datatype является свойством чего?
Reindeer Moss Eater (2004-04-08 11:10:00) [15]Тип поля вообще какой?
Johnmen (2004-04-08 11:09:00) [16]1. Не указан тип данных параметра
2.
>это не влияет на результат
Возможно указатель потока не стоит в начале...
Nikolay M. (2004-04-08 11:08:00) [17]Про .DataType речь.
Unk (2004-04-08 10:59:00) [18].paramtype:=ptInput;
Касаемо .ParamByName('...').LoadFromStream(...,ftBLOB); - это не влияет на результат
Nikolay M. (2004-04-08 09:48:00) [19]Сначала не по сабжу, бросилось в глаза:
BlobClientDataSet.params. findparam(‘binary_file’)
Ты в курсе, что произойдет, если в один прекрасный день ты поменяешь имя параметра с binary_file на mega_binary_file? Всего лишь небольшой AV. Попалась мне как-то в наследство программка, автор которой использовал FindParam. А поскольку с момента написания программы прошло туева хуча времени, названия параметров поменялись и проверка этим "программистом" на (FindParam <> nil) просто не присваивала значения. Как следствие, банковская программа молчадолгое время работала неправильно! Руки бы поотрывал...
Что до сабжа, до у параметра, имхо, тип еще нужно выставить.
Johnmen (2004-04-08 09:35:00) [20]1. Не указан тип параметра binary_file
2. params.ParamByName('...').LoadFromStream(...,ftBLOB);