Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C/C++ Базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.02.2012, 11:56   #1
nick42
Форумчанин
 
Аватар для nick42
 
Регистрация: 14.10.2011
Сообщений: 267
По умолчанию BLOB-поле и libmysql

Прошу помочь в таком вопросе: приложение работает с базой данных mysql и использует в таблице структуру BLOB. Далее, - на форме размещается картинка *.bmp , загружаемая из файла (при желании). Я хочу картинку грузить из базы. Для работы с базой подключил библиотеку libmysql.dll. Записывать картинку в базу - я освоил. Теперь бы вот "вытянуть" ее оттуда; не придумаю..., про потоки с этой библиотекой не слышал. Может, что-нибудь порекомендуете?
nick42 вне форума Ответить с цитированием
Старый 16.02.2012, 15:32   #2
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Мне не доводилось работать с BLOB полями, но подозреваю что вытащить картинку можно запросом
psycho-coder вне форума Ответить с цитированием
Старый 16.02.2012, 16:16   #3
nick42
Форумчанин
 
Аватар для nick42
 
Регистрация: 14.10.2011
Сообщений: 267
По умолчанию

- ну да! только как? Пытался адаптировать фрагмент с форума на свои переменные, но там, похоже, ошибки. Компилятор переваривает, но в программе ошибка "Stream read error"___
Код:
        query="SELECT 'imag' FROM " + edBasa->Text +
          ".config WHERE (INDD='42')";
        Zapros();
//      zF - result of query ; MYSQL *Con; MYSQL_RES *Res;
       if (zF==0)
    {
         Res=mysql_store_result(Con);
         unsigned long *ds ;
         char * * pole;

         TMemoryStream * MyStream = new TMemoryStream;

         pole = mysql_fetch_row(Res);
         ds = mysql_fetch_lengths(Res);
         int cnt=0;
         MyStream->Position = 0;
         while (pole != NULL)
        {
           cnt++;
           MyStream->Position = 0;
           MyStream->Write(&pole[0][0], ds[0]);
           pole = mysql_fetch_row(Res);
           ds = mysql_fetch_lengths(Res);
        }
          MyStream->Position = 0;
          foto->Picture->Bitmap->LoadFromStream(MyStream);
          delete MyStream;
    }
nick42 вне форума Ответить с цитированием
Старый 17.02.2012, 12:57   #4
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Мне кажется с потоком не верно работаете, но я могу ошибаться
http://bcbjournal.org/articles/vol2/...moryStream.htm вот что нашел по TMemoryStream
psycho-coder вне форума Ответить с цитированием
Старый 17.02.2012, 16:03   #5
nick42
Форумчанин
 
Аватар для nick42
 
Регистрация: 14.10.2011
Сообщений: 267
По умолчанию

Спасибо, psycho-coder ! В тексте, безусловно, ошибки; я его тупо и по-быстрому скопировал, в надежде, что хоть как-то заработает. С memory- stream проблем у меня не возникнет. Основная проблема - я не знаю, как обращаться с blob-объектом. Вот, допустим, в результате обработки запроса__
Код:
"SELECT imag FROM  myBaza.config WHERE indd=42";
и применения
Код:
Res=mysql_store_result(Con);
у меня в объекте Res находится около 3 Мб моего битмапа... . Как дальше мне его отправить объекту TImage, чтоб он его нормально "усвоил" и отобразил?
nick42 вне форума Ответить с цитированием
Старый 18.02.2012, 00:31   #6
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Код:
Image1->Picture->Bitmap->LoadFromStream( BmpStream );
В BmpStraem находится собственно TMemoryStream с загруженным Res.
psycho-coder вне форума Ответить с цитированием
Старый 18.02.2012, 02:30   #7
nick42
Форумчанин
 
Аватар для nick42
 
Регистрация: 14.10.2011
Сообщений: 267
Смех

Цитата:
Сообщение от psycho-coder Посмотреть сообщение
TMemoryStream с загруженным Res.
Смысл понятен. Практически как этого добиться? Может я такой тупой или примитивный неудачник, но у меня ничего не получилось! Я по разному пробовал; даже откровенно нелогичные действия... . Если удавалось "впихнуть" в поток мемори что-то из структуры Res (результат запроса) так, чтобы не выскакивала ошибка, то все равно даже намека на картинку не появлялось. Мне даже не удалось выудить из этого "результата" размер моего битмапа; вернее, возвращает значение 0xFFFFFF - и точка (размер бээмпэшки 1.3 Мб).
P.S. Наконец-то я разобрался... . Чтобы закрыть тему - вот рабочий код:
Код:
       query="SELECT imag FROM myBaza.config WHERE indd=42";
       Zapros();
       if (zF==0)
    {
         TMemoryStream *mas = new TMemoryStream;
         Res = mysql_store_result(Con);
         char * *bb = mysql_fetch_row(Res);
         unsigned long *ds = mysql_fetch_lengths(Res); 
         mas->Write(&bb[0][0], ds[0]);
         mas->Position = 0;
         foto->Picture->Bitmap->LoadFromStream(mas);
         delete mas;
    }

Последний раз редактировалось nick42; 18.02.2012 в 05:05. Причина: снятие проблемы
nick42 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
BLOB поле artemavd БД в Delphi 17 09.08.2016 02:13
BLOB поле + изображение Nastenaad Помощь студентам 0 14.05.2011 16:58
Запись в blob поле Ruska882009 PHP 10 08.10.2010 16:24
MsAccess:Blob поле NurNet БД в Delphi 0 07.06.2010 17:45
Выгрузка с базы BLOB-поле tsergey Помощь студентам 1 17.04.2009 14:16