powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сложный рекурсивный запрос или как получить суммы по разным алгоритмам
7 сообщений из 57, страница 3 из 3
Сложный рекурсивный запрос или как получить суммы по разным алгоритмам
    #38247874
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оставляешь в запросе только айди рута (изделия в целом), айди запчасти, по полю расчитанного количества - агрегат суммы.
...
Рейтинг: 0 / 0
Сложный рекурсивный запрос или как получить суммы по разным алгоритмам
    #38247880
Изерлонер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-Любитель,

не знаю и чего ты нам помогаешь, но без твоих советов и тем более примеров было бы ... очень плохо все. Весьма вероятно что давно бы оставил эту затею и грустно возился бы с экселем... до тех пор пока под зад бы не с работы не пнули, у нас это быстро. До меня нескольких человек сменили. Всё думают что один человек этакую прорву потянет. Не тянет значит работник плохой. А то что у работника соответствующих задаче инструментов нет ... то никак не дойдет. ... Военные блин (пусть и бывшие), особенная психология.
Скачал твои примеры с соседней ветки, буду разбираться.
...
Рейтинг: 0 / 0
Сложный рекурсивный запрос или как получить суммы по разным алгоритмам
    #38248695
Изерлонер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
П-Л, думал сначала отдельную тему завести, но так-как вопрос все-таки не совсем по Акцесс, и более к тебе нежели к другим форумчанам - задаю его здесь.
Я помню твои предупреждения о том что наименования таблиц и запросов должны звучать четко, да так что бы сразу было понятно о чем речь. Сейчас у меня проблема как раз в этой области. А конкретно по запросам. Если таблицы можно увидеть на схеме данных, посмотреть что от чего зависит, и тем более прописать в схеме примечания для каждой таблицы, то с запросами все сложнее. Для них нет такой схемы, к ним очень сложно придумать однозначные наименования (особенно если запросы по сути одни и те же и отличаются лишь в деталях) а возможно ли ставить для них примечания где-либо, я не знаю, и такой возможности не нашел.
Между тем запросов у меня выше крыши (больше чем исходных таблиц). Не все из них нужные, какие-то заменены на более новые и проработанные, а старые остались либо для связи с кодом на VBA которые еще не успел поправить, либо еще для каких-то целей. Как бы то ни было имею массу запросов типа:
Код: sql
1.
qryNormSumZeh, qryNormSumIzd, qryNorm, qryNormSumZehCnt, qrySumIzdNorm .....


и т.д. и т.п. В результате даже самому стало сложно разобраться что это за запросы и какой же из них конкретно мне нужен. Ни примечаний, ничего поясняющего нет и как их туда всунуть не знаю, все кучей в окне студии слева. Хуже того из-за такого количества запросов порой долго не могу найти то что я непосредственно вчера-то делал. Как это все возможно организовать? И возможно ли где-то писать поясняющие примечания, что бы их видно было в окне студии. В конце концов возможно ли их отсортировать по дате создания, что бы хоть так прослеживалось что и когда было сделано, и соответственно вспомнить и понять для чего, с какой целью?
...
Рейтинг: 0 / 0
Сложный рекурсивный запрос или как получить суммы по разным алгоритмам
    #38248730
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть разные мЕтоды
1. Использование полноценной студии с проектом типа базы данных
2. Использование серверной студии с хранением объектов (запросов, функций, процедур) в структуре "папок" сервера
3. Использование серверной студии с организацией файлов по функциональным блокам.

У каждого свои плюсы и минусы.

1.
+ Самый методологически правильный, родной метод с точки зрения микрософта.
+ Можно пользоваться многими плюшками рефакторинга.
+ Контролируется правильность и непротиворечивость ВСЕХ объектов БД.
+ Можно девелопить на девелоперской и накатывать скрипты изменения на продакшен.
- Нужна полная студия.
- Нужно уметь работать с проектом типа базы данных.
- Придется иметь отдельную модельную БД со скриптами генерации демоданных.
- Нельзя рисовать таблицы и связи на диаграмме БД, тольк скрипами. Т.е. новые куски схем разрабатывать неудобно.
-(+?) Изменения не отражаются на реальных данных продакшена.

