Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запрос на базе нескольких таблиц в Accesse.


JazY ©   (2005-12-10 23:42:00) 

Я использую обычный Аксесовский файл в основе которого 12 таблиц (по количеству мясецев). Таблицы стандартные и заполняются нашими местными манагерами (они же менеджеры). Во всех таблицах есть поле "номер машины". Суть в том, что каждый месяц уходит машина с текущими заказами. Т.е к примеру, в марте уходит машина в основном с заказами, которые получены в марте. Но кроме мартовских заказов в нее попадают некоторые январьские и февральские. Таким образом, заполняя поля "номер машины" (речь идет о порядковом номере) один и тот же номер может фигурировать в разных месяцах. Ключевая задача заключается в том, чтобы вывести отчет по номерам машин. Если бы это была единая таблица, то проблем нет. Однако, тут 12 таблиц (и поменять тут ничего нельзя по целому ряду объективных и не очень причин) и запрос должен проверить все 12 таблиц. В принципе, теоритически понятно как эту задачу выполнить в Делфи. Насколько я понимаю, можно последовательно загружать таблицы искать в них нужные строки и записывать их в отчет. Но данную задачу видимо можно выполнить и внутри самого Аксеса. Т.е средствами Аксеса, создать запрос, а потом этот запрос вызывать из Делфи. Можно ли средствами Аксеса создать запрос, который просмотрить 12 таблиц и выведет нужный результат?


msguns   (2005-12-12 09:51:00) [1]

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

1. Привести модель БД в "естественный" вид, введя вместо непонятных таблиц, содержащих "псевдодокументостроки" (еще и помесячно) нормальные "нативные" объекты: заказы, поступления, отгрузки.  
2. Интерфейс переделать с редактирования "таблиц" на редактирование "документов" как единых и неделимых сущностей.
3. Добавить складской учет с возможностью учета по поставкам и хранения с указанием заказа, "под" который приобретался товар у поставщиков. Все движение (все документы) "завязать" на склад.
4. Ввести учет менеджеров с разделением заказов и покупателей: каждый документ должен быть "авторизирован" на соотв. менеджера.

Только после этого имеет смысл мостить какую-то аналитику, в т.ч. и ту, о которой упоминается в сабже.


JazY   (2005-12-11 22:45:00) [2]


> использовать UNION ALL

Точно! Я вот тестировал и как раз обнаружил такой косяк.


sniknik   (2005-12-11 15:01:00) [3]

хм.. не очень очевидно и думаю надо про это сказать.
с UNION при таком выборе (из всех поле выбраны только 2) могут быть повторы записей по значениям оба совпадут (и даже если одно из них уникально в пределах своей таблици... тоже может но с очччень маленькой вероятностью)
в общем тут надо(лучше) использовать UNION ALL чтобы не потерять дубль (который на самом деле не дубль а аналогичный рейс на туже сумму в другом месяце).
ну или признак таблицы/месяца в каждый запрос включить.


Anatoly Podgoretsky   (2005-12-11 13:52:00) [4]

Ну вот наконец, с самого начала туда и толкали.
Теперь второй толчок, читай книгу отдельно от программирования, а не взамен. Базовые основы надо знать до.


JazY   (2005-12-11 02:44:00) [5]

SELECT snum, sname
FROM  Salespeople
WHERE city = 'London'
UNION
SELECT cnum, cname
FROM Customers
WHERE city = 'London';                        

Вот кажись нашел пример! Все таки книга - это сила... особенно правильные :)

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


JazY   (2005-12-11 02:30:00) [6]

2 YurikGL
Я уже книжку качаю (за ссылку спасибо!) и буду сейчас обучаться, но если вдруг появится возможность указать образец, то это сильно поможет делу.


YurikGL   (2005-12-11 02:24:00) [7]


> Т.е я так понял, что с помощью SQL запросов можно вытащить
> информацию из нескольких таблиц?

Абсолютно верно


> Мне бы увидеть пример и я бы по аналогии решил указанную
> задачу.

Делаешь запрос типа select ... from ... where....

Подробнее см http://podgoretsky.com/ddp.htmlМартин Грубер. Понимание SQL

И вообще советую почитать книги по основам БД.


JazY   (2005-12-11 02:10:00) [8]

Т.е я так понял, что с помощью SQL запросов можно вытащить информацию из нескольких таблиц?
Однако! Я так понял, что на храпом данную задачу не разрешить.
Дело в том, что я признаться новичок. Аксес и Делфи использую не как специлист программист, а в попытке упростить свою работу с помощью этакого кустарного программирования. Мне бы увидеть пример и я бы по аналогии решил указанную задачу. Конечно, справка это здорово, но мне она сейчас как я ежу футболка. Вот пример сильно бы помог.


YurikGL   (2005-12-11 01:22:00) [9]

ИМХО автору нужно посмотреть, что такое SQL-запросы, как их используют и что означает UNION.


Anatoly Podgoretsky   (2005-12-11 01:16:00) [10]

Ну какая разница Акцесс или нет, это относится к фундаменту SQL
Теперь бери справку по Акцесс (JET) или можно по любому серверу и смотри как этим пользоваться.


JazY   (2005-12-11 00:32:00) [11]


> Опа, как же ты тогда программируешь в Акцесс?

Я не программирую в Аксес, я просто хочу использовать встроенные функции, чтобы упростить работу в Делфи.


Anatoly Podgoretsky   (2005-12-11 00:16:00) [12]

Опа, как же ты тогда программируешь в Акцесс?


JazY   (2005-12-11 00:10:00) [13]


> UNION

Эээээ.... А это что такое? Можно по подробней?


Anatoly Podgoretsky   (2005-12-11 00:01:00) [14]

UNION


Наверх

Титульная страница Поиск, карта сайта Написать письмо