|
Вопросы по макросу
|
|||
---|---|---|---|
#18+
Здравствуйте! Создал простенькую базу данных с макросами для примера. Постарался убрать все лишнее, чтобы понятно было. Суть в следующем: макрос выгружает с OLAP и вставляет в access таблицу. Файл во вложении. Запуск макроса с процедуры ИмпортИзOLAP. Все работает, все выгружает. Но есть вопросы, сомнения. 1. Получается так, что есть два рекордсета: из OLAP и Access. Потом Рекордсет из OLAP вставляем Рекордсет из Access по каждой записи. Насколько правильно данное решение? 2. Здесь после выгрузки с OLAP и до вставки в Access таблицу удаляются старые записи. Может быть лучше не удалять старые записи, а удалить старую таблицу и новую создавать? Учитывая что названия колонок не меняются. Но есть еще таблица (в данном примере отсутствует), где названия колонок меняется, например, месяцы. То здесь актуально удалять старую таблицу и заново создавать. Кстати, до этого не удалял таблицу, а удалял колонки. И получилось так, что колонок нету в таблице, а макрос не может добавить колонку, якобы превышение количества колонок. Так и не разобрался почему так. 3. Учитывая такой логический момент, что после того как запустили макрос, то после обновления в ключевом поле изменяются значения, то есть продолжает работать счетчик. Потом получаем таблицы из разных источников, потом запускается сложные SQL-запросы к этим таблицам. Соединение таблиц происходит не по ключу, а по текстовому полю (например, "Наименование продукции", 'Код ТТ" и т д). Во вложенном примере отсутствуют такие запросы. Если в access таблицу "OLAP-Города" попадают записи из OLAP, то нужно ли ключевое поле для этой таблицы? 4. Если с помощью с ADO выгружать данные с OLAP, то в Fields имена получаются такие длинные: Код: sql 1. 2.
а надо так Код: sql 1. 2.
Обращаться по таким длинным именам не удобно. Изменить имена с помощью свойства Name невозможно, так как находится в режиме чтения. Но возможно по индексу. Написал код так, что из этих длинных имен вытаскивает короткие имена. В данном примере такой код отсутствует, будто уже определили короткие имена, чтобы не усложнять данный пример для понимания. Получаем МассивЗаголовков с тремя полями: длинное название поля, короткое название поля и индекс поля. Дальше когда вставляем из OLAP в access таблицу, то в ИмпортРекордсет обращается не по длинному имени, а по индексу. Оцените идею такого решения? Можно ли было по проще сделать или более правильно сделать? 5. Когда выгружаешь данные с OLAP, то может быть такое что MDX-запрос не правильный, отсутствует подключение к OLAP, нехватка памяти на сервере, отсутствие прав на выгрузку и т.д. Нужно вставить перехватчик ошибок. Но нужно поставить именно так, чтобы было понятно что за ошибка, и макросу знать куда дальше идти. Как правильно прописать? Получилось как то емко, но подробно по каждому вопросу. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2017, 10:10 |
|
Вопросы по макросу
|
|||
---|---|---|---|
#18+
ferzmikkИ получилось так, что колонок нету в таблице, а макрос не может добавить колонку, якобы превышение количества колонок. увы, при удалении полей в таблице(до 255) или контролов в форме/отчете (754, ранее было 999)--освободившиеся номера не подлежат повторному заполнению, это типа счетчика, но с максимальным значением 255/754 ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2017, 11:33 |
|
Вопросы по макросу
|
|||
---|---|---|---|
#18+
ПЕНСИОНЕРКАferzmikkИ получилось так, что колонок нету в таблице, а макрос не может добавить колонку, якобы превышение количества колонок. увы, при удалении полей в таблице(до 255) или контролов в форме/отчете (754, ранее было 999)--освободившиеся номера не подлежат повторному заполнению, это типа счетчика, но с максимальным значением 255/754ferzmikk3. Учитывая такой логический момент, что после того как запустили макрос, то после обновления в ключевом поле изменяются значения, то есть продолжает работать счетчик. ... Если в access таблицу "OLAP-Города" попадают записи из OLAP, то нужно ли ключевое поле для этой таблицы?А тут может быть такое? То есть новые строки могут не вставится или счетчик с начала пойдет: подбирать свободные значения ключа? Или зависит от того присутствует ли ключевое поле в таблице или нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2017, 12:26 |
|
Вопросы по макросу
|
|||
---|---|---|---|
#18+
ferzmikkПостарался убрать все лишнее, чтобы понятно мне как раз непонятно --а что дальше опишу свою ситуацию и мой подход к ее решению --основные таблицы 150т и 80т(М:М) --основной выбор по цех-участок-изделие-оборудование-профессия---итоги --сначала попробовала в ЛОБ , отчетом аксесс -----увы, отчет по цех изделие не совпадал с итогом по цехам(время прошло, что-то ввели новое) --решила зафиксировать снимок базы на момент ххххх в рабочую таблицу в рабочей базе select цех,участок,изделие,оборудование,профессия,sum(норма) into tab1 in "c:\temp\rab1.mdb" from ..... group by цех,участок,изделие,оборудование,профессия --весь просмотр и итоги более высоких уровней идет с рабочей таблицы, которая прилинкована к основной базе --рабочую базу можно всегда пересоздать целиком с шаблона(пустую) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2017, 12:35 |
|
Вопросы по макросу
|
|||
---|---|---|---|
#18+
ferzmikkА тут может быть такое? То есть новые строки могут не вставится или счетчик с начала пойдет: подбирать свободные значения ключа? Или зависит от того присутствует ли ключевое поле в таблице или нет? счетчик не пойдет с начала если было 100 полей и 99 удалили, то новое поле получит счетчик 101 а не 2 хотя базу и уплотнили ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2017, 12:38 |
|
Вопросы по макросу
|
|||
---|---|---|---|
#18+
ПЕНСИОНЕРКАferzmikkПостарался убрать все лишнее, чтобы понятно мне как раз непонятно --а что дальше В рабочей файле имеются таблицы, которые берутся из OLAP. Есть таблицы как справочник. Здесь я выгрузил из OLAP и вставил в таблицу. То есть это как бы первый шаг. Мне важно выяснить, на этой стадии есть ли что то неправильное или что то не учитывается. Дальше запуск запросов к этим таблицам, это следующий шаг - другой вопрос. И чтобы сконцентрироваться к проблеме, удалил другие таблицы, которые тоже получаются с OLAP, и таблицы-справочники, чтобы не мешались. Вообще для запуска макроса, необходимо подключение к нашему серверу, но для данного примера доступ отсутствует. Но макрос выгружает и вставляет в таблицы. Поэтому хочу понять насколько правильно и оптимально ли я выгружаю с OLAP и вставляю в таблицы. Может быть по другому надо выгружать или как то попроще код написать, потому что для остальных таблиц код будет повторяться. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2017, 12:58 |
|
Вопросы по макросу
|
|||
---|---|---|---|
#18+
ПЕНСИОНЕРКАсчетчик не пойдет с начала если было 100 полей и 99 удалили, то новое поле получит счетчик 101 а не 2 хотя базу и уплотнили Я имею ввиду не поля, а строки ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2017, 12:59 |
|
Вопросы по макросу
|
|||
---|---|---|---|
#18+
ferzmikk, в строках тоже счетчик не пойдет с начала после DELETE * FROM TAB1 было 100 записей, удалили, новая запись будет 101 чтобы новая запись была=1, надо сжать базу данных ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2017, 13:06 |
|
Вопросы по макросу
|
|||
---|---|---|---|
#18+
ПЕНСИОНЕРКАчтобы новая запись была=1, надо сжать базу данныхИли такой вариант: удалить таблицу и заново создать А при удалении и создании таблиц, то у списка таблиц счетчик тоже присутствует? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2017, 13:59 |
|
Вопросы по макросу
|
|||
---|---|---|---|
#18+
ferzmikk1. Получается так, что есть два рекордсета: из OLAP и Access. Потом Рекордсет из OLAP вставляем Рекордсет из Access по каждой записи. Насколько правильно данное решение? 3. Если в access таблицу "OLAP-Города" попадают записи из OLAP, то нужно ли ключевое поле для этой таблицы? 4. Если с помощью с ADO выгружать данные с OLAP, то в Fields имена получаются такие длинные: Код: sql 1. 2.
а надо так Код: sql 1. 2.
Обращаться по таким длинным именам не удобно. Изменить имена с помощью свойства Name невозможно, так как находится в режиме чтения. Но возможно по индексу. Написал код так, что из этих длинных имен вытаскивает короткие имена. В данном примере такой код отсутствует, будто уже определили короткие имена, чтобы не усложнять данный пример для понимания. Получаем МассивЗаголовков с тремя полями: длинное название поля, короткое название поля и индекс поля. Дальше когда вставляем из OLAP в access таблицу, то в ИмпортРекордсет обращается не по длинному имени, а по индексу. Оцените идею такого решения? Можно ли было по проще сделать или более правильно сделать? 5. Когда выгружаешь данные с OLAP, то может быть такое что MDX-запрос не правильный, отсутствует подключение к OLAP, нехватка памяти на сервере, отсутствие прав на выгрузку и т.д. Нужно вставить перехватчик ошибок. Но нужно поставить именно так, чтобы было понятно что за ошибка, и макросу знать куда дальше идти. Как правильно прописать? Хотелось бы получить ответы на эти вопросы ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2017, 15:57 |
|
Вопросы по макросу
|
|||
---|---|---|---|
#18+
ferzmikkИли такой вариант: удалить таблицу и заново создать Это не сработает, если у таблицы установлены связи с другими таблицами поэтому я и делала через внешнюю таблицу --при запуске базы, создавала и рабочую базу --затем 4-мя запросами я формировала 4 рабочих таблицы --могла сменить критерии выбора и переформировать рабочие таблицы --весь просмотр и отчеты делались с этих рабочих таблиц, без привязки к основным ---- моя база --это все же не продажа билетов, онлайн-точность не нужна но различные отчеты одного дня должны были соответствовать друг-другу ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2017, 16:15 |
|
Вопросы по макросу
|
|||
---|---|---|---|
#18+
ПЕНСИОНЕРКАferzmikkИли такой вариант: удалить таблицу и заново создать Это не сработает, если у таблицы установлены связи с другими таблицами В Access есть таблицы, которые в начале названии имеют такой префикс "OLAP_". Несколько таких таблиц в базе данных. Создается коннектор, потом рекордсет. Полученные записи вставляем "OLAP_Таблица1". Удаляем рекордет. Потом создаем новый рекордсет. Полученные записи вставляем в "OLAP_Таблица2". И т. д. У этих таблиц нету связи с другими таблицами. Во вложении по коду в модуле можно это увидеть. Но втором шаге будет запускаться запрос к этим таблицам. Если таблицы удалять и заново создавать, то имена таблиц и полей будут те же. В примере отсутствуют запросы. поэтому я и делала через внешнюю таблицу --при запуске базы, создавала и рабочую базу --затем 4-мя запросами я формировала 4 рабочих таблицы --могла сменить критерии выбора и переформировать рабочие таблицы --весь просмотр и отчеты делались с этих рабочих таблиц, без привязки к основным ---- моя база --это все же не продажа билетов, онлайн-точность не нужна но различные отчеты одного дня должны были соответствовать друг-другуА где находится внешняя таблица? Я предполагаю Вы запускали SQL-запрос к серверу. Но у меня MDX-запросы. MDX это не SQL. SQL это реляционные таблицы, а MDX - многомерные. Тут другая логика. MDX не соединяет таблицы как SQL. Приходится выгружать несколько разных access таблиц, которые начинают с префикса "OLAP_" и справочные access таблицы, и соединять их потом запросом. Или я Вас не правильно понял? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2017, 17:54 |
|
Вопросы по макросу
|
|||
---|---|---|---|
#18+
ferzmikk, У меня не было OLAP_таблиц у меня обыкновенные, гладкие 150т и 80т (М:М) по 1 полю справочники не в счет(один большой 50т, остальные мелочь, до 1т) все справочники прицепляла уже к итогам, что-бы не гонять по сети(они списывались тоже в рабочую базу) при загрузке конечно это не очень продвинуто, но скорость и гибкость вполне устраивали пользователей --обычный режим --просмотр(более 50 компов) --ввод делала отдельная группа(5 компов) --был просмотр в режиме дерева, но самопального(веер входимости) веер входимости --первым шагом был динамический поиск в ленточной форме по 10 полям, целого поля не требовалось --по LIKE по принципу поиска по тому, что знаю можно было набрать --наим=гайк , изделие=001, извещение об обновлении=2017 --в ленточной форме давала претендентов на требуемое --уточняли условие размером или номером госта(например 12478-80) информация высвечивалась в формате максимальной наглядности дет/сб-------(код детали) (гравировка) (наименование)(извещение).(цеха)(изделия)....... состоит из .(код детали) (гравировка) (наименование)(извещение)........ (код детали) (гравировка) (наименование)(извещение)........ (код детали) (гравировка) (наименование)(извещение)........ .... входит (код детали) (гравировка) (наименование)(извещение)........ (код детали) (гравировка) (наименование)(извещение)........ (код детали) (гравировка) (наименование)(извещение)........ при клике на гравировке переход на выбранную деталь/сб при клике на извещении --показ списка деталей, измененных по данному извещению при клике на цех--пооперационная трудоемкость и прочее при клике на изделии --комплектация выбранной детали в разных изделиях ...... это пример работы с исходной информацией ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2017, 19:54 |
|
Вопросы по макросу
|
|||
---|---|---|---|
#18+
ПЕНСИОНЕРКАпоэтому я и делала через внешнюю таблицуДанные из внешней таблицы через рекордсет выгружали? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2017, 08:59 |
|
Вопросы по макросу
|
|||
---|---|---|---|
#18+
ferzmikk, как я уже писала --как то так Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2017, 12:11 |
|
Вопросы по макросу
|
|||
---|---|---|---|
#18+
ПЕНСИОНЕРКА Код: sql 1. 2. 3. 4.
Такой запрос откуда запускался? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2017, 13:03 |
|
Вопросы по макросу
|
|||
---|---|---|---|
#18+
ferzmikk, запрос запускается из аксесс есть в аксесс такая возможность --создание таблицы смотри в хельпе SELECT.... INTO....IN ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2017, 14:36 |
|
Вопросы по макросу
|
|||
---|---|---|---|
#18+
ПЕНСИОНЕРКАferzmikk, запрос запускается из аксесс есть в аксесс такая возможность --создание таблицы смотри в хельпе SELECT.... INTO....INВ Access можно запустить sql-запрос SELECT ... INTO ... IN ..., где после IN указывается внешняя база данных. Если выгружать данные из OLAP, то пишется не SQL-запрос, а MDX-запрос. Access не поддержит MDX. Предложение IN присутствует в SQL, но отсутствует в MDX. Если ошибаюсь - поправьте. Поэтому использую ADO для выгрузки из OLAP. И хотелось узнать какие еще оптимальные варианты выгрузки есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2017, 15:50 |
|
Вопросы по макросу
|
|||
---|---|---|---|
#18+
ferzmikkВ Access можно запустить sql-запрос SELECT ... INTO ... IN ..., где после IN указывается внешняя база данных. Если выгружать данные из OLAP, то пишется не SQL-запрос, а MDX-запрос. Access не поддержит MDX. Предложение IN присутствует в SQL, но отсутствует в MDX. Если ошибаюсь - поправьте. Поэтому использую ADO для выгрузки из OLAP. И хотелось узнать какие еще оптимальные варианты выгрузки есть.Вот так выглядит простой MDX-запрос. Код: sql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2017, 07:18 |
|
|
start [/forum/topic.php?fid=45&msg=39510704&tid=1612145]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
43ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 296ms |
total: | 442ms |
0 / 0 |