2.
+ "Родной" способ для админов БД.
+ Требуется только серверная студия, автоматом входящая в ПО.
+ Таблицы и связи правятся на диаграммах данных
- Трудно организовывать объекты по своим функциональным блокам, иерархия будет такой, какая удобна серверу.

3. Мой выбор.
+ Таблицы и связи правятся на диаграммах данных
+ Остальные объекты (вью, ф-ии, процедуры) организуются в файлы по функциональным блокам приложения
+ Можно делать частичный рефакторинг простым текстовым реплейсом, благо в один файл собран код "смежных" объектов
- Возможно рассогласование объектов, рефакторинг только частичный, при невнимательности после замены можно получить неправильный код
- Риск резать по живому - работаем на продакшене, при работе на девелоперской потом надо повторить изменения на диаграммах и не забыть прогнать измененные файлы на продакшене

Продолжение следует...
...
Рейтинг: 0 / 0
Сложный рекурсивный запрос или как получить суммы по разным алгоритмам
    #38248751
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как делается по п.3
В рабочем каталоге SQL кода по мере развития системы создаются файлы. Удачно, если получается такая степень группировки объектов, когда в одном файле сидят коды создания всех объектов, обслуживающих данных функциональный блок. Если их слишком много, приходится делать несколько файлов.

Внутри файла идут инструкции
дроп что-то
криейт что-то
...
дроп что-то
криейт что-то
...
дроп что-то
криейт что-то
...

Ниже по тексту располагаются запросы, зависящие от тех, что выше. Имена объектов обычно получаются добавлением нового слова к уже имеющемуся имени, если новый объект использует (расширяет) предыдущий. Поэтому длинных имен много. Но я предпочитаю побольше нажать букв в пользу бОльшей понятливости названия. В начало файла помещается перечисление всех объектов, в нем написанных.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
-- VIEW qrCheckDataBase
-- VIEW qrCheckData                                                             
-- VIEW qrCheckDataField                                                        
-- VIEW qrCheckDataFieldDescription                                             
-- VIEW qrCheckDataAllFieldDescription                    
-- PROC CheckData_CopyTree (@iCheckDataID_OLD)                                  
-- PROC CheckData_DeleteTree (@iCheckDataID)                                    
-- TRIG tri_METAB_CheckDataRun ON METAB_CheckDataRun                            
-- VIEW qrCheckDataRun                                                          
-- VIEW qrCheckDataRunSchedule                                                  
-- VIEW qrCheckDataRunUser                                                      
-- VIEW insertCheckData_TAB_CheckDataRunUser        
-- FUNC fncCheckDataLastRun (@iCheckDataID, @sUserOrRoleCode, @sUserName,       
--      @sCheckDataScheduleAnyFlag)                                             
-- FUNC fncCheckDataRunFlag (@dt, @iCheckDataID, @sFrequencyCode,               
--      @sUserOrRoleCode @sUserName, @sCheckDataScheduleAnyFlag)                
-- FUNC fntCheckDataRunSchedule(@sUserName, @dtRunDate)                         
-- PROC insertSchedule_TAB_CheckDataRunUser(@sUserName, @dtRunDate)             
-- FUNC fntCheckDataRunScheduleUser(@sUserName, @dtRunDate)                     
... и так далее


Каждый объект ниже по файлу снабжается описанием:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
-- VIEW qrCheckDataBase
--      Проверочные отчеты+источник данных                                      
--      SELECT ... FROM METAB_CheckData                                         
--      INNER JOIN TAB_DatasourceDescription ON  ... sDatasourceName ...        
--
-- VIEW qrCheckData     
--      Проверочные отчеты+источник данных                                      
--      SELECT ... FROM METAB_CheckData                                         
--      INNER JOIN TAB_DatasourceDescription ON  ... sDatasourceName ...        
--      LEFT OUTER JOIN METAB_SyntaxNode                                        
--          ON iSyntaxNodeParentID = iCheckDataID                               
--          AND sSyntaxNodeRootFlag = 'Y'              
... и так далее


И, наконец, еще ниже код создания объекта
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
GO
--------------------------------------------------------------------------------
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.VIEWS 
WHERE TABLE_NAME = 'qrCheckDataBase') DROP VIEW dbo.qrCheckDataBase
--------------------------------------------------------------------------------
GO
--------------------------------------------------------------------------------
-- Данные проверочных отчетов и источников данных                               
--------------------------------------------------------------------------------
CREATE VIEW dbo.qrCheckDataBase AS

SELECT

   ch.iCheckDataID,                     -- PK Счетчик                                              
   ch.sCheckDataCode,                   -- Номер (шифр) проверочного отчета                        
   ch.sCheckDataName,                   -- Название проверочного отчета                            
   ch.sCheckDataMessage,                -- Текстовое сообщ.: 'У резидентов должен быть задан ИНН'  
   ch.sCheckDataDescription,            -- Подробное описание проверочного отчета   
   sCheckDataAlias = ISNULL(ch.sCheckDataCode + ' ', '') + ISNULL(ch.sCheckDataName, ''),

   ch.sDatasourceName,                  -- FK Системное имя источника данных (qrInqueryInvestment2)
   ch.iSyntaxNodeRootID,                -- FK Корневой узел выражения проверки                     

   ch.sCheckDataSQL,                    -- Готовое SQL выржение WHERE                     
   ch.sCheckDataOrderBy,                -- Готовое SQL выржение ORDER BY                                                 
   ch.sCheckDataErrorMessage,           -- Расшифовка, какая конкретная причина не удовлетворила условиям отчета
   
   ch.sFormName,                        -- Имя формы для вывода результатов проверки
                                        -- Если имя формы не задано, то используется               
                                        -- имя табличной формы из источника данных                 
   ch.iCheckDataFieldListOption,        -- 1-Из условий проверки | 2-Из источника данных | 3-Из формы
   ch.bCheckDataIncludeAudit,           -- Включать аудирующие поля sUserNameInsert, ...         

   ch.iCheckDataRunID,                  -- FK Последний запуск отчета                              
   ch.dtCheckDataRunDate,               -- Дата и время запуска отчета                             
   ch.sCheckDataRunUserName,            -- Пользователь запустивший отчет                          
   ch.nCheckDataRunRecordCount          -- Число записей, не удовлетворяющих условиям              

FROM 

   METAB_CheckData ch
--------------------------------------------------------------------------------
GO



Как-то так...
...
Рейтинг: 0 / 0
Сложный рекурсивный запрос или как получить суммы по разным алгоритмам
    #38248910
Изерлонер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
П-Л,

я правильно понимаю что свои запросы (представления) ты создаешь посредством кода, и не используешь соответствующий конструктор?
все мои запросы сделаны в конструкторе. Даже если сам запрос набирался вручную, все равно потом открывал конструктор и вставлял текст запроса. может быть при таком м создании соответствующие файлы генерируются автоматом?
Пока из того что ты описал ухватил простую но ясную мысль. Имя запроса создается на основе сущностей к которым он обращается, дальнейшие доработки — дополнения к этому имени. ...хотя как быть если запрос обращается к двум и более другим запросам созданным ранее.
...
Рейтинг: 0 / 0
Сложный рекурсивный запрос или как получить суммы по разным алгоритмам
    #38249578
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, вручную мне кажется делать запросы гораздо удобнее. Обычно следующие (ниже по тексту) запросы используют части кода расположенных выше, это удобно копипастить. Самый первый запрос получается перетягиванием полей из таблицы на страницу кода. В этот же момент надо не полениться и скопировать со схемы данных описания полей. Тогда при последующем переклеивании описания тоже будут копироваться во вновь создаваемый код. Файл "компилируется", загоняется в сервер командой RUN целиком. Пока идет работа над текстом объекта его куски можно выделять мышкой и тоже прогонять RUN'ом. Между запросами или в конце файла накапливаются полезные тестовые примеры запуска запросов, функций и процедур, обрамленные комментариями.

Это просто одна из возможных практик.
...
Рейтинг: 0 / 0
7 сообщений из 57, страница 3 из 3
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сложный рекурсивный запрос или как получить суммы по разным алгоритмам
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]