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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.01.2011, 22:44   #1
Choovak
Пользователь
 
Регистрация: 27.12.2010
Сообщений: 17
По умолчанию Что лучше организовать добавление данных? БД Access

БД - Access, состоит из 2-х таблиц Info_reisa и Punkt_naznachenia. Ключевые поля №_Reisa_I и №_Reisa_P
Через Editы добавляю данные в таблицу Info_reisa, но так Рейс 1, а вот населенных пунктов через которые он проходит - несколько, и не всегда одинаковое число, по этому на форму Добавления, бессмысленно размещать кучу Editов.
Я думаю воспользоваться DBGrid - это реально?
Или что-то другое лучше применить?
Choovak вне форума Ответить с цитированием
Старый 25.01.2011, 13:24   #2
Choovak
Пользователь
 
Регистрация: 27.12.2010
Сообщений: 17
По умолчанию

чем вы пользуетесь для добавления разного числа данных???
Choovak вне форума Ответить с цитированием
Старый 25.01.2011, 14:38   #3
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию

Здравствуйте

1. Организация данных.
В БД создаётся отношение один-ко-многим. Со стороны "один" - таблица Info_reisa, со стороны "многим" - таблица Punkt_naznachenia.

2. Как реализовать в Delphi.
Например, поместить на форму две таблицы скажем: Info_reisaADOTable и Punkt_naznacheniaADOTable. В свойствах Punkt_naznacheniaADOTable указываем в MasterSource на DataSource, связанный с Info_reisaADOTable и MasterField (№_Reisa_I). Думаю в таблице Punkt_naznachenia к этому моменту вы уже создали внешний ключ по полю №_Reisa_I.

3. Отображение данных.
Цитата:
Сообщение от Choovak Посмотреть сообщение
Я думаю воспользоваться DBGrid - это реально?
В основном так и делают. Думаю связать DBGrid с DataSource, связанному с Punkt_naznacheniaADOTable Вы сможете. (не говорю уж об ADOConnection...).


До свидания.

P.S. В общем Ваш вопрос касается отношения Master-Detail (один-ко-многим).
OlegVE вне форума Ответить с цитированием
Старый 25.01.2011, 15:08   #4
Choovak
Пользователь
 
Регистрация: 27.12.2010
Сообщений: 17
По умолчанию

Цитата:
Сообщение от OlegVE Посмотреть сообщение
Здравствуйте

1. Организация данных.
В БД создаётся отношение один-ко-многим. Со стороны "один" - таблица Info_reisa, со стороны "многим" - таблица Punkt_naznachenia.

2. Как реализовать в Delphi.
Например, поместить на форму две таблицы скажем: Info_reisaADOTable и Punkt_naznacheniaADOTable. В свойствах Punkt_naznacheniaADOTable указываем в MasterSource на DataSource, связанный с Info_reisaADOTable и MasterField (№_Reisa_I). Думаю в таблице Punkt_naznachenia к этому моменту вы уже создали внешний ключ по полю №_Reisa_I.

3. Отображение данных.
В основном так и делают. Думаю связать DBGrid с DataSource, связанному с Punkt_naznacheniaADOTable Вы сможете. (не говорю уж об ADOConnection...).


До свидания.

P.S. В общем Ваш вопрос касается отношения Master-Detail (один-ко-многим).
Спасибо, что откликнулся, но связь я наладил, сделал поиск, но столкнулся с проблемой добавления записей.

У меня сейчас проблема с добавлением во вторую таблицу.

И так, БД Access, в ней 2 таблицы Info_reisa (№_Reisa_I, Marshrut, Vrema_otpravlenia и т.д.) и таблица Punkt_naznachenia (№_Reisa_P, Punkt_naznachenia, Vrema_prebitia, Cena_bileta и т.д.) Связь один ко многим от первой таблице ко второй через №_Reisa_I и №_Reisa_P

Код добавления в таблицу Info_reisa:
Код:
procedure TDobavlenie.BitBtnDobavlenieClick(Sender: TObject);
begin
with Dobavlenie.ADOQueryDobavlenie do begin Connection:=Raspisanie.ADOConnection1;
ADOQueryDobavlenie.Insert;
ADOQueryDobavlenie.FieldByName('№_Reisa_I').AsString:= EditReis.Text;
ADOQueryDobavlenie.FieldByName('Marshrut').AsString:= EditMarshrut.Text;
ADOQueryDobavlenie.FieldByName('Vrema_otpravlenia').AsString:= MaskEditVrema_otpravlenia.Text;
ADOQueryDobavlenie.FieldByName('Dni_otpravlenia').AsString:= EditDni_otpravlenia.Text;
ADOQueryDobavlenie.FieldByName('Kolich_mest').AsString:= EditKolich_mest.Text;
ADOQueryDobavlenie.FieldByName('Tip_avtobusa').AsString:= ComboBoxTip.Items.Text;
ADOQueryDobavlenie.FieldByName('Marka').AsString:= EditMarka.Text;
ADOQueryDobavlenie.FieldByName('Voditel').AsString:= EditVoditel.Text;
ADOQueryDobavlenie.FieldByName('Gos_nomer').AsString:= EditGos_nomer.Text;
ADOQueryDobavlenie.Post;
EditReis.Clear;
EditMarshrut.Clear;
MaskEditVrema_otpravlenia.Clear;
EditDni_otpravlenia.Clear;
EditKolich_mest.Clear;
ComboBoxTip.Items.Clear;
EditMarka.Clear;
EditVoditel.Clear;
EditGos_nomer.Clear;
Poisk.ADOQueryPoisk.Close;
Poisk.ADOQueryPoisk.SQL.Clear;
Poisk.ADOQueryPoisk.SQL.Add('select * from Info_reisa, Punkt_naznachenia');
Poisk.ADOQueryPoisk.Open;
Raspisanie.DataSourceInfo.DataSet.Active:=false;
Raspisanie.DataSourceInfo.DataSet.Active:=true;
MessageDlg('Рейс успешно добавлен', mtInformation, [mbOk], 0);
end;
end;
Но мне же еще через эту форму (Dobavlenie) добавлять записи во вторую таблицу Punkt_naznachenia. Там ведь не известно сколько понадобиться полей для добавления.
И вот думаю, что лучше использовать?

___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 25.01.2011 в 15:29.
Choovak вне форума Ответить с цитированием
Старый 25.01.2011, 16:16   #5
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию

Здравствуйте
1. Сравним:
Цитата:
Сообщение от Choovak Посмотреть сообщение
...БД - Access, состоит из 2-х таблиц Info_reisa и Punkt_naznachenia. Ключевые поля №_Reisa_I и №_Reisa_P...
и
Цитата:
Сообщение от Choovak Посмотреть сообщение
...Связь один ко многим от первой таблице ко второй через №_Reisa_I и №_Reisa_P..

Это отношение один-к-одному...

2. DBEdit и DBGrid - не устраивает или "круче" написать 2^N строк кода
До свидания.

P.S. Извините за напоминание: "В общем Ваш вопрос касается отношения Master-Detail (один-ко-многим)."
OlegVE вне форума Ответить с цитированием
Старый 25.01.2011, 21:06   #6
Choovak
Пользователь
 
Регистрация: 27.12.2010
Сообщений: 17
По умолчанию

подождите! )))
В моем случае одному значению поля №_Reisa_I может соответствовать несколько значений поля №_Reisa_P.
Вроде это и получается один-ко-многим!
Choovak вне форума Ответить с цитированием
Старый 25.01.2011, 21:12   #7
Choovak
Пользователь
 
Регистрация: 27.12.2010
Сообщений: 17
По умолчанию

Но суть вопроса не в этом.
Через что добавлять данные в таблицу Punkt_naznachenia?
Я понимаю что DBGrid служит для показа содержимого БД, а можно в DBGrid вносить данные, чтобы он сохранялись в БД? (именно не редактировать, а добавлять)

Последний раз редактировалось Choovak; 25.01.2011 в 21:15.
Choovak вне форума Ответить с цитированием
Старый 26.01.2011, 01:07   #8
asmodey1
Подтвердите свой е-майл
 
Регистрация: 19.12.2010
Сообщений: 808
По умолчанию

То Choovak
Для начала (вы уж извините старика) нужно было бы почитать правила...
Там доступно для всех разъясняется о существовании эдакой кнопотули - "Правка".
Так что все ваши "изыски" идут прямым путем под определение"Флуд"...
Это так, "промежду протчим"...
Цитата:
Но мне же еще через эту форму (Dobavlenie) добавлять записи во вторую таблицу Punkt_naznachenia. Там ведь не известно сколько понадобиться полей для добавления.
И вот думаю, что лучше использовать?
Да ничего !
Извольте делать "ручками" !
Вот когда доберетесь до серверных баз данных, тогда перед вами откроются невиданные перспективы - сохраняемые процедуры, реакции БД при помощи триггеров и многое, многое другое...
А пока - "ручками" сэ-э-эр...
Это вы уже чуток освоили (если судить по стартовому постику)...
Так что пока что придется именно так...

Последний раз редактировалось asmodey1; 26.01.2011 в 01:09.
asmodey1 вне форума Ответить с цитированием
Старый 26.01.2011, 15:46   #9
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию

Здравствуйте

Цитата:
Сообщение от Choovak Посмотреть сообщение
подождите! )))
В моем случае одному значению поля №_Reisa_I может соответствовать несколько значений поля №_Reisa_P.
Вроде это и получается один-ко-многим!
Это Вам так хочется...

Кликните на линии связи на Схеме данных, кликните на Изменить и посмотрите, что внизу написано. А конкретно "Тип отношения:". Там будет написано "один-к-одному".

До свидания.

P.S. Смотрите C:\Program Files\Borland\Delphi7\Demos\Ado\Ado Test\ADOTEST.DPR
Выберите File->Open Table и попробуйте вводить данные.
Спорить не собираюсь.
OlegVE вне форума Ответить с цитированием
Старый 26.01.2011, 23:25   #10
Choovak
Пользователь
 
Регистрация: 27.12.2010
Сообщений: 17
По умолчанию

Специально для Олега пришлось запускать Access, смотреть: Один-ко-многим. Поскольку бд сюда не прикрепить сделал скриншот



Как добавлять в подчиненную таблицу? Я не знаю как быть с ключевым полем?
Изображения
Тип файла: jpg Безимени-1.jpg (244.0 Кб, 120 просмотров)

Последний раз редактировалось Choovak; 27.01.2011 в 21:49.
Choovak вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что лучше организовать добавление данных? БД Access Choovak БД в Delphi 0 23.01.2011 19:39
как лучше организовать базу данных ilin-alex Помощь студентам 3 31.03.2010 12:51
Пишу программу которая ищет файлы на компьютере ! Как лучше организовать структуры данных ? asked86 Общие вопросы Delphi 13 14.12.2008 19:33
HML или ACCESS что лучше использовать? Inbox БД в Delphi 2 15.05.2007 19:13