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

> Внимание!

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

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

 
 Ответить  Открыть новую тему 
> Access & C++(Rad studio 2010), запросы
сообщение
Сообщение #1


Пионер
**

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

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


Доброго времени суток, появился вопрос при написании курсовой: есть база данных Прикрепленное изображение, имеется форма Прикрепленное изображение, в первый комбобокс я записываю все значения столбца Отделение таблицы Отделения (идентификатор Id_отделения я хотел использовать для дальнейших целей):
void __fastcall TForm1::FormCreate(TObject *Sender)
{
ADOTable1->Open();
DBGrid3->Visible = False;
DBComboBox1->Clear();
for (ADOTable1->First(); !ADOTable1->Eof; ADOTable1->Next())
{
DBComboBox1->Items->Add(ADOTable1->FieldValues["Id_отделения","Отделение"]);
}
}

затем я хочу, чтобы при выборе определенного отделения у меня из таблицы Группы записывались значения столбца Группа в комбобокс2, я пытался все это счастье сделать так:
void __fastcall TForm1::DBComboBox1Change(TObject *Sender)
{
try
{
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
DBComboBox2->Enabled = True;
ADOTable2->Open();
DBComboBox2->Clear();
ADOQuery1->SQL->Add("SELECT Группы.Группа FROM Отделения INNER JOIN Группы ON Отделения.Id_отделения = Группы.Id_отделения WHERE Отделения.Отделение='"+DBComboBox1->Text+"'");
ADOQuery1->ExecSQL();
for (ADOTable2->First(); !ADOTable2->Eof; ADOTable2->Next())
{
DBComboBox2->Items->Add(ADOTable2->FieldValues["Id_группы","Группа"]);
}
DBComboBox2->Enabled = True;
}
catch(...)
{
//MessageBox(0,"Такая таблица не существует, сначала создайте её!","Ошибка!",MB_OK);
}
}

но почему-то он игнорирует сравнение идентификаторов и записывает все значения таблицы Группы.
Подскажите мб как это делать, просто на C# чтобы все это сделать надо 4 раза мышкой щелкнуть, зато никак там с добавлением данных в таблицу разобраться не могу.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
просто на C# чтобы все это сделать надо 4 раза мышкой щелкнуть
И зачем эта информация? Тебе ж надо на С++ сделать? Вот и делай, не смотри, сколько где раз надо щелкнуть...

Все проще на самом деле:
1) на форме DataSource (2 шт.), ADOTable (2 шт.) и DBLookupComboBox (тоже 2 шт.)
2) настраиваем ADOTable1 на таблицу "Отделения", а ADOTable2 - на "Группы"
3) настраиваем DataSource1 -> Dataset = ADOTable1 и DataSource2 -> Dataset = ADOTable2
4) теперь LookupComboBox-ы.

Первый будет отображать отделения. Для этого у него:
ListSource = DataSource1; ListField = Отделение; KeyField = Id_Отделение.

Второй - для отображения связанных групп. Сначала настраиваем его вообще на отображение групп:
ListSource = DataSource2; ListField = Группы; KeyField = Id_Группы.

5) А вот теперь надо добавить тот самый функционал, что после выбора определенного значения в первом Lookup-е, во втором останутся только связанные значения. Для этого:
void __fastcall TForm1::DBLookupComboBox1Click(TObject *Sender)
{
ADOTable2->Filtered = false; // Эта таблица связана с Группами, не забыл?

// Просто фильтруем таблицу, чтоб она содержала только нужные записи
ADOTable2->Filter = "[id_branch] = " + IntToStr((int)DBLookupComboBox1->KeyValue);
ADOTable2->Filtered = true;

DBLookupComboBox2->Refresh(); // И обновляем LookupCB
}
Вот и все... А заполнение вручную - выброси из головы, не надо оно. Все делается автоматом...

Ну, и что? Где сложнее настроить нужное поведение?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

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

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


Цитата(volvo @ 26.03.2011 18:56) *

Ну, и что? Где сложнее настроить нужное поведение?

Ммм, все оказалось проще, чем я думал, спасибо, просто я не знаю всех тонкостей работы с бд, если вдруг появятся какие-то сложности, то я знаю, где могут дать совет и подсказатьsmile.gif

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


Пионер
**

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

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


В ходе написания проги возник вопрос: мне нужно вывести успеваемость студентов определенной группы в дбгрид. Я почитал книгу по скл запросам, нашел INSERT INTO SELECT, т.е. из одной в другую переносит значения, однако есть жесткие ограничения насчет количества столбцов. потом пробывал сделать в аксесе запрос, который просто подключил бы к адотейбл и выводил бы всех студентов и запросом ограничивал бы группу. Но и здесь проблема: в гриде выводит только одно поле'ФИО' и все, очтальную информацию не показывает, а в аксесе все норм.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Добавляю в Access-базу Query следующего вида:
Прикрепленное изображение
, добавляю на форму еще одну AdoTable3 и DataSource3, связываю AdoTable3 с q2, и DBGrid - с этой самой Adotable3, так, что у меня сразу в гриде появляется вся статистика, независимо от группы:
Прикрепленное изображение
, а потом, по какому-то событию (например, по изменению DBLookupCombobox2, не зря ж на него навешивалось отображение групп, правда?), точно так же, как и выше, делаю фильтрацию:
void __fastcall TForm1::DBLookupComboBox2Click(TObject *Sender)
{
if(DBLookupComboBox2->Text.Length() > 0)
{
ADOTable3->Filtered = false;
ADOTable3->Filter = "[group] = " + QuotedStr(DBLookupComboBox2->Text);
ADOTable3->Filtered = true;
}
}
, после чего запускаю программу, выбираю в первом Lookup-е отделение, во втором - группу, и ...
Прикрепленное изображение
Что я делаю не так? smile.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Пионер
**

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

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


Цитата(volvo @ 2.04.2011 20:36) *

Что я делаю не так? smile.gif

кхм-кхм, смейтесь или нет, но у меня поле фио 255 символов, я сидел на ноуте с экономией и нижней полосы прокрутки видно не было smile.gif я то делал все правильно, вот белый экран подвел)) все равно спасибо что время уделили)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Пионер
**

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

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


Добрый вечер, опять вопросы: нашал более-менее структурированно делать курсач, поэтому для редактирования таблиц завел 2 форму, повесил туда пока 2 лукапа (отделения и группы) и по 3 кнопки с эдитами на каждую (add,edit,del). Затем начал подключать к лукапам таблицы с первой формы в ListSource (Form1.DataSource1 и тд). НО, когда я хочу добавить\изменить\удалить запись, у меня выскакивает экспепшн Missing Connection or ConnectionString. Затем я все нужные таблицы, квери и адооконнекшн закинул на 2 форму, но все равно такая ошибка, в чем проблема тогда?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Пионер
**

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

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


решил с этим проблему, остался последний вопрос: какой компонент для формирования отчета в Excel есть в С++? мне преподаватель нарисовал приблизительно форму отчета, только не знаю в чем его делать
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Пионер
**

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

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


Почитал. Есть компонент QuickReport, но он у меня отсутствует, посоветуете может какое другое средство для формирования отчетов?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






Что значит "отсутствует"? Версия Билдера какая? Может он есть, но не установлен по умолчанию, и его надо доустановить (как было с Дельфи 7). В 2009-м Билдере по умолчанию ставится Rave Reports (закладка Rave ,все имена классов начинаются с TRv...)

В конце концов можно напрямую работать с Excel-ем, через OLE, без посредников...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Пионер
**

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

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


Цитата(volvo @ 11.04.2011 12:53) *

Что значит "отсутствует"? Версия Билдера какая? Может он есть, но не установлен по умолчанию, и его надо доустановить (как было с Дельфи 7). В 2009-м Билдере по умолчанию ставится Rave Reports (закладка Rave ,все имена классов начинаются с TRv...)

В конце концов можно напрямую работать с Excel-ем, через OLE, без посредников...

ну вот просто вкладки нет, code gear 2010, Rave Reports по умолчанию ставились, но в компонентах его нет и все...
Я бы делал через Excel, но там сложноватая структура отчета у меня... И если нет компонента, его скачать и просто в пакет билдера доустановить?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






Цитата
code gear 2010, Rave Reports по умолчанию ставились, но в компонентах его нет и все...
Если ставились - то ходи в меню Component -> Install Packages, и проверяй, установлена ли вот эта галочка:


Эскизы прикрепленных изображений
Прикрепленное изображение
 К началу страницы 
+ Ответить 

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

 





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