Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: База данных со связаными таблицами  (Прочитано 10065 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Yegor
Интересующийся

ua
Offline Offline

« : 21-01-2006 15:11 » 

У меня вопрос по связе между таблицами в БД.
Создал с помощью MS Access базу данных. В базе данных есть 2 таблицы.
Перваю таблица типа Master, вторая типа Detail. Одно из полей Master (Foreign Key) таблицы ссылается на Detail таблицу. То есть 2 связанные таблицы.
В программе исспользую ActiveXсовские компоненты для работы с базой данных:
MS ADO Data Control и MS DataGrig Control. Делаю код для отображения Master
таблицы(Студенты):

   m_Dc.SetRecordSource("SELECT * FROM Студенты");
   m_Dc.Refresh();

   m_Dg.SetRefDataSource(m_Dc.GetDSCCursor());
   m_Dg.Refresh();

Где m_Dc = MS ADO Data Control, m_Dg = MS DataGrig Control.
Но при отображении мастер таблицы после этого кода таблица выводится некорректно, нет связи с Detail таблицой.
Так вот сам вопрос: как осуществить нормальный вывод?
Записан
asker
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 26-01-2006 16:56 » 

Я не работал с activeX, но SQL - это ведь стандарт, так что попробуй изменить запрос примерно так:
select * from Студенты,detail where Студенты.fk_detail==detail.pk_detail
Может быть поможет.
Записан

С уважением, asker
Yegor
Интересующийся

ua
Offline Offline

« Ответ #2 : 04-02-2006 12:06 » 

Помогите разобраться. У меня открыта таблица базы данных с помощью первого объекта CDaoTableDef, я эту таблицу редактирую. Параллельльно эта же таблица открывается вторым объектом CDaoTableDef. Здесь я запрашиваю количество строк таблицы с помощью CDaoTableDef::GetRecordCount(). Потом снова редактирую таблицу первым объектом: добавляю или удаляю записи. Возвращаюсь ко второму объекту CDaoTableDef, запрашиваю кол-во строк: CDaoTableDef::GetRecordCount(). Но количество строк не изменяется, то есть GetRecordCount() возвращает неправильное значение. Я пробовал при редактировании таблицы делать транзакции: CDaoWorkspace::BeginTrans(), CDaoWorkspace::CommitTrans(). Но это не помагает. Единственное, что помогает, так это закрыть базу данных, а потом снова открыть с помощью CDaoDatabase::Close() и CDaoDataBase::Open(). Но этого мне делать нельзя, так как БД должна быть открыта.

Каким образом узнать ПРАВИЛЬНОЕ количество строк в ДБ?
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 06-02-2006 12:11 » 

Давай посмотрим что происходит.
0.
1. Открывая таблицу на редактирование, что делает Субд? Естесвенно создает"сегмент отката"
2. Открывая таблцу для подсчета количества записей, СУБД берет снимок от предыдущей сессии 0
3. Изменяешь таблицу + commit

4. Открывая таблцу (или перечитывая) для подсчета количества записей, СУБД берет снимок от предыдущей сессии (3а) (должно брать)


Не понятно что такое база должна быть открыта.
Ты открываешь сессию работы с базой. Открываешь таблицы, но не базу.
Здесь нужно понять принцип работы СУБД.
Разные СУБД ведут себя по разному.
Может так в случае Accessa и должно быть.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Yegor
Интересующийся

ua
Offline Offline

« Ответ #4 : 11-02-2006 11:01 » new

Да, делаю именно на Access. Так каким же образом получить правильное количество записей таблицы?
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines