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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.12.2009, 23:49
innirvana innirvana вне форума
Прохожий
 
Регистрация: 12.12.2009
Сообщения: 14
Репутация: 10
По умолчанию Нужна помощь, в связывании таблиц

Доброго времени суток, уважаемые форумчане. Интересует такой вопрос: есть три таблицы,созданные с помощью Database Desktop. Нужно связать эти таблицы между собой. Предположительно, поля для первой таблицы:
1.автоинкримент.
2.Код склада.
3.Код товара.
Второй:
1.Код склада.
2.Директор склада.
3.Телефон.
Третьей:
1.Код товара.
2.Наименование товара.
3.Цена.
Непосредственно, связь между двумя первыми таблицами я сделал, через код склада, все функционирует нормально, как теперь связать по наименованию товара первую и третью таблицу?
P.s.Все делал с помощью ttable.
Ответить с цитированием
  #2  
Старый 13.12.2009, 00:07
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Так-же как и первую со второй связали через поля [Код товара]
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 13.12.2009, 00:12
innirvana innirvana вне форума
Прохожий
 
Регистрация: 12.12.2009
Сообщения: 14
Репутация: 10
По умолчанию

Проблема в том, что в свойство мастер соурс компонента т.тэйбл можно указать только один родительский набор данных, следовательно установить только одну связь. Можно ли как-то решить эту проблему? Заранее спасибо.
Ответить с цитированием
  #4  
Старый 13.12.2009, 00:19
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Так у вас и будет по одному.
Вторая табля - мастер для первой, а первая мастер для третьей.
Вы бы их имена-то дали для ориентировки.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 13.12.2009, 00:30
innirvana innirvana вне форума
Прохожий
 
Регистрация: 12.12.2009
Сообщения: 14
Репутация: 10
По умолчанию

Спасибо большое. По логике все правильно. Меня просто смутило - то, что в теории справочники вроде как должны быть главными, т.е. от них должны зависеть другие таблицы, а тут выходит наооборот.

И сразу вопрос, а если бы мне нужно было связать одну таблицу с двумя мастерами? Такое вообще возможно?
Ответить с цитированием
  #6  
Старый 13.12.2009, 00:35
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Да, но не автоматом. Через запросы. Вообще встроеная реализация Мастер-детайл очень тормозная. Не увлекайтесь ей.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #7  
Старый 13.12.2009, 00:47
innirvana innirvana вне форума
Прохожий
 
Регистрация: 12.12.2009
Сообщения: 14
Репутация: 10
По умолчанию

Надеюсь, не утомил еще)
В общем,а могу я как-то эти связи программно отключить? Чтобы по нажатию кнопки можно было показать все содержимое всех таблиц, а не частично, как это происходит, когда таблицы связаны?

Вообще, в результате, я должен сформировать некое подобие ведомости, определенного типа, из полей различных таблиц и с подведение итогов, к примеру по складу, и всего. Подскажите пожалуйчта, с помощью чего это можно реализовать?
Ответить с цитированием
  #8  
Старый 13.12.2009, 00:48
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Конечно. Примерно так:
Отключение:
Код:
Table1.MasterSource := nil;
Подключение:
Код:
Table1.MasterSource := DataSource1;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #9  
Старый 14.12.2009, 16:17
innirvana innirvana вне форума
Прохожий
 
Регистрация: 12.12.2009
Сообщения: 14
Репутация: 10
По умолчанию

Спасибо за помощь.


В ходе выполнения работы возник следующий вопрос:
есть таблица main с полями
1.код склада
2.код цеха
3.количество
так же таблица spr1 с полями
1.код склада
2.телефон
Таблицы связаны по коду складаю
Нужно получить отчет следующего типа:
код склада____ телефон____ код цеха_____колв-во___
сумма кол-в по складу ___
сумма кол-в по складам__

Как я понимаю,это надо сделать по c помощью sql запросов,я поставил
tquery,связал с базой данных и соответсвенно с bdgrid'ом.
Как должен выглядеть запрос чтобы в таблице получить комбинацию из полей двух связных таблиц? И как можно вставить после завершения записей по каждому складу строку о сумме по текущем складу?
Ответить с цитированием
  #10  
Старый 14.12.2009, 16:58
innirvana innirvana вне форума
Прохожий
 
Регистрация: 12.12.2009
Сообщения: 14
Репутация: 10
По умолчанию

Так,с получением общей таблицы - вопрос отпал.По преженему остается открытым вопрос, о вставке строки после того, как закончатся записи по определенному складу,в которой будет содержатся сумма кол-в по этому складу.
Ответить с цитированием
  #11  
Старый 14.12.2009, 17:11
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Если надо вставить непосредственно в грид, то это не так просто. Стандартные средства не предусматривают группировку и сумирование.
Обойти это можно с помощью запроса на объединение, но это несколько некрасивое решение, но если вас устроит то вот где-то так:
Код:
select id,Caption,Price from Goods
union
select -1,'Итого',Sum(Price) from Goods
order by id desc
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #12  
Старый 14.12.2009, 17:48
innirvana innirvana вне форума
Прохожий
 
Регистрация: 12.12.2009
Сообщения: 14
Репутация: 10
По умолчанию

Хм,видимо что-то неправильно понял,пока не удалось)
Вот мой код запроса,сливающий две таблицы в одну.Соответственно на следующей строчке в bdgrid хочу получить итог - общую сумму по полю Колво
Код:
select 
(КодСклада/1) as N,
КодСклада,
Телефон,
КодЦеха,
Колво 
from spr1 
left outer join mainfile on spr1.КодСклада = mainfile.КодСклада
union
Можете написать с чем надо объеденить данный запрос?
Ответить с цитированием
  #13  
Старый 14.12.2009, 19:50
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Так попробуйте:
Код:
select 
(КодСклада/1) as N,
КодСклада,
Телефон,
КодЦеха,
Колво 
from spr1 
left outer join mainfile on spr1.КодСклада = mainfile.КодСклада
union
select null,null,null,'Итого:',Sum(Колво) 
from spr1 
left outer join mainfile on spr1.КодСклада = mainfile.КодСклада

Не понял, зачем (КодСклада/1) as N ?
И еще один момент. Я для того что-бы строка с итогом попала вниз, сортирую по коду записи, предварительно присваивая итогу -1, т.е. заведомо минимальное значение.
У вас есть в таблице аналогичное поле?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 14.12.2009 в 19:53.
Ответить с цитированием
  #14  
Старый 14.12.2009, 21:03
innirvana innirvana вне форума
Прохожий
 
Регистрация: 12.12.2009
Сообщения: 14
Репутация: 10
По умолчанию

(КодСклада/1) as N - хах,это я просто тестировал возможность присвоения имени столбцу.
Еще раз огромное спасибо за помощь
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter