Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.09.2019, 13:10
APTEMKA APTEMKA вне форума
Прохожий
 
Регистрация: 28.09.2019
Сообщения: 13
Версия Delphi: Delphi 7
Репутация: 10
Восклицание Delphi 7 и MS Access

Всех приветствую. У меня есть инструкция по связыванию элементов таблиц в Delphi, которые созданы с помощью Database Desktop (формат .db). Однако чтобы не заморачиваться я создал БД в MS Access (формат .mdb) и подключил к Delphi,к слову,всё заработало. Но пришёл я к тому,что не знаю как перенести связи между таблицами с MS Access в Delphi. Есть ли у кого идеи как это сделать?Или они сразу тоже переносятся вместе с таблицами?
Ответить с цитированием
  #2  
Старый 28.09.2019, 13:51
Аватар для Kailon
Kailon Kailon вне форума
Активный
 
Регистрация: 06.06.2010
Сообщения: 339
Версия Delphi: 10.4
Репутация: 429
По умолчанию

Цитата:
Сообщение от APTEMKA
Есть ли у кого идеи как это сделать?
Да, есть. MasterSource/MasterFields в помощь.
__________________
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.
Ответить с цитированием
  #3  
Старый 28.09.2019, 14:56
APTEMKA APTEMKA вне форума
Прохожий
 
Регистрация: 28.09.2019
Сообщения: 13
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Kailon
Да, есть. MasterSource/MasterFields в помощь.
Как я понял,в качестве MasterSourse(т.е. главной) можно использовать только одну таблицу. Просто у меня такая бд,где одна таблица зависит от многих.Как мне это провернуть?
И ещё вопрос: в MasterFields выскакивает ошибка,что аргументы имеют неверный тип или конфликтуют. У главной таблицы нужная столбца-это ключ(т.е. число), поэтому тип столбца я поставил число,но ошибка осталась.
Ответить с цитированием
  #4  
Старый 28.09.2019, 17:08
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Тут такой вопрос, а ты в правльном направлении связываешь таблицы? Вообще, MsterSource используется для реализации отношения Master-Details. Случай, когда у тебя много мастеров и одна таблица деталей я даже представить не могу. Обычно такое делается для справочников или сборок (в терминах ERD), но там отдельные поля ключей и другое направление связей. Т.е. похоже, что ты делаешь что-то не то...
Короче, что бы дать тебе толковый совет, нужно больше информации о том, что же ты конкретно делаешь...
Ответить с цитированием
  #5  
Старый 29.09.2019, 03:12
Аватар для Kailon
Kailon Kailon вне форума
Активный
 
Регистрация: 06.06.2010
Сообщения: 339
Версия Delphi: 10.4
Репутация: 429
Сообщение

Цитата:
Сообщение от lmikle
Короче, что бы дать тебе толковый совет, нужно больше информации о том, что же ты конкретно делаешь...
Поддерживаю.
Цитата:
Сообщение от APTEMKA
Просто у меня такая бд,где одна таблица зависит от многих.Как мне это провернуть?
Показывай схему данных из Access. Может понятней будет.
__________________
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.
Ответить с цитированием
  #6  
Старый 30.09.2019, 00:50
Аватар для Guaho
Guaho Guaho вне форума
Начинающий
 
Регистрация: 27.08.2017
Сообщения: 173
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Я делал пару раз утилиты переноса связанных данных. Ничего страшно сложного нет. При переносе данных мастер-записи (равно как и слэйв-записи) получат новые коды (как автоинкремент назначит). В детальной таблице есть поле "Код мастер-записи" (можно называть его "ID", это как угодно). Нужно не просто скопировать данные двух таблиц, но ещё для записей подчинённой таблицы в упомянутое поле "Код мастер-записи" вбить новые коды, а именно коды мастера в таблице-приёмнике. А для этого надо перебрать все записи в подчинённой таблице-приёмнике, и при этом:
1. Найти такую же слэйв-запись в источнике и оттуда узнать код мастер-записи (Locate по основным полям).
2. Найти мастер-запись в источнике по её известному коду (Locate по полю "Код").
3. Найти эту же мастер-запись в приёмнике (Locate по основным полям) и получить её код.
4. Этот код вбить в поле "Код мастер-записи" приёмника.
Все эти манипуляции необходимы потому, что поле "Код", или "ID", идентифицирующее записи, - автоинкрементное, в итоге при переносе данных в приёмнике получатся совсем не такие коды записей, как в источнике, потому связь по кодам из источника в приёмнике не проканает.

Последний раз редактировалось Guaho, 30.09.2019 в 00:53.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:36.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter