![]() |
|
Модераторы: Akina |
![]()
|
|
| hildi |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 14.4.2009 Репутация: нет Всего: нет |
Спасите-помогите кто чем может, пожалуйста!
Передо мной поставили следующую задачу: Есть две таблицы в Postgres, в которые автоматически грузятся данные про какие-то провайдерские девайсы, назовем их BigBox (папа) и SmallBox (дитя, их подключается по несколько штук к папе) соответственно. В качестве первичных ключей в обеих таблицах используются ID девайсов. В таблице SmallBox есть еще поле с ID папы-BigBox. Нужно завести отдельную таблицу в Access, куда будут грузиться данные о SmallBox'ах и о стоящих над ними BigBox'ах, где-то в таком виде: SmallBox, SB ID, SB Region, SB Start Date, SB End Date, BigBox, BB ID, [Some manually filled Fields] Primary keys из постгресовой базы в конечной таблице акксесса не фигурируют, зато фигурируют поля, которые нужно будет заполнять вручную, дополняя автоматически предоставленные данные. Иногда эти автоматические данные будут обновляться - какой-то из боксов может отключиться или переехать. Вот, собсно. Основная проблема в ДНК в том, что Акссесс я вижу второй раз в жизни, да и к базам до сих пор у меня было исключительно потребительское отншнение, так что совершенно не представляю, с чего начать... В голову приходит только связать имеющиеся таблицы запросом, но полученные данные надо как-то хранить... Посоветуйте, пожалуйста, с чего начать или где почитать что-нибудь умное на эту тему... У меня есть учебник про Акссесс, но что-то я там ничего подходящего не могу найти :-( |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
Начать надо с чтения встроенной справки. Откройте оглавление и прочтите сперва "Начало работы в Microsoft Access для пользователей, не имеющих навыков работы с базами данных", потом прочие "Начала". Учебник опять же...
Что надо для решения конкретной задачи. 1) Иметь или установить ODBC-драйверы для доступа к Postgres 2) Создать новую БД в Аксессе 3) Связать таблицы Postgers с базой данных (Таблицы - Импорт-Связь с таблицами) 4) Создать таблицу для получения результата. 5) НаписАть запрос, который извлекает данные из связанных таблиц и помещает результат в конечную таблицу (новые - добавляет, существующие - обновляет). 6) Выполнять запрос каждый раз при изменении данных. Добавлено через 47 секунд
Это твои проблемы... но при наличии желания ты быстро преодолеешь их. Добавлено через 2 минуты и 23 секунды PS. Наибольшие трудности имхо вызовет п. 5. Когда первые 4 будут выполнены - милости просим. С конкретными вопросами. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| hildi |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 14.4.2009 Репутация: нет Всего: нет |
Спасибо!
Первые 4 пункта уже выполнены, я как раз на пятом и застряла. У меня вообще общие знания про базы есть, но именно что общие, пользовательские такие, без навыков написания скриптов и пр. Еще тут обнаружилось, что в качестве primary key в постгресовских таблицах выступает связка двух полей. Нужно в этих таблицах заводить отдельное поле с id, или Акссесс сам разберется? Вообще, он при связывании таблиц выделяет эти поля жирненьким... Это сообщение отредактировал(а) hildi - 15.4.2009, 14:17 |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
Ну Аксесс не полный болван, всё-таки... что можно получить по структуре, он получил. В том числе и все индексы - ведь клиентская часть подсистемы обеспечения целостности-то на нём, как-никак... потому и выделил. Тогда теперь точные структуры таблиц (исходных, конечной) и точную постановку задачи - в студию. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| hildi |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 14.4.2009 Репутация: нет Всего: нет |
Если я правильно поняла про структуры таблиц, то вот они, структуры. Projekte - конечная таблица в акссессе, public_uebk - постгресовская таблица с исходными данными о родительских BigBox'ах, public_bbk, соответственно - с данными о SmallBox'ах.
Zahl - число, значит, как оно в акссессе есть. Datum/Uhrzeit = date/time. Может быть, что-то еще нужно указать? Присоединённый файл ( Кол-во скачиваний: 2 )
mdb1.gif 26,29 Kb |
|||
|
||||
| hildi |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 14.4.2009 Репутация: нет Всего: нет |
А постановка задачи следующая:
Из исходных таблиц, из определенных полей скопировать данные в конечную таблицу и время от времени их там обновлять. Я вот тут, чтобы понятнее было, нарисовала, потому что в терминологии плохо разбираюсь, да еще и акссесс у меня немецкий, как видно. В общем, поля public_uebk.region и public_uebk.a_bk_netzelem_id (ID папы-девайса) связаны с public_bbk.region и public_bbk.id_uebk(поле с ID папы-девайса в таблице дитя-девайса). Остальными связями я изобразила, какие поля исходных таблиц куда копируются. Синим выделены поля в конечной таблице должны впоследствии заполняться вручную. Вот. Может быть, вы насыплете мне хороших ключевых слов по теме на каком-нить человеческом языке, особенно русском? А то я даже погуглить по-человечески не могу, а немецких учебников в сети нет, копирайты, блин. Моя благодарность и так уже предельно безгранична, а будет вообще того. Несопоставима с реальностью Присоединённый файл ( Кол-во скачиваний: 3 )
mdb2.gif 10,80 Kb |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
Во-первых, по-новой связывающие поля исходных таблиц. Во-вторых, соответствие полей исходных таблиц и конечной таблицы. Добавлено @ 16:07 Ок, пока писАл, появился предыдущий пост. Теперь рассказывайте, что при обновлении делать с дубликатами а) полными б) частичными. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| hildi |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 14.4.2009 Репутация: нет Всего: нет |
По идее, там дубликатов быть не должно, т. е., каждый дитя-девайс случается в своей исходной таблице только один раз. Буде случается дубликат при опросе софтом девайсов, то данные в строке соотв. девайса просто обновляются. То же самое и с папа-девайсами.
Так что и в конечной таблице данные в соотв. стобцах должны просто обновляться, там же еще поля для ручного заполнения, их содержимое относительно автоматически пополняемых данных надо сохранить в любом случае. |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
Давайте мыслить процессом, а не моментом. Вот вчера были получены данные и занесены в локальную таблицу. Сегодня мы получаем свежие данные, понятно, что 99% из них - дубликаты уже существующих в локальной таблице. Опять же понятно, что если есть полное совпадение всех получаемых полей - можно ничего не обновлять... а если часть полученных полей совпадает, а часть различается - что делать? обновлять? создавать новую запись? скорее всего в зависимости от того, какие именно поля различаются - тогда список полей уникальных (завести новую запись) и неуникальных (обновить)... Добавлено через 9 минут и 20 секунд И вот что... руками всё это набирать лень... Вот код:
Откройте свою БД. Перейдите на вкладку "Модули". Выберите "Создать модуль". Проверьте что в меню Tools-References есть галка на "Microsoft DAO 3.6 Object Library", если нет - поставьте. Сотрите всё, что в окне текста модуля появится. Скопируйте туда этот код. Сохраните модуль (File-Save). Поставьте курсор в строку "Sub SaveTableStructures()". Выберите Run - Run Sub/Userform. По завершении работы (1-2 сек) закройте базу (при следующем запуске модуль можно будет удалить). Заархивируйте созданный в корне диска файл structure.txt и приложите к сообщению. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| hildi |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 14.4.2009 Репутация: нет Всего: нет |
Ага, понимаю.
В любом случае, связки полей public_uebk.region и public_uebk.a_bk_netzelem_id (ID папы-девайса) и public_bbk.region и public_bbk.a_bk_netzelem_id (дитя) остаются уникальными и неизменными. Если дитя отключается или превращается в папу, то оно удаляется из исходной таблицы, и, в случае превращения в папу, появляется в таблице пап со своей уникальной идентификационной связкой. В этом случае дитя должно быть удалено и из конечной таблицы. Остальные данные могут изменяться. Получается, надо добавить в конечную таблицу поле для однозначной идентификации дитя-девайсов по связке public_bbk.region и public_bbk.a_bk_netzelem_id? |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
Нет, это должно проверяться в запросе. Вернее, запросах - потому как запросы на добавление, обновление и удаление - это три разных выполняющихся один за другим запроса. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| hildi |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 14.4.2009 Репутация: нет Всего: нет |
Спасибо
Вот, собсно. Какой жуткий язык этот VBA, ни фига не понятно :-/ Присоединённый файл ( Кол-во скачиваний: 3 )
structure.txt 5,51 Kb |
|||
|
||||
| hildi |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 14.4.2009 Репутация: нет Всего: нет |
Фиг с ней уже, с актуализацией, мне бы хоть данные в базу просто запихнуть, там мало изменений происходит, в крайнем случае, их можно и руками обновлять...
Скажите мне ключевое слово, пожалста, про что погуглить в такой ситуации... А то я в растерянности полной. |
|||
|
||||
| bopoha |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1283 Регистрация: 10.5.2006 Где: Беларусь, Минск Репутация: 21 Всего: 21 |
hildi, а что вы хотите сделать?
Попробуйте следующие: 1. Создайте копии таблиц, как на сервере. 2. Мастером создайте формы для каждой таблицы. Может у вас поятвятся идеи. |
|||
|
||||
| hildi |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 14.4.2009 Репутация: нет Всего: нет |
Я хочу перенести данные из двух связанных постгресовских таблиц в одну акссесовскую (задача минимум).
А зачем таблицы копировать? Мастером можно формы и так ведь создать к ним... Ни фига не понимаю. Хоть намекните Пытаюсь пока к таблицам через VBA достучаться, но учебник читается мееедленно, синтаксис совсем неочевидный :-( Пример из учебника вываливает ошибку 424 object required...
|
|||
|
||||
![]()
|
| Правила форума "MS Access" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MS Access | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |