|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Как организовать связь многие ко многим через ADO?
Вопрос такой: каким образом можно организовать связь таблиц (ADOTable) находящихся в отношении многие ко многим между собой через кросс таблицу в делфи.
Связать две таблицы в отношении один-ко-многим просто - я указывал mastersource и masterfield у подчиненной таблицы, но два mastersource не существует... ----------------------------------------------------- Чем пользуюсь: Delphi 7, MS SQL Server 2005 EE, ADO |
#2
|
|||
|
|||
Связь реализуется на БД.
А в клиенте ты ее нормально все-равно не покажешь. Так что тут достаточно 2х компонентов. Подробнее задачу давай, т.к. не понятно что конкретно ты хочешь. Например, есть, ну не знаю... аренда машин. Есть табоица клиентов и таблица машин. Нам интересно знать какие машины клиент вообще брал в аренду. Задача чисто умозрительная. В реале такие задачи так не решаются. Соответсвенно, делаем таблицу Clients и таблицу Cars, ну и отношение между ними м-к-м в таблице ClientsCars. Так вот в приложении тебе все-равно надо показывать либо машины, ктоторые брал конкретный клиент, либо клиентов, кторые брали конкретную машину. Т.е. в обоих случаях отношение отображается на самом деле один-ко-многим. Ну а запрос будет примерно такой: Код:
SELECT C.* FROM Cars C LEFT JOIN ClientsCars CC ON C.ID = CC.CarID WHERE CC.ClientID = :ClientID Т.е. мы сотмрим какие машины брал клиент. Для этого склеиваем таблицу Машин и таблицу МашинКлиентов и фильтруем результат по клиенту (параметр в WHERE). |
#3
|
|||
|
|||
ну это вроде понятно.. Меня интересует возможность редактирования информации и ввода новой информации, а с этим как я понимаю сложнее.
У меня есть такая связка таблиц "Сотрудник" <-> "СотрудникПриказ" <-> "Приказ". Таблица "СотрудникПриказ" содержит внеш.ключи на "Сотрудник" и на "Приказ". В своей программе я открываю сотрудников - они у меня отображены в dbgrid, а рядом кнопка "Создать приказ" по которой открывается новая форма, где вводятся данные приказа. Как сделать ввод и сохранение данных приказа? |
#4
|
|||
|
|||
Так и делать. Работа с таблицей приказов.
Только при сохранении данных ты должен добавить еще запись в таблицу СотрудникПриказ. Вот и вся разница. |
#5
|
||||
|
||||
Вы как-то не тем путем пошли. Делайте так как это происходит в реале.
Сначала рождается приказ за каким-то номером, в котором перечислены сотрудники. 1. Вы заносите в таблицу приказов новую запись, получаете ее номер. 2. Затем в таблицу Сотрудников добавляете/выбираете запись на сотрудника получаете его код. 3. Наконец в таблицу СотрудникПриказ добавляете запись с кодом сотрудника и кодом приказа. 4. Повторяете п.2,3 для всех сотрудников перечисленых в приказе. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#6
|
|||
|
|||
Цитата:
Меня как раз интересуют технические моменты: каким образом следует добавлять запись в "СотрудникиПриказы"? Допустим у меня такой код на сохранение изменений в таблице "Приказы": if DataModuleUnit.OrdersTable.Modified then DataModuleUnit.OrdersTable.Post; Как теперь добавить запись в "СотрудникиПриказы"? |
#7
|
||||
|
||||
1. Прежде чем добавить, сделайте проверку на повтор данных.
2. Постарайтесь неиспользовать прямое обращение к таблице. Все через запрос. Примерно так можно организовать ввод сотрудника Код:
Q := TAdoQuery.Create(nil); Q.Connection := MyDB; Q.SQL.Text := 'select КодСотрудника from Сотрудники where Сотрудник=:Сотрудник'; Q.Parameters.ParamValues['Сотрудник'] := Edit1.Text; Q.Open; if Q.isEmpty then begin Q.SQL.Text := 'insert into Сотрудники (Сотрудник) values(:Сотрудник)'; Q.Parameters.ParamValues['Сотрудник'] := Edit1.Text; Q.ExecSql; Q.SQL.Text := 'select Max(КодСотрудника) as КодСотрудника from Сотрудники'; Q.Open; end; EmployeeKey := Q.FieldValues['КодСотрудника']; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#8
|
|||
|
|||
Цитата:
|
#9
|
|||
|
|||
lmikle, интересно еще твое мнение по вопросу #6.
|
#10
|
||||
|
||||
Цитата:
Так как я писал ранее, прежде чем добавить в таблицу СотрудникиПриказы что-либо вам необходимо получить пару значений КодПриказа из Приказов и КодСотрудника из Сотруднков. Или вы незнаете комманды Append для таблицы? Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#11
|
|||
|
|||
Создание БД каталога автозапчастей
Здравствуйте!
Помогите пожалуйста! Мне нужно создать проект работы каталога автозапчастей. Т.е. каталог я создала всё по нему сделала,теперь нужно сделать так что бы осуществлялся заказ из этого каталога И у меня получается что один клиент может заказать несколько деталей И мне нужно что бы на форме выводился список список клиентов,и при нажатии на одного из них выдавался список деталей которые он заказал Из каталога должны браться два поля Номер по каталогу и Наименование детали Как это можно осуществить,подскажите пожалуйста!!Очень срочно нужно Работа с БД в Accesse |