Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
Evgeny92
276 / 4 / 4
Регистрация: 09.11.2011
Сообщений: 294
1

Не переключается картинка после отбора данных в ComboBox С++ Builder

02.05.2013, 11:45. Просмотров 2395. Ответов 46
Метки нет (Все метки)

Появилась проблема - одна.
В программе после отбора по жанрам потом открываю по каком-то фильму описание, и там по DBNavigator щелкаю вперед или назад, картинка не переключается, а переключается только текст. Если не отбирать данные перещелкивание картинки работает вместе с текстом.
0
Вложения
Тип файла: rar Kinoteatr.rar (7.48 Мб, 5 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.05.2013, 11:45
Ответы с готовыми решениями:

Не переключается изображение. C++ Builder 6
Один баг у меня в программе, нужно устранить. Всего лишь один баг. А баг...

С помощью запроса значение из Edit и ComboBox поместить в базу данных при нажатии кнопки в builder c++
с помощью запроса значение из Edit и ComboBox поместить в базу данных при...

ComboBox в С++ Builder
Как добавить поля StringGrid в ComboBox для осуществления поиска.

ComboBox в Builder C++
Всем привет .Очень нужна ваша помощь ,народ .Можете кинуть какой-нить пример...

ComboBox/C++Builder
хочу проверить, заполены ли поля ComboBox. Всего на форме 6 комбоБокс`ов. По...

46
The_Immortal
1560 / 496 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
04.05.2013, 01:00 21
Evgeny92, правильно.

Навскидку проблема в этом (форма 3):

C++
1
2
3
4
5
6
7
8
9
10
11
12
if(!(TBlobField*)DataModule2->ADOTable1->FieldByName("Постер фильма")->IsNull){
       if(!Form3->Image1->Visible)Form3->Image1->Visible=true;
       TMemoryStream* strm = new TMemoryStream;
       TJPEGImage *ptJpg=new TJPEGImage;
        ((TGraphicField*)DataModule2->ADOTable1->FieldByName("Постер фильма"))->SaveToStream(strm);
        strm->Seek(0,0);
        if (*(Word*)strm->Memory == 0xD8FF)Form3->Image1->Picture->Graphic=ptJpg;
        Form3->Image1->Picture->Graphic->LoadFromStream(strm);
        delete strm;
        delete ptJpg;
      }else
      Form3->Image1->Visible=false;


А теперь смотрим на первую форму, когда производим фильтрацию по фильмам:
C++
1
2
3
4
5
6
7
8
9
10
11
void __fastcall TForm1::ComboBox2Change(TObject *Sender)
{
DataModule2->DataSource1->DataSet = DataModule2->ADOQuery1;
    DataModule2->ADOQuery1->Close();
    DataModule2->ADOQuery1->SQL->Clear();
    if(ComboBox2->ItemIndex == 0)
      DataModule2->ADOQuery1->SQL->Add("Select * from Фильмы");
    else
      DataModule2->ADOQuery1->SQL->Add("Select * from Фильмы WHERE  Страна LIKE '%"+ComboBox2->Text+"%'");
    DataModule2->ADOQuery1->Open();
}
И сравниваем DataSet'ы

Ничего не замечаем?
2
Evgeny92
276 / 4 / 4
Регистрация: 09.11.2011
Сообщений: 294
04.05.2013, 01:16  [ТС] 22
ADOTable1 на ADOQuery1 менять?

И все же этот проект начинаю переделывать и возникают вопросы, в котором не знаю как решить. Наверное переделывать не буду.
0
Ddv122
Почемучка)
1240 / 300 / 30
Регистрация: 23.12.2010
Сообщений: 1,998
Записей в блоге: 1
04.05.2013, 01:23 23
Evgeny92,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void __fastcall TForm3::DBNavigator1Click(TObject *Sender,
      TNavigateBtn Button)
{
AnsiString wsg = DataModule2->ADOQuery1->FieldByName("Òðåéëåð")->AsString; //Èç ïîëå Òðåéëåð áóäåò îòêðûâГ*ГІГјГ±Гї ññûëêГ* Г*Г* ГўГҐГЎ Г±ГІГ°Г*Г*èöó
wsg = wsg.SubString(wsg.Pos("#")+1,wsg.Length());
wsg = wsg.Delete(wsg.Pos("#"),1);
Form3->CppWebBrowser1->Navigate(WideString(wsg) ) ;
 
if(!(TBlobField*)DataModule2->ADOQuery1->FieldByName("Ïîñòåð ôèëüìГ*")->IsNull){
       if(!Form3->Image1->Visible)Form3->Image1->Visible=true;
       TMemoryStream* strm = new TMemoryStream;
       TJPEGImage *ptJpg=new TJPEGImage;
        ((TGraphicField*)DataModule2->ADOQuery1->FieldByName("Ïîñòåð ôèëüìГ*"))->SaveToStream(strm);
        strm->Seek(0,0);
        if (*(Word*)strm->Memory == 0xD8FF)Form3->Image1->Picture->Graphic=ptJpg;
        Form3->Image1->Picture->Graphic->LoadFromStream(strm);
        delete strm;
        delete ptJpg;
      }else
      Form3->Image1->Visible=false;
}
//---------------------------------------------------------------------------
+

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void __fastcall TForm1::Button12Click(TObject *Sender)
{
Form4->Show();
Form4->TabSheet1->Show();
 
if(!(TBlobField*)DataModule2->ADOTable2->FieldByName("Ïîñòåð ñåðèГ*Г«Г*")->IsNull){
       if(!Form4->Image1->Visible)Form4->Image1->Visible=true;
       TMemoryStream* strm = new TMemoryStream;
       TJPEGImage *ptJpg=new TJPEGImage;
             DataModule2->ADOQuery1->SQL->Add("Select * from Ôèëüìû WHERE  Г‘ГІГ°Г*Г*Г* LIKE '%"+ComboBox2->Text+"%'");
    DataModule2->ADOQuery1->Open();
        ((TGraphicField*)DataModule2->ADOTable2->FieldByName("Ïîñòåð ñåðèГ*Г«Г*"))->SaveToStream(strm);
        strm->Seek(0,0);
        if (*(Word*)strm->Memory == 0xD8FF)Form4->Image1->Picture->Graphic=ptJpg;
        Form4->Image1->Picture->Graphic->LoadFromStream(strm);
        delete strm;
        delete ptJpg;
      }else
      Form4->Image1->Visible=false;
}
1
Evgeny92
276 / 4 / 4
Регистрация: 09.11.2011
Сообщений: 294
04.05.2013, 01:26  [ТС] 24
Менял я на Query
Ошибка выскакивает
0
Ddv122
Почемучка)
1240 / 300 / 30
Регистрация: 23.12.2010
Сообщений: 1,998
Записей в блоге: 1
04.05.2013, 01:45 25
Evgeny92, ахххх
я 3 форму смотрел)))))))))а у тебя на 4)
Наведи порядок , то чёрт ногу сломит)
1
Evgeny92
276 / 4 / 4
Регистрация: 09.11.2011
Сообщений: 294
04.05.2013, 01:50  [ТС] 26
Да, сработало:

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::Button11Click(TObject *Sender)
{
Form3->Show();
Form3->TabSheet1->Show();
 
 
if(!(TBlobField*)DataModule2->ADOTable1->FieldByName("Постер фильма")->IsNull){
       if(!Form3->Image1->Visible)Form3->Image1->Visible=true;
       TMemoryStream* strm = new TMemoryStream;
       TJPEGImage *ptJpg=new TJPEGImage;
             DataModule2->ADOQuery1->SQL->Add("Select * from Фильмы WHERE  Жанры LIKE '%"+ComboBox1->Text+"%'");
    DataModule2->ADOQuery1->Open();
        ((TGraphicField*)DataModule2->ADOTable1->FieldByName("Постер фильма"))->SaveToStream(strm);
        strm->Seek(0,0);
        if (*(Word*)strm->Memory == 0xD8FF)Form3->Image1->Picture->Graphic=ptJpg;
        Form3->Image1->Picture->Graphic->LoadFromStream(strm);
        delete strm;
        delete ptJpg;
      }else
      Form3->Image1->Visible=false;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void __fastcall TForm3::DBNavigator1Click(TObject *Sender,
      TNavigateBtn Button)
{
AnsiString wsg = DataModule2->ADOTable1->FieldByName("Трейлер")->AsString; //Из поле Трейлер будет открываться ссылка на веб страницу
wsg = wsg.SubString(wsg.Pos("#")+1,wsg.Length());
wsg = wsg.Delete(wsg.Pos("#"),1);
Form3->CppWebBrowser1->Navigate(WideString(wsg) ) ;
 
if(!(TBlobField*)DataModule2->ADOQuery1->FieldByName("Постер фильма")->IsNull){
       if(!Form3->Image1->Visible)Form3->Image1->Visible=true;
       TMemoryStream* strm = new TMemoryStream;
       TJPEGImage *ptJpg=new TJPEGImage;
        ((TGraphicField*)DataModule2->ADOQuery1->FieldByName("Постер фильма"))->SaveToStream(strm);
        strm->Seek(0,0);
        if (*(Word*)strm->Memory == 0xD8FF)Form3->Image1->Picture->Graphic=ptJpg;
        Form3->Image1->Picture->Graphic->LoadFromStream(strm);
        delete strm;
        delete ptJpg;
      }else
      Form3->Image1->Visible=false;
}
Как добавить коды во внутрь также для других категорий. Решена проблема с Жанрами. Надо еще добавить и страны и годы.



Но появилась другая ошибка. при запуски программы. Если не отобрал по Жанрам. Открываю Описание листаю а картинка они исчезли, не появляются.
При запуске ComboBox1(Жанры) в свойстве Text "Всех жанров" и в Itims "Всех жанров" в списке.
0
Ddv122
Почемучка)
1240 / 300 / 30
Регистрация: 23.12.2010
Сообщений: 1,998
Записей в блоге: 1
04.05.2013, 01:52 27
Evgeny92, Жень, наведи порядок, то не понятно что у тебя где и как...
1
Evgeny92
276 / 4 / 4
Регистрация: 09.11.2011
Сообщений: 294
04.05.2013, 01:57  [ТС] 28
Ну я тогда, переделывать не буду. А просто Компоненты Передвину, Label'ми подпишу. Так мне сделать?
0
Evgeny92
276 / 4 / 4
Регистрация: 09.11.2011
Сообщений: 294
04.05.2013, 02:13  [ТС] 29
Не знаю. Так сойдет?
Подвинул компоненты.
0
Вложения
Тип файла: rar 12345.rar (7.81 Мб, 5 просмотров)
Evgeny92
276 / 4 / 4
Регистрация: 09.11.2011
Сообщений: 294
04.05.2013, 02:20  [ТС] 30
Цитата Сообщение от Evgeny92 Посмотреть сообщение
Да, сработало:

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::Button11Click(TObject *Sender)
{
Form3->Show();
Form3->TabSheet1->Show();
 
 
if(!(TBlobField*)DataModule2->ADOTable1->FieldByName("Постер фильма")->IsNull){
       if(!Form3->Image1->Visible)Form3->Image1->Visible=true;
       TMemoryStream* strm = new TMemoryStream;
       TJPEGImage *ptJpg=new TJPEGImage;
             DataModule2->ADOQuery1->SQL->Add("Select * from Фильмы WHERE  Жанры LIKE '%"+ComboBox1->Text+"%'");
    DataModule2->ADOQuery1->Open();
        ((TGraphicField*)DataModule2->ADOTable1->FieldByName("Постер фильма"))->SaveToStream(strm);
        strm->Seek(0,0);
        if (*(Word*)strm->Memory == 0xD8FF)Form3->Image1->Picture->Graphic=ptJpg;
        Form3->Image1->Picture->Graphic->LoadFromStream(strm);
        delete strm;
        delete ptJpg;
      }else
      Form3->Image1->Visible=false;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void __fastcall TForm3::DBNavigator1Click(TObject *Sender,
      TNavigateBtn Button)
{
AnsiString wsg = DataModule2->ADOTable1->FieldByName("Трейлер")->AsString; //Из поле Трейлер будет открываться ссылка на веб страницу
wsg = wsg.SubString(wsg.Pos("#")+1,wsg.Length());
wsg = wsg.Delete(wsg.Pos("#"),1);
Form3->CppWebBrowser1->Navigate(WideString(wsg) ) ;
 
if(!(TBlobField*)DataModule2->ADOQuery1->FieldByName("Постер фильма")->IsNull){
       if(!Form3->Image1->Visible)Form3->Image1->Visible=true;
       TMemoryStream* strm = new TMemoryStream;
       TJPEGImage *ptJpg=new TJPEGImage;
        ((TGraphicField*)DataModule2->ADOQuery1->FieldByName("Постер фильма"))->SaveToStream(strm);
        strm->Seek(0,0);
        if (*(Word*)strm->Memory == 0xD8FF)Form3->Image1->Picture->Graphic=ptJpg;
        Form3->Image1->Picture->Graphic->LoadFromStream(strm);
        delete strm;
        delete ptJpg;
      }else
      Form3->Image1->Visible=false;
}
Как добавить коды во внутрь также для других категорий. Решена проблема с Жанрами. Надо еще добавить и страны и годы.



Но появилась другая ошибка. при запуски программы. Если не отобрал по Жанрам. Открываю Описание листаю а картинка они исчезли, не появляются.
При запуске ComboBox1(Жанры) в свойстве Text "Всех жанров" и в Itims "Всех жанров" в списке.
Да сработало, но еще при повторном заходе в Описание выдает ошибку.
0
Ddv122
Почемучка)
1240 / 300 / 30
Регистрация: 23.12.2010
Сообщений: 1,998
Записей в блоге: 1
04.05.2013, 02:21 31
Evgeny92, удали не нужное, сделай по уму, переделка твоя - день/два займет)
дбнавигатор замени на просто кнопки, устрани варинги...тебе только 4 формы нужны)
Честно скажу это на 6/7 балов не потянет...
2
The_Immortal
1560 / 496 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
04.05.2013, 05:30 32
Ddv122,
Цитата Сообщение от Ddv122 Посмотреть сообщение
удали не нужное, сделай по уму, переделка твоя - день/два займет)
Это так.


Цитата Сообщение от Ddv122 Посмотреть сообщение
дбнавигатор замени на просто кнопки
А вот с этим пока не заморачивайтесь.


Цитата Сообщение от Ddv122 Посмотреть сообщение
тебе только 4 формы нужны
Первая форма - общий список фильмов/сериалов с возможностью поиска, фильтрации, удаления.
Вторая форма - детализированный просмотр фильма/сериала.
Третья форма - добавление/изменение информации о фильме/сериале.

Третью, если совсем сложно, можно разбить еще на две:
3.1 Добавление информации о фильме/сериале.
3.2 Изменение информации о фильме/сериале.

Но я бы не стал разбивать.
1
Evgeny92
276 / 4 / 4
Регистрация: 09.11.2011
Сообщений: 294
04.05.2013, 19:58  [ТС] 33
И вот при переделки возникает ряд вопросов.

1)
В том проекте. 2-е сетки 2-е кнопки Найти, и компоненты ComboBox'ы. На Компоненте Найти.

Код на одном компоненте Button для поиска Фильма.

C++
1
2
3
4
5
DataModule2->DataSource1->DataSet = DataModule2->ADOQuery1;
    DataModule2->ADOQuery1->Close();
   DataModule2->ADOQuery1->SQL->Clear();
    DataModule2->ADOQuery1->SQL->Add("Select * from Фильмы WHERE  [Название фильма] LIKE '%"+Edit1->Text+"%'");
    DataModule2->ADOQuery1->Open();
И такой же код на другой кнопке для поиска Сериала
C++
1
2
3
4
5
DataModule2->DataSource2->DataSet = DataModule2->ADOQuery2;
    DataModule2->ADOQuery2->Close();
   DataModule2->ADOQuery2->SQL->Clear();
    DataModule2->ADOQuery2->SQL->Add("Select * from Сериалы WHERE  [Название сериала] LIKE '%"+Edit2->Text+"%'");
    DataModule2->ADOQuery2->Open();


Сетка DBGrid одна, Поле Найти Button3 Одна. Т.е.
При нажатии Кнопки Фильмы нужно что бы По кнопке найти и фильтрация по жанрам и т.д. находила по БД Фильмы
При нажатии Кнопки Сериалы ....... по БД Сериалы.
Как эти 2-а кода написать в одну кнопку Найти Button3?


2)Добавил формы на Добавление записи и Изменение записи.
Тут нужно при переходе в первой форме Фильмы нужно чтобы в Форме добавления Там кнопка Добавить Button какойто, Нужно чтобы добавлял свою таблицу БД Фильмы.
При переходе Сериалы .... тоже самое.


В том проекте Форма добавление записи, на кнопку добавление записи

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
void __fastcall TForm5::Button2Click(TObject *Sender)
{
if (Edit1->Text=="")
{
ShowMessage("Введите данные Название фильма!");
return;
}
else if (Edit2->Text=="")
{
ShowMessage("Введите данные Жанры!");
return;
}
else if (Edit3->Text=="")
{
ShowMessage("Введите данные Страна!");
return;
}
else if (Edit4->Text=="")
{
ShowMessage("Введите данные Год выхода!");
return;
}
else if (Edit5->Text=="")
{
ShowMessage("Введите данные Режиссер!");
return;
}
else if (Edit6->Text=="")
{
ShowMessage("Введите данные Время!");
return;
}
else if (Memo1->Text=="")
{
ShowMessage("Введите данные В ролях!");
return;
}
else if (Memo2->Text=="")
{
ShowMessage("Введите данные Сюжет!");
return;
}
else if (Edit7->Text=="")
{
ShowMessage("Введите данные Трейлер!");
return;
}
else if(Image1->Picture->Graphic==NULL)
{
ShowMessage("Вставьте Обложку фильма");
return;
}
 
DataModule2->ADOTable1->Insert();
DataModule2->ADOTable1->FieldByName("Название фильма")->AsString = Form5->Edit1->Text;
DataModule2->ADOTable1->FieldByName("Жанры")->AsString = Form5->Edit2->Text;
DataModule2->ADOTable1->FieldByName("Страна")->AsString = Form5->Edit3->Text;
DataModule2->ADOTable1->FieldByName("Год выхода")->AsString = Form5->Edit4->Text;
DataModule2->ADOTable1->FieldByName("Режиссер")->AsString = Form5->Edit5->Text;
DataModule2->ADOTable1->FieldByName("Время")->AsString = Form5->Edit6->Text;
DataModule2->ADOTable1->FieldByName("В ролях")->AsString = Form5->Memo1->Text;
DataModule2->ADOTable1->FieldByName("Сюжет")->AsString = Form5->Memo2->Text;
DataModule2->ADOTable1->FieldByName("Трейлер")->AsString = Form5->Edit7->Text;
 
TMemoryStream* strm = new TMemoryStream();
Image1->Picture->Graphic->SaveToStream(strm);
((TGraphicField*)DataModule2->ADOTable1->FieldByName("Постер фильма"))->LoadFromStream(strm);
 delete strm;
 strm = NULL;
 
DataModule2->ADOTable1->Post();
 
 Form5->Hide();   //Закрыть форму Добавление записи в БД Фильмы
 
//Очистить текст в полях
Edit1->Clear();
Edit2->Clear();
Edit3->Clear();
Edit4->Clear();
Edit5->Clear();
Edit6->Clear();
Memo1->Clear();
Memo2->Clear();
Edit6->Clear();
Edit7->Clear();
Image1->Picture->Graphic=NULL;
 
}
Добавлено через 3 минуты
Вот что прописано на кнопки при переходе на Form1

Кнопка Фмльмы
C++
1
2
3
4
5
6
7
8
9
void __fastcall TForm1::Button1Click(TObject *Sender)
{
DBGrid1->DataSource = DataModule2->DataSource1;
Button7->Caption = "О фильме";
DBGrid1->Columns->Items[1]->Title->Caption = "Название фильма";
DBGrid1->Columns->Items[9]->Title->Caption = "Постер фильма";
 
 
}
Кнопка сериалы
C++
1
2
3
4
5
6
7
void __fastcall TForm1::Button2Click(TObject *Sender)
{
DBGrid1->DataSource = DataModule2->DataSource2;
Button7->Caption = "О сериале";
DBGrid1->Columns->Items[1]->Title->Caption = "Название сериала";
DBGrid1->Columns->Items[9]->Title->Caption = "Постер сериала";
}
Добавлено через 8 часов 52 минуты
Вообщем, подумал вообще убрать сериалы. Будут только фильмы. путаница пошла. Не знаю как исправить проект. Не знаю как сделать все это одними компонентами. с 4-мя формами... Вообщем сложно мне это сделать...

Добавлено через 13 минут
Сериалы в Кинотеатрах без мысленно.
0
Ddv122
Почемучка)
1240 / 300 / 30
Регистрация: 23.12.2010
Сообщений: 1,998
Записей в блоге: 1
04.05.2013, 21:10 34
Evgeny92, мне кажется ты не прав
У меня тётка в прокате работает, там сериалов больше, чем фильмов)
1)Составь алгоритм
2)Нарисуй форму - удобную в работе (быстрое редактирование и добавление и удобный просмотр )
3)Должно примерно выйти 4 формы, 1 главная форма, (добавление/изменение) 2 форма, О программе 3 форма, 4 просмотр о фильме ( + печать инфы о фильме)
4)Подключи БД к форме
А там уже видно будет...
По сути работы на день/два тут)
1
Evgeny92
276 / 4 / 4
Регистрация: 09.11.2011
Сообщений: 294
05.05.2013, 00:25  [ТС] 35
И вот все же навел порядок. Сериалы убрал. Т.к. я не знаю что делать с 2-мя таблицами.
Сделал только Бд фильмы.
Вот помогите разобраться с переключателем картинки после Отбора по категориям или поиска.
0
Вложения
Тип файла: rar Kinoteatr.rar (7.59 Мб, 6 просмотров)
The_Immortal
1560 / 496 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
05.05.2013, 20:14 36
Evgeny92,
Цитата Сообщение от Evgeny92 Посмотреть сообщение
Вот помогите разобраться с переключателем картинки после Отбора по категориям или поиска.
5-ая форма:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include "Unit1.h"
...
    void __fastcall TForm5::DBNavigator1Click(
    TObject *    Sender,
    TNavigateBtn Button )
{
    AnsiString wsg = DataModule2->ADOTable1->FieldByName( "Трейлер" )
        ->AsString; // Из поле Трейлер будет открываться ссылка на веб страницу
    wsg = wsg.SubString( wsg.Pos( "#" ) + 1, wsg.Length( ) );
    wsg = wsg.Delete( wsg.Pos( "#" ), 1 );
    Form5->CppWebBrowser1->Navigate(WideString(wsg) ) ;  //На форме О фильме Отображает веб страницу с трейлером.
 
    if ( !( TBlobField * )DataModule2->ADOTable1->FieldByName( "Постер фильма" )
        ->IsNull && Form1->DBGrid1->DataSource->DataSet ==
        DataModule2->ADOTable1 )
    {
        if ( !Form5->Image1->Visible )
        {
            Form5->Image1->Visible = true;
        }
        TMemoryStream * strm = new TMemoryStream;
        TJPEGImage * ptJpg = new TJPEGImage;
        ( ( TGraphicField * )DataModule2->ADOTable1->FieldByName
            ( "Постер фильма" ) )->SaveToStream( strm );
        strm->Seek( 0, 0 );
        if ( *( Word * )strm->Memory == 0xD8FF )
        {
            Form5->Image1->Picture->Graphic = ptJpg;
        }
        Form5->Image1->Picture->Graphic->LoadFromStream( strm );
        delete strm;
        delete ptJpg;
    }
    else
        if ( !( TBlobField * )DataModule2->ADOQuery1->FieldByName
            ( "Постер фильма" )
            ->IsNull && Form1->DBGrid1->DataSource->DataSet ==
            DataModule2->ADOQuery1 )
        {
            if ( !Form5->Image1->Visible )
            {
                Form5->Image1->Visible = true;
            }
            TMemoryStream * strm = new TMemoryStream;
            TJPEGImage * ptJpg = new TJPEGImage;
            ( ( TGraphicField * )DataModule2->ADOQuery1->FieldByName
                ( "Постер фильма" ) )->SaveToStream( strm );
            strm->Seek( 0, 0 );
            if ( *( Word * )strm->Memory == 0xD8FF )
            {
                Form5->Image1->Picture->Graphic = ptJpg;
            }
            Form5->Image1->Picture->Graphic->LoadFromStream( strm );
            delete strm;
            delete ptJpg;
        }
        else
        {
            Form5->Image1->Visible = false;
        }
}

Цитата Сообщение от Evgeny92 Посмотреть сообщение
Т.к. я не знаю что делать с 2-мя таблицами.
Меняйте DataSet у DBGrid.
2
Evgeny92
276 / 4 / 4
Регистрация: 09.11.2011
Сообщений: 294
05.05.2013, 23:40  [ТС] 37
Спасибо большое.

Добавлено через 33 минуты
Кстати еще нужно мне с браузером решить вопрос также как и с картинками.

С этим кодом
C++
1
2
3
4
5
AnsiString wsg = DataModule2->ADOTable1->FieldByName( "Трейлер" )
        ->AsString; // Из поле Трейлер будет открываться ссылка на веб страницу
    wsg = wsg.SubString( wsg.Pos( "#" ) + 1, wsg.Length( ) );
    wsg = wsg.Delete( wsg.Pos( "#" ), 1 );
    Form5->CppWebBrowser1->Navigate(WideString(wsg) ) ;  //На форме О фильме Отображает веб страницу с трейлером.
Как это мне сделать? Тоже через условие.

Добавлено через 4 минуты
Хотя стоп. Сейчас сам что то задумал.

Добавлено через 3 минуты
Во так попытался сделать. аналогично как и с тем кодом на изображение.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if (AnsiString wsg = DataModule2->ADOTable1->FieldByName( "Òðåéëåð" )->AsString && Form1->DBGrid1->DataSource->DataSet == DataModule2->ADOTable1) // Èç ïîëå Òðåéëåð áóäåò îòêðûâГ*ГІГјГ±Гї ññûëêГ* Г*Г* ГўГҐГЎ Г±ГІГ°Г*Г*èöó
     {
    wsg = wsg.SubString( wsg.Pos( "#" ) + 1, wsg.Length( ) );
    wsg = wsg.Delete( wsg.Pos( "#" ), 1 );
    }
    else
if (AnsiString wsg = DataModule2->ADOQuery1->FieldByName( "Òðåéëåð" )
        ->AsString && Form1->DBGrid1->DataSource->DataSet == DataModule2->ADOQuery1) // Èç ïîëå Òðåéëåð áóäåò îòêðûâГ*ГІГјГ±Гї ññûëêГ* Г*Г* ГўГҐГЎ Г±ГІГ°Г*Г*èöó
        {
        wsg = wsg.SubString( wsg.Pos( "#" ) + 1, wsg.Length( ) );
    wsg = wsg.Delete( wsg.Pos( "#" ), 1 );
      }
      else
      {
    Form5->CppWebBrowser1->Navigate(WideString(wsg) ) ;  //ГЌГ* ôîðìå ГЋ ôèëüìå ÎòîáðГ*Г¦Г*ГҐГІ ГўГҐГЎ Г±ГІГ°Г*Г*èöó Г± òðåéëåðîì.
          }
Добавлено через 1 минуту
Но при запуске ошибку выдает на строчку:

C++
1
if (AnsiString wsg = DataModule2->ADOTable1->FieldByName( "Трейлер" )->AsString && Form1->DBGrid1->DataSource->DataSet == DataModule2->ADOTable1)
Курсор стоит на &&

Добавлено через 1 минуту
Исправьте код мой пожалуйста.
0
Ddv122
Почемучка)
1240 / 300 / 30
Регистрация: 23.12.2010
Сообщений: 1,998
Записей в блоге: 1
06.05.2013, 01:05 38
Цитата Сообщение от Evgeny92 Посмотреть сообщение
Но при запуске ошибку выдает на строчку:
а какой смыл в коде этом, логику не пойму
ну и примерно так
C++
1
      if ((wsg == DataModule2->ADOTable1->FieldByName( "Òðåéëåð" )->AsString) && (Form1->DBGrid1->DataSource->DataSet == DataModule2->ADOTable1))
1
The_Immortal
1560 / 496 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
06.05.2013, 01:19 39
Evgeny92,
Цитата Сообщение от Evgeny92 Посмотреть сообщение
Исправьте код мой пожалуйста.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void Browser( TDataSet * DataSet )
{
    AnsiString wsg = DataSet->FieldByName( "Трейлер" )->AsString;
    // Из поле Трейлер будет открываться ссылка на веб страницу
    wsg = wsg.SubString( wsg.Pos( "#" ) + 1, wsg.Length( ) );
    wsg = wsg.Delete( wsg.Pos( "#" ), 1 );
    Form5->CppWebBrowser1->Navigate( WideString( wsg ) );
    // На форме О фильме Отображает веб страницу с трейлером.
}
...
void __fastcall TForm5::TabSheet2Show( TObject * Sender )
{
    if ( Form1->DBGrid1->DataSource->DataSet == DataModule2->ADOTable1 )
    {
        Browser( DataModule2->ADOTable1 );
    }
    if ( Form1->DBGrid1->DataSource->DataSet == DataModule2->ADOQuery1 )
    {
        Browser( DataModule2->ADOQuery1 );
    }
}
Кстати, если оставаться на вкладке "Трейлер" и покликать на DBNavigator, то трейлеры не меняются - так задумано?

И второе: очень рекомендую у всех КомбоБоксов свойство Style выставить в csDropDownList, иначе первый попавшийся "дурак" порушит Вашу программку
1
Evgeny92
276 / 4 / 4
Регистрация: 09.11.2011
Сообщений: 294
06.05.2013, 02:17  [ТС] 40
меняется сама веб-страница с трейлером. Должен переключаться.

Спасибо огромное. Все сделал программа работает.
0
06.05.2013, 02:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.05.2013, 02:17

C++ Builder, ComboBox
Доброго вечера! пожалуйста, помогите разобраться: Порядок занесения новой...

Работа с ComboBox в С++ Builder 6
Есть такая проблема, надо на форме связать два ComboBox компонента. При выборе...

DBImage и ComboBox в C++Builder
Добрый день специалисты. Использую C++Builder 6. Дипл. проект делаю. Тема...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru