Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как в операторе 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]

Неужели никто не знает! Очень нужно для записи в базу картинок и прочего


Наверх

Титульная страница Поиск, карта сайта Написать письмо