Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.03.2012, 22:03   #1
roxy7
Пользователь
 
Регистрация: 20.10.2011
Сообщений: 53
По умолчанию Добавление данных

Здравствуйте! Добрые люди, подскажите, пожалуйста.

После нажатия кнопки "Добавить", в подчиненной таблице в столбце Номер учебной группы должны записи добавиться автоматически, так как
Схемма данных.zip

Но они у меня не отображаются никак. Помогите разобраться в моей программе:
Добавление данных.zip

Свойства MasterSource и MasterFields компонента AdoTable тоже не помогли(
roxy7 вне форума Ответить с цитированием
Старый 02.03.2012, 00:17   #2
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Цитата:
... в подчиненной таблице в столбце Номер учебной группы должны записи добавиться автоматически, так как [Схема данных.zip]
Не совсем так. Вернее, совсем не так.
Утверждение, что "должны записи добавиться автоматически" ни на чем не основаны. Схема отношения таблиц справедлива при чтении данных, когда связи между строками таблиц уже существуют.
При добавлении же, связи еще не установились и с какого перепугу что-то там должно появляться автоматом? Тем более на форме клиентской программы.

Допустим, мы ввели в поля формы все значения, но значение "Номер учебной группы" не записываем в таблицу. Откуда БД будет "знать" что добавляемая строка относится к какой-то конкретной группе?

Нет, батенька, номер группы тоже надо записать в подчиненную таблицу. Вот тогда схема эта будет "работать". Да и то, как сказано выше, только при объединении данных этих двух таблиц через селективный запрос (SELECT).

Другое дело, если мы хотим использовать активную строку из главной таблицы для чтения из нее номера группы.
Здесь да, можно взять номер группы и подставить ее в табличное поле слушателей. Для пользователя группа будет введена как бы автоматически:
Код:
procedure TForm1.Button2Click(Sender: TObject);
begin
  ADOTable2.Insert;
  ADOTable2.FieldByName('Слушатель учебного курса').AsString := Edit1.Text;;
  ADOTable2.FieldByName('Год рождения').AsInteger := StrToInt(Edit2.Text);
  ADOTable2.FieldByName('Номер школы').AsInteger := StrToInt(Edit3.Text);
  ADOTable2.FieldByName('Класс').AsInteger := StrToInt(Edit4.Text);
  ADOTable2.FieldByName('Номер учебной группы').AsInteger := 
        ADOTable1.FieldByName('Номер учебной группы').AsInteger;
  ADOTable2.Post;
end;
Кстати.
- добавление записей одновременно в таблицу групп и слушателей как-то не очень понятно.
Такое возможно только, если в каждой группе всегда по одному слушателю. Если же в группе может быть больше одного слушателя, то добавлять в эти таблицы записи нужно отдельно;
- создавать первичный ключ в таблице на поле, которое может не иметь уникальных значений не принято (попросту нельзя). Надо сделать отдельное поле для первичного ключа (типа Счетчик, к примеру). Речь о таблице слушателей.
- отображение записей в подчиненной таблице надо фильтровать в зависимости от активной строки в главной таблице. Так чтобы в подчиненной таблице показывались слушатели из одной группы (та, которая активная в главной). А это делается через фильтр ADOTable или при использовании ADOQuery условиями в запросе.

Последний раз редактировалось Прик; 02.03.2012 в 00:54. Причина: Дабавим кое-что
Прик вне форума Ответить с цитированием
Старый 02.03.2012, 11:45   #3
roxy7
Пользователь
 
Регистрация: 20.10.2011
Сообщений: 53
По умолчанию

Цитата:
Сообщение от Прик Посмотреть сообщение
Не совсем так. Вернее, совсем не так.
Утверждение, что "должны записи добавиться автоматически" ни на чем не основаны. Схема отношения таблиц справедлива при чтении данных, когда связи между строками таблиц уже существуют.
При добавлении же, связи еще не установились и с какого перепугу что-то там должно появляться автоматом? Тем более на форме клиентской программы.

Допустим, мы ввели в поля формы все значения, но значение "Номер учебной группы" не записываем в таблицу. Откуда БД будет "знать" что добавляемая строка относится к какой-то конкретной группе?

Нет, батенька, номер группы тоже надо записать в подчиненную таблицу. Вот тогда схема эта будет "работать". Да и то, как сказано выше, только при объединении данных этих двух таблиц через селективный запрос (SELECT).

Другое дело, если мы хотим использовать активную строку из главной таблицы для чтения из нее номера группы.
Здесь да, можно взять номер группы и подставить ее в табличное поле слушателей. Для пользователя группа будет введена как бы автоматически:
Код:
procedure TForm1.Button2Click(Sender: TObject);
begin
  ADOTable2.Insert;
  ADOTable2.FieldByName('Слушатель учебного курса').AsString := Edit1.Text;;
  ADOTable2.FieldByName('Год рождения').AsInteger := StrToInt(Edit2.Text);
  ADOTable2.FieldByName('Номер школы').AsInteger := StrToInt(Edit3.Text);
  ADOTable2.FieldByName('Класс').AsInteger := StrToInt(Edit4.Text);
  ADOTable2.FieldByName('Номер учебной группы').AsInteger := 
        ADOTable1.FieldByName('Номер учебной группы').AsInteger;
  ADOTable2.Post;
end;
Кстати.
- добавление записей одновременно в таблицу групп и слушателей как-то не очень понятно.
Такое возможно только, если в каждой группе всегда по одному слушателю. Если же в группе может быть больше одного слушателя, то добавлять в эти таблицы записи нужно отдельно;
- создавать первичный ключ в таблице на поле, которое может не иметь уникальных значений не принято (попросту нельзя). Надо сделать отдельное поле для первичного ключа (типа Счетчик, к примеру). Речь о таблице слушателей.
- отображение записей в подчиненной таблице надо фильтровать в зависимости от активной строки в главной таблице. Так чтобы в подчиненной таблице показывались слушатели из одной группы (та, которая активная в главной). А это делается через фильтр ADOTable или при использовании ADOQuery условиями в запросе.
Понятно. Спасибо Вам большое!
roxy7 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
база данных. добавление и удаление данных midiss Общие вопросы Delphi 3 09.12.2011 13:07
добавление данных в бд wulf_01 Помощь студентам 1 18.10.2011 14:56
добавление данных sveta_s БД в Delphi 4 28.05.2011 01:48
Добавление данных Ruska882009 PHP 2 22.09.2009 18:36
Добавление данных OLEGSENT БД в Delphi 3 17.06.2008 23:47