![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как в операторе INSERT INTO ... записать двоичные данные в BLOB
firewal1 © (2003-08-28 13:12:00)
Как в операторе INSERT INTO ... записать двоичные данные в BLOB поле
Nikolay M. (2003-09-10 10:54:00) [1]
> А какие функции в Delphi есть для этого, если ты сталкивался
> с такой задачей
На Торри полно компонент.
Но можно сделать и самому, вручную. Задача: перевести число в диапазоне [0..255] -> [32..127]. Самое простое: исходный БЛОБовский байт пилится на два текстовых символа.
Преобразование в текст:
char1 := Char((blob_byte AND 15) + 32);
char2 := Char(((blob_byte AND 240) shr 4) + 32);
Преобразование обратно в блоб:
blob_byte := (byte(char1) - 32) + ((byte(char2) - 32) shl 4);
Может малость где попутал - на ходу пишу...
firewal1 (2003-09-10 10:48:00) [2]
>Nikolay M
А какие функции в Delphi есть для этого, если ты сталкивался с такой задачей. И если знаешь то какие в ASP есть для обратного преобразования
Nikolay M. (2003-09-10 10:44:00) [3]
> Как же мне тогда передать BLOB
Есть масса алгоритмов перевода двоичных данных в текстовые. UUENCODE, Base64, например...
firewal1 (2003-09-10 10:40:00) [4]
>Digitman
Тогда может посоветуешь мне как справиться с такой задачей...
У меня есть WEB-сайт с базой на Access. Эту базу синхронизирует с локальной программа, которая с помощью HTTP запросов передает на сайт SQL-операторы. Как же мне тогда передать BLOB. Может быть вначале преобразовать его в AT-последовательность, а затем на сайте сделать обратное преобразование и записать как тв написал в последнем ответе? Очень нужно решение...
Nikolay M. (2003-09-10 10:39:00) [5]
Изврат, конечно, но так работает:
INSERT INTO t (f) VALUES (CHR(1))
Но ты бы хоть описал, зачем тебе это нужно...
Digitman (2003-09-10 10:34:00) [6]
можно, конечно, сделать и так :
INSERT INTO MyTable(BlobField) VALUES(:BlobParameter)
....
MyInsertQuery.Prepare;
MyInsertQuery.ParamByName("BlobParameter").AsBlob := "Длиннющая строка символов";
MyInsertQuery.ExecSQL;
но суть происходящего от этого не меняется
Digitman (2003-09-10 10:32:00) [7]
нельзя
при вставке/модификации в физическом поле MyTable(BlobField) сохраняется не сами Blob-данные, а BlobId - идент-р материализованного Blob-объекта. Т.е. значение параметра BlobParameter предст. собой не собственно Blob-данные, а идент-р
формированием внутреннего Blob-объекта и его идентиф-ра как раз и занимается метод TParam.SetBlobData().
firewal1 (2003-09-10 10:29:00) [8]
нет у меня база на Access.
Nikolay M. (2003-09-10 10:26:00) [9]
В MySQL блобы легко слэшируются.
Если у тебя мускул, посмотри, как это делает mysqldump - создай блобовое поле, запиши туда картинку и сдамьп таблицу, после чего смотри на получившийся текстовик.
firewal1 (2003-09-10 10:22:00) [10]
а можно ли как-нибудь записать в "чистом" виде только через строку SQL (insert into MyTable (BlobField) values (:"а здесь данные")) может быть нужно преобразовывать каждый символ, как например в HTTP значения ролей формы с помощью функции преобразовывается в AT-последовательность
Digitman (2003-09-10 10:17:00) [11]
INSERT INTO MyTable(BlobField) VALUES(:BlobParameter)
....
MyInsertQuery.Prepare;
MyInsertQuery.ParamByName("BlobParameter").SetBlobData(MyBuffer, MyBufSize);
MyInsertQuery.ExecSQL;
firewal1 (2003-09-10 09:58:00) [12]
>Digitman
на клиентской стороне
Digitman (2003-08-29 09:14:00) [13]
> firewal1
ты вообще о чем речь ведешь ? где этот INSERT ты пытаешься запустить на исполнение ? в хранимой процедуре (серверная сторона) или на клиентской стороне ?
Zacho (2003-08-29 08:42:00) [14]
> firewal1 (29.08.03 08:36) [6]
Это имя параметра. А какой тип - зависит от компонент доступа к БД.
firewal1 (2003-08-29 08:36:00) [15]
а BLOB_VALUE - это имя переменной (и какой тип должен быть у нее) ?
Zacho (2003-08-29 08:28:00) [16]
Параметризированным запросом. INSERT INTO .. (BLOB_FIELD) VALUES (:BLOB_VALUE)
И пихать эти данные в параметр.
don-do (2003-08-29 08:23:00) [17]
тип поля TBlobField специально заточен для этого, он использует API функции.
firewal1 (2003-08-29 08:15:00) [18]
А как тогда можно с помощью SQL операторов записать данные в BLOB - должно ведь быть решение!
roottim (2003-08-29 08:06:00) [19]
> INSERT INTO ... записать двоичные данные в BLOB поле
т.о. никак
firewal1 (2003-08-29 08:02:00) [20]
Неужели никто не знает! Очень нужно для записи в базу картинок и прочего