Изврат :)
Как записать битмап в текст и наоборот?
Первый вопрос зачем? И второй вопрос: Что значит в текст?
Первый вопрос зачем? И второй вопрос: Что значит в текст?
Первый ответ - нужно картинку запихнуть в БД в поле типа МЕМО
Второй ответ - вытекает из первого :)
Первый ответ - нужно картинку запихнуть в БД в поле типа МЕМО
Второй ответ - вытекает из первого :)
Сходи вот сюда http://forums.progers.ru/index.php?showtopic=27. Для этого совсемп не обязательно в текст сохранять картинку. Если что не понятно будет спрашивай - отвечу.
PS: Вот тут попонятней будет http://www.bcbdev.ru/phpbb/viewtopic.php?t=2370
-1-
Можно выполнить преобразование в Base64
есть такой компонент в Билдере.
-2-
А Кроме "Memo" твоя бд. других типов данных не поддерживает ? :))
-3-
Этот метод я постоянно использую:
Cохранить картинку в файл
с именеим типа "x.bmp", где int x - номер иденификатора файла в бд.
Другими словами база хранит только числа int x,
А ПРИ ДОСТУПЕ К КАРТИНКЕ формируется имя файла
и подгружаем данные из файла
String FileName="Диск:\\\\директория_базы\\картинки\\"+ IntToStr(x);
МОРАЛЬ:
В базе нужно хранить ТОЛЬКО то, что нужно для статистического анализа или быстрого поиска.
Для поиска картинки она вся не нужна , достаточно только ее индекса.
Вот действительно subject :)
-1-
Можно выполнить преобразование в Base64
есть такой компонент в Билдере.
-2-
А Кроме "Memo" твоя бд. других типов данных не поддерживает ? :))
-3-
Этот метод я постоянно использую:
Cохранить картинку в файл
с именеим типа "x.bmp", где int x - номер иденификатора файла в бд.
Другими словами база хранит только числа int x,
А ПРИ ДОСТУПЕ К КАРТИНКЕ формируется имя файла
и подгружаем данные из файла
String FileName="Диск:\\\\директория_базы\\картинки\\"+ IntToStr(x);
2 - поддерживает, но мне нужно именно в мемо
3 - не подходит, никаких дополнительных файлов типа Диск:\\\\директория_базы\\картинки\\"+ IntToStr(x) не должно быть! только БД MSACCESS :)
2 - поддерживает, но мне нужно именно в мемо
3 - не подходит, никаких дополнительных файлов типа Диск:\\\\директория_базы\\картинки\\"+ IntToStr(x) не должно быть! только БД MSACCESS :)
Я так и не понял в Memo это как должно выглядеть?
КАК
10013000400678
56400345006708
12300405500677
Или как реальная картинка?
Я так и не понял в Memo это как должно выглядеть?
КАК
10013000400678
56400345006708
12300405500677
Или как реальная картинка?
КАК
10013000400678
56400345006708
12300405500677
мне главное чтоб легко и быстро записывалось, и также легко из мемо можно было занрузить TImage!
TBitmap* Bmp=new TBitmap ;
Bmp->LoadFromFile(...);
//Для перекодировки создаешь поток, в который сбрасываешь картинку
TMemoryStream * BmpStream=new TMemoryStream ;
Bmp->SaveToStream(BmpStream);
BmpStream->Position=0;
//Создаешь поток, в который запишем результат перекодировки
TMemoryStream * OutStream=new TMemoryStream ;
NMUUProcessor1->Method =uuMime;
NMUUProcessor1->InputStream=BmpStream;
NMUUProcessor1->OutputStream=OutStream;
NMUUProcessor1->Encode();
// сможешь сам выгрузить текст в Memo из потока OutStream ?
delete Bmp;
delete BmpStream;
delete OutStream;
Как записать битмап в текст и наоборот?
ЗаЮЮкай ее просто...
UUEncode() / UUDecode() повсюду в инете валяются.
Кстати, как работают БД, которые в полях позволяют двоичные данные держать?
Ведь чтобы послать SQL-запрос вида
INSERT INTO Table SET BinData=".....";
нужно же исключительно текст пересылать?..
Ведь чтобы послать SQL-запрос вида
INSERT INTO Table SET BinData=".....";
нужно же исключительно текст пересылать?..
Мдя-я. А параметры на что?
Мдя-я. А параметры на что?
Ответ не полный :)
Как говорится, летят два крокодила - один зеленый, а другой на север...
Какие параметры и куда их девать?
Дело в том, что я работал с Gupta Team Developer в связке с Oracle 8. Так вот, в документации (к Team Dev) так и написано, чтобы загрузить, скажем, картинку в базу (в двоичном виде), то ее нужно прежде преобразовать в текст. Ну и функции соответствующие прилагаются. В чем подвох?
Дело в том, что я работал с Gupta Team Developer в связке с Oracle 8. Так вот, в документации (к Team Dev) так и написано, чтобы загрузить, скажем, картинку в базу (в двоичном виде), то ее нужно прежде преобразовать в текст.
Мдя-я-я. Не работайте с неправильными программами и не читайте неправильной документации. Уж где-где, но в Oracle8, блин! Это надо же удумать!
Все делается донельзя просто, если речь про Oracle. Позволю себе процитировать Тома Кайта: "всегда используйте параметры". От себя даже могу прибавить: [censored].
Короче, пишется так:
(FIELD1, FIELD2, FIELD3)
values
(:FIELD1, :FIELD2, :FIELD3)
Поля могут быть любого типа. Ясный пень, что типы параметров должны подходить для соответствующего поля.
Если же для хранения в Oracle картинки используется тип BLOB, синтаксис будет несколько другим.
Все делается донельзя просто, если речь про Oracle. Позволю себе процитировать Тома Кайта: "всегда используйте параметры". От себя даже могу прибавить: [censored].
Короче, пишется так:
(FIELD1, FIELD2, FIELD3)
values
(:FIELD1, :FIELD2, :FIELD3)
Поля могут быть любого типа. Ясный пень, что типы параметров должны подходить для соответствующего поля.
Если же для хранения в Oracle картинки используется тип BLOB, синтаксис будет несколько другим.
И все-таки я не до конца понял... Если имеются ввиду параметры полей, что устанавливаются для SQL-компонент Delphi или CBuilder, то это меня не очень интересует... Вопрос в том, как это работает на "нижнем" уровне.
Вот я коннекчусь к серверу баз данных и получаю в консоли запрос на ввод SQL-комманд. Как мне закачать двоичные значения в базу? В какой момент я могу через сокет гнать двоичные данные после исполнения SQL-запроса?
Вот я коннекчусь к серверу баз данных и получаю в консоли запрос на ввод SQL-комманд. Как мне закачать двоичные значения в базу? В какой момент я могу через сокет гнать двоичные данные после исполнения SQL-запроса?
Че-то ты путаешь, брат. Какой нафиг, сокет в командной строке? Давай определимся: или сокет, или командная строка.
В Oracle из командной строки можно работать с LOB-ами только посредством PL/SQL, как я понимаю. Есть пакеты DBMS_LOB и DBMS_BFILE (насчет названия последнего не уверен - может вообще такого нет).
А доступ к сокету соединения с сервером на нижнем уровне тебе ни одна база не даст. Вся работа ведется через клиентское ПО.
Че-то ты путаешь, брат. Какой нафиг, сокет в командной строке? Давай определимся: или сокет, или командная строка.
В Oracle из командной строки можно работать с LOB-ами только посредством PL/SQL, как я понимаю. Есть пакеты DBMS_LOB и DBMS_BFILE (насчет названия последнего не уверен - может вообще такого нет).
А доступ к сокету соединения с сервером на нижнем уровне тебе ни одна база не даст. Вся работа ведется через клиентское ПО.
Ок.
Короче, есть у меня
sql_connect ()
sql_prepare ()
sql_exec ()
sql_fetch... ()
sql_close ()
(функции предоставляет клиентская часть - других нету)
как мне послать двоичные данные, если sql_prepare принимает SQL-запрос только в виде текстовой строки?
Напрашивается ответ, что никак (поскольку зачем было делать функции преобразования картинки в строку и обратно?) Или в самом запросе можно сказать, что дескать, занчение этого поля нужно взять из такого-то файла/буфера... ?
Ок.
Короче, есть у меня
sql_connect ()
sql_prepare ()
sql_exec ()
sql_fetch... ()
sql_close ()
(функции предоставляет клиентская часть - других нету)
Что это за клиентское ПО такое? Самопальное?
Кстати, вывод напрашивается сам собой - раз есть sql_prepare, обязательно должна быть поддержка параметров. Что-то вроде sql_bind()
Что это за клиентское ПО такое? Самопальное?
Кстати, вывод напрашивается сам собой - раз есть sql_prepare, обязательно должна быть поддержка параметров. Что-то вроде sql_bind()
Точно!
Есть такая sql_bindparameter
будем разбираться...
А ПО - какая-то надстройка над ODBC (это я все про TeamDev ;).
Есть такая sql_bindparameter
будем разбираться...
Так зеленый или на север?
А ПО - какая-то надстройка над ODBC (это я все про TeamDev ;).
Угораздило же вас.