Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
1 / 1 / 2
Регистрация: 11.11.2012
Сообщений: 93

DBImage и DBGrid, что не так?

21.04.2013, 19:22. Показов 3367. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Быть может я задаю слишком много вопросов, но я спрашиваю то, с чем никак не могу справиться самостоятельно.
На форме лежит DBGrid и DBImage, в DBGrid'е есть колонка под названием "артикул", так же в папке с проектом лежат изображения, имя которых совпадает с текстом подходящей ячейки из колонки "Артикул".
Например, есть строка, в поле "Артикул" этой строки написано "1000", тогда в папке есть изображение с именем "а1000.jpg".
Требуется при нажатии на какую либо строку в таблице, отобразить в DBImage подходящее этой строке изображение.
Так же в эту таблицу можно добавить строку, заполнить ее и привязать изображение.
Все это я реализовал вот так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void __fastcall TForm1::DBGrid1CellClick(TColumn *Column)
{
 Form1->DBImage1->Picture->LoadFromFile("a"+DBEdit1->Text+".jpg");
}
 
//-------------------------------------------------
 
void __fastcall TForm1::Button5Click(TObject *Sender)  //привязать изображение
{
  if (DBEdit1->Text=="")  // значение ячейки "Артикул", данной строки
    MessageBox(0,"Введите артикул!","Ошибка",MB_OK);
  else
    {
     if (Form1->OpenPictureDialog1->Execute())
       {
        AnsiString sFileName = Form1->OpenPictureDialog1->FileName;
        AnsiString newname( "C:\\Users\\касиман\\Desktop\\проект\\a" + DBEdit1->Text + ".jpg" );
        MoveFile( sFileName.c_str( ), newname.c_str( ) );
       }
    }
}
При нажатии на какую либо строку таблицы, высвечивается нужное изображение, все работает. При нажатии Button5, появляется OpenDialog, я выбираю изображение и оно переносится в папку с проектом и получает нужное имя. Но после этого на DBImage ничего не высвечивается, даже при выборе других строк, которые до этого срабатывали, появляется ошибка что то вроде "не могу открыть файл 'а1000.jpg' ". Получается так будто этого файла нет в папке, но он там есть и все должно срабатывать.
При перезапуске программы все работает, и даже та строка, к которой я привязывал изображение показывает его.
В чем дело, что не так?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.04.2013, 19:22
Ответы с готовыми решениями:

Связать DBIMAGE с DBGRID
У меня на форме есть DBGRID и компоненты ADO,Data Source,связал их и вышла в дбгрид таблица. Теперь мне нужно чтобы когда я нажимал на одно...

Как связать dbgrid с dbimage?
нужно чтобы фото из таблицы грида транслировалось нa dbimage при нажатий на строку

Как связать Dbgrid с Dbimage?
как связать Dbgrid с Dbimage чтобы посмотреть фото когда листаешь список

3
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
22.04.2013, 22:55
По моему его (файла) там действительно нет. MoveFile перемещает файл, удаляя оригинал из исходной папки.
0
 Аватар для Lelik-pahan
1703 / 899 / 207
Регистрация: 25.11.2009
Сообщений: 1,848
22.04.2013, 23:52
Kasiman, нужно использовать абсолютные пути к картинкам, а не просто их имена.
Когда ты запускаешь программу, активной директорией является директория, где лежит экзешник и твои картинки. И когда ты загружаешь картинку только по имени файла, программа её находит. При использования опэн диалога, ты меняешь активную директорию, и твоя программа уже не находит там картинки с заданным именем.

C++
1
 Form1->DBImage1->Picture->LoadFromFile(ExtractFilePath(Application->ExeName) + "a" + DBEdit1->Text + ".jpg");
Добавлено через 10 минут
Чтобы код не был таким громоздким, директорию с программой можно записать в переменную в начале программы и потом подставлять её
C++
1
2
3
String workPath;  //в классе формы
workPath = ExtractFilePath(Application->ExeName);  //в конструкторе формы
Form1->DBImage1->Picture->LoadFromFile(workPath + "a"+DBEdit1->Text+".jpg");  //далее используем переменную

или перед каждым обращением к файлам снова меняй текущую директорию (но на мой взгляд гораздо лучше просто использовать полные пути)
C++
1
2
SetCurrentDir(ExtractFileDir(Application->ExeName));
Form1->DBImage1->Picture->LoadFromFile("a"+DBEdit1->Text+".jpg");
Добавлено через 5 минут
P.S. И ещё, в твоём коде не нужно писать Form1-> при обращении к компонентам первой формы, т. к. ты пишешь код внутри функций (методов) этого класа
1
1 / 1 / 2
Регистрация: 11.11.2012
Сообщений: 93
23.04.2013, 00:34  [ТС]
Цитата Сообщение от nick42 Посмотреть сообщение
По моему его (файла) там действительно нет. MoveFile перемещает файл, удаляя оригинал из исходной папки.
Это верно, но вы не совсем правильно поняли (или я не совсем доходчиво обьяснил) MoveFile относится к тому файлу, который я выбираю в диалоговом окне, а выбираю я там изображение НЕ из папки проекта.

Добавлено через 4 минуты
Цитата Сообщение от Lelik-pahan Посмотреть сообщение
Kasiman, нужно использовать абсолютные пути к картинкам, а не просто их имена.
Когда ты запускаешь программу, активной директорией является директория, где лежит экзешник и твои картинки. И когда ты загружаешь картинку только по имени файла, программа её находит. При использования опэн диалога, ты меняешь активную директорию, и твоя программа уже не находит там картинки с заданным именем.
Спасибо большое, еще не опробовал, но по логике должно сработать. По поводу того что OpenDialog меняет активную директорию - не знал, похоже в этом и было дело.
Еще раз ОГРОМНОЕ СПАСИБО!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.04.2013, 00:34
Помогаю со студенческими работами здесь

Как связать DBGrid и DBImage
Есть компоненты dbimage и dbgrid, нужно чтобы картинка сохранялась в dbgrid Что нужно подставить сюда? void __fastcall...

По щелчку на DBGrid отобразить картинку в DBImage
Добрый вечер) Подскажите пожалуйста можно ли по щелчку строки DBGrid отобразить картинку в компонент DBImage или просто Image? Для...

Как привязать DBMemo и DBImage к DBGrid?
Здравствуйте. Подскажите как привязать DBMemo и DBImage к DBGrid? И как сделать добавление картинки и описания, для последующего поста?...

Как вставить рисунок в Dbimage из таблицы Dbgrid

Изменение картинки в dbimage при смене строки в dbgrid
Как мне сделать в Delphi, чтобы при смени строки в dbgrid изменялась картинка в dbimage? База данных сделана в Paradox 7. Компоненты для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru