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