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

> Внимание!

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

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


Пионер
**

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

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


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

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


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


a.k.a. volvo877
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской

Репутация: -  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 - 6.06.2011 10:05
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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


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

 



- Текстовая версия 28.04.2024 21:33
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"