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

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

21.04.2013, 19:22. Показов 3384. Ответов 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
1709 / 905 / 207
Регистрация: 25.11.2009
Сообщений: 1,850
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
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru