IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Помогите с подгрузкой изображения в БД. С++, Помогите с подгрузкой изображения в БД. С++
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 61
Пол: Мужской
Реальное имя: Alexander

Репутация: -  0  +


У меня есть программа, АРМ администратора компьютерного магазина, вроде когда я беру изображения из БД все нормально картинка отображается в DBImagе, но когда жму кнопку "ДОБАВИТЬ" (Добавиьт данные в таблицу) он выбивает ошибку поэтому даже проверить не могу работоспособность добавления. Помогите пожалуйто с добавлением буду очень благодарен. В архиве прикрепленном снизу вся прога с БД. ВСЕ РАЗАРХИВИРУЙТЕ В ОДНУ ПАПКУ

Сообщение отредактировано: alecsandr -


Прикрепленные файлы
Прикрепленный файл  P1.zip ( 1.72 мегабайт ) Кол-во скачиваний: 302
Прикрепленный файл  P2.zip ( 1.23 мегабайт ) Кол-во скачиваний: 293
Прикрепленный файл  P3.zip ( 147.15 килобайт ) Кол-во скачиваний: 298
Прикрепленный файл  P4.zip ( 741.19 килобайт ) Кол-во скачиваний: 295
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


Значит, смотри, что я сделал:

1) на Form3 вместо Edit1 добавил DBEdit4, связал его с полем Photo набора данных. Естественно, что в обработчике кнопки "Обзор" я заношу имя файла не в Edit1, а в DBEdit4.
2) с обработкой "Применить" у тебя - полный бардак. Я сделал так:
void __fastcall TForm3::Button2Click(TObject *Sender)
{
// Ничего заносить в поле Photo уже не надо, это делается автоматически
//Form2->DataSource1->DataSet->FieldValues["Photo"];// присваиваем имя фотографии товара

Form2->ADOQuery1->Edit(); // Тебе не нужно ДОБАВЛЯТЬ запись, достаточно ее ОБНОВИТЬ
Form2->DataSource1->DataSet->Post();
Form2->DBImage1->Stretch=true;
// Вот так я добиваюсь того, чтобы изображение читалось из текущей папки + /photo ВСЕГДА
Form2->DBImage1->Picture->LoadFromFile(ExtractFilePath(Application->ExeName) + "photo\\" + fname);

// Вот этого тоже делать не надо, не оставляй набор данных в открытом состоянии,
// не ты один можешь работать с базой, это будет мешать остальным...
// при выделении товара показывать информацию о нем
// Form2->ADOQuery1->Edit();
Form3->Close();
}


Точно так же, как и тут, я переделал строку в LoadPhoto() :
 Form2->DBImage1->Picture->LoadFromFile(ExtractFilePath(Application->ExeName) + "photo\\" + strphoto);
// при выделении товара показывать информацию о нем
, теперь все прекрасно добавляется и ничего никуда не вылетает.

Теперь еще кое-что:
1) у тебя программа не завершается корректно, остается висеть в процессах. При отладке работе из Билдера это видно, просто снимаешь ее с выполнения через Ctrl+F2 и все. А вот если запустить программу из проводника - то потом ее приходится снимать из диспетчера задач. Ищи причину.
2) утечка памяти. Ты выделяешь
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int i;
char *k=new char[5]; // <--- Вот тут
память?
Где освобождение? CodeGuard тут же поднимает тревогу. Кстати, то, что ты делаешь - вообще неправильно. Как минимум потому, что выделять память надо на один символ больше, чем будешь использовать, для завершающего нуля. Ты этого не сделал. Исправляй эти недочеты тоже...

Добавлено через 12 мин.
Да, кстати, еще одно... Весь вот этот ужас:

Цитата
if (Form2->ComboBox1->ItemIndex==0)
{
Form2->ADOQuery1->SQL->Add("Select * FROM Акустика");
Form2->ADOQuery1->SQL->Add("WHERE (Наименование LIKE'%"+Edit1->Text+"%') ORDER by Наименование ASC");
Form2->ADOQuery1->Open();
Form2->DataSource1->DataSet=Form2->ADOQuery1;
// LoadPhoto();
}
else
if (Form2->ComboBox1->ItemIndex==1)
{
Form2->ADOQuery1->SQL->Add("Select * FROM Материнки");
Form2->ADOQuery1->SQL->Add("WHERE (Наименование LIKE'%"+Edit1->Text+"%') ORDER by Наименование ASC");
Form2->ADOQuery1->Open();
Form2->DataSource1->DataSet=Form2->ADOQuery1;
//LoadPhoto();
}
else ...
(и так далее еще 8 раз) - очень просто укладывается в 4 строки, независимо от количества таблиц в базе:
	Form2->ADOQuery1->SQL->Add("Select * FROM " + ComboBox1->Text);
Form2->ADOQuery1->SQL->Add("WHERE (Наименование LIKE'%"+Edit1->Text+"%') ORDER by Наименование ASC");
Form2->ADOQuery1->Open();
Form2->DataSource1->DataSet=Form2->ADOQuery1;
Угу? Главное, чтобы текст в комбобоксе совпадал с названием таблицы.

То же самое касается и десяти кнопок для выбора показываемой таблицы. Достаточно сделать один обработчик, работающий с Caption-ом Sender-а, и назначить его всем кнопкам. Не нужен тут Copy+Paste...

Сообщение отредактировано: IUnknown -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
alecsandr   Помогите с подгрузкой изображения в БД. С++   5.06.2011 16:34
IUnknown   Ну, и где? Архив, говорю, снизу чего прикреплен? П…   5.06.2011 16:46
alecsandr   Ну, и где? Архив, говорю, снизу чего прикреплен? …   5.06.2011 16:49
IUnknown   Ну, во-первых, вот это: if (Form2->DataSource1-…   5.06.2011 18:19
alecsandr   Ну, во-первых, вот это: [code=cpp]if (Form2->D…   5.06.2011 20:14
IUnknown   Да что ж такое? Опять у меня все не так, как нуж…   5.06.2011 20:30
alecsandr   Да что ж такое? Опять у меня все не так, как ну…   5.06.2011 22:43
IUnknown   Так... Ну, у тебя весь бардак - из-за того, что пр…   5.06.2011 23:53
alecsandr   Так... Ну, у тебя весь бардак - из-за того, что п…   6.06.2011 0:01
IUnknown   Прежде, чем с этим заморачиваться - ты сделай, что…   6.06.2011 0:55
alecsandr   Прежде, чем с этим заморачиваться - ты сделай, чт…   6.06.2011 1:44
IUnknown   DFM - файлы добавь в проект, а то восстанавливать …   6.06.2011 13:01
alecsandr   DFM - файлы добавь в проект, а то восстанавливать…   6.06.2011 13:03
IUnknown   Значит, смотри, что я сделал: 1) на Form3 вместо …   6.06.2011 13:51
alecsandr   Значит, смотри, что я сделал: 1) на Form3 вместо…   6.06.2011 14:06


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 24.04.2024 17:20
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name