Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
8-96302
IGORka
2003-06-02 18:18
2003.09.29
Image - StretchBlt - CopyRect


1-96201
Relaxxx
2003-09-15 12:04
2003.09.29
TreeView


7-96459
Landgraph
2003-07-17 09:12
2003.09.29
Разрешение в DOS


1-96226
MakNik
2003-09-17 19:27
2003.09.29
SaveDialog


14-96384
Freeek
2003-09-11 17:47
2003.09.29
GPRS





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский