Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.29;
Скачать: CL | DM;

Вниз

Как в операторе 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.021 c
1-96285
solo
2003-09-16 21:23
2003.09.29
Область отсечения канвы


11-96158
nsvi
2003-01-08 03:24
2003.09.29
Опять по Proxies.dcu.


1-96229
SergeyM
2003-09-17 16:00
2003.09.29
Генератор частот


7-96471
Шепель Николай
2003-07-17 19:07
2003.09.29
Изменения файловой системы


14-96392
Vladimir
2003-09-11 17:04
2003.09.29
Поиск записи по вложениям! HELP