![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запрос на базе нескольких таблиц в 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