Модераторы: Akina

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сведение данных Access+Postgres, с чего начать? 
:(
    Опции темы
hildi
Дата 15.4.2009, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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 из постгресовой базы в конечной таблице акксесса не фигурируют, зато фигурируют поля, которые нужно будет заполнять вручную, дополняя автоматически предоставленные данные.

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

Вот, собсно.

Основная проблема в ДНК в том, что Акссесс я вижу второй раз в жизни, да и к базам до сих пор у меня было исключительно потребительское отншнение, так что совершенно не представляю, с чего начать... В голову приходит только связать имеющиеся таблицы запросом, но полученные данные надо как-то хранить... 

Посоветуйте, пожалуйста, с чего начать или где почитать что-нибудь умное на эту тему... У меня есть учебник про Акссесс, но что-то я там ничего подходящего не могу найти :-(
PM MAIL   Вверх
Akina
Дата 15.4.2009, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Начать надо с чтения встроенной справки. Откройте оглавление и прочтите сперва "Начало работы в Microsoft Access для пользователей, не имеющих навыков работы с базами данных", потом прочие "Начала". Учебник опять же... 

Что надо для решения конкретной задачи.
1) Иметь или установить ODBC-драйверы для доступа к Postgres
2) Создать новую БД в Аксессе
3) Связать таблицы Postgers с базой данных (Таблицы - Импорт-Связь с таблицами)
4) Создать таблицу для получения результата.
5) НаписАть запрос, который извлекает данные из связанных таблиц и помещает результат в конечную таблицу (новые - добавляет, существующие - обновляет).
6) Выполнять запрос каждый раз при изменении данных.

Добавлено через 47 секунд
Цитата(hildi @  15.4.2009,  14:23 Найти цитируемый пост)
Акссесс я вижу второй раз в жизни, да и к базам до сих пор у меня было исключительно потребительское отншнение

Это твои проблемы... но при наличии желания ты быстро преодолеешь их.

Добавлено через 2 минуты и 23 секунды
PS. Наибольшие трудности имхо вызовет п. 5. Когда первые 4 будут выполнены - милости просим. С конкретными вопросами.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
hildi
Дата 15.4.2009, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 14.4.2009

Репутация: нет
Всего: нет



Спасибо!
Первые 4 пункта уже выполнены, я как раз на пятом и застряла. У меня вообще общие знания про базы есть, но именно что общие, пользовательские такие, без навыков написания скриптов и пр.

Еще тут обнаружилось, что в качестве primary key в постгресовских таблицах выступает связка двух полей. Нужно в этих таблицах заводить отдельное поле с id, или Акссесс сам разберется? Вообще, он при связывании таблиц выделяет эти поля жирненьким...

Это сообщение отредактировал(а) hildi - 15.4.2009, 14:17
PM MAIL   Вверх
Akina
Дата 15.4.2009, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(hildi @  15.4.2009,  15:14 Найти цитируемый пост)
обнаружилось, что в качестве primary key в постгресовских таблицах выступает связка двух полей. Нужно в этих таблицах заводить отдельное поле с id, или Акссесс сам разберется? Вообще, он при связывании таблиц выделяет эти поля жирненьким...

Ну Аксесс не полный болван, всё-таки... что можно получить по структуре, он получил. В том числе и все индексы - ведь клиентская часть подсистемы обеспечения целостности-то на нём, как-никак... потому и выделил.

Цитата(hildi @  15.4.2009,  15:14 Найти цитируемый пост)
как раз на пятом и застряла. 

Тогда теперь точные структуры таблиц (исходных, конечной) и точную постановку задачи - в студию.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
hildi
Дата 15.4.2009, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 14.4.2009

Репутация: нет
Всего: нет



Если я правильно поняла про структуры таблиц, то вот они, структуры. Projekte - конечная таблица в акссессе, public_uebk - постгресовская таблица с исходными данными о родительских BigBox'ах, public_bbk, соответственно - с данными о SmallBox'ах.
Zahl - число, значит, как оно в акссессе есть. Datum/Uhrzeit = date/time. 

Может быть, что-то еще нужно указать?

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  mdb1.gif 26,29 Kb
PM MAIL   Вверх
hildi
Дата 15.4.2009, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 14.4.2009

Репутация: нет
Всего: нет



А постановка задачи следующая:

Из исходных таблиц, из определенных полей скопировать данные в конечную таблицу и время от времени их там обновлять. Я вот тут, чтобы понятнее было, нарисовала, потому что в терминологии плохо разбираюсь, да еще и акссесс у меня немецкий, как видно.

В общем, поля public_uebk.region и public_uebk.a_bk_netzelem_id (ID папы-девайса) связаны с public_bbk.region и public_bbk.id_uebk(поле с ID папы-девайса в таблице дитя-девайса).

Остальными связями я изобразила, какие поля исходных таблиц куда копируются.

Синим выделены поля в конечной таблице должны впоследствии заполняться вручную.

Вот.

Может быть, вы насыплете мне хороших ключевых слов по теме на каком-нить человеческом языке, особенно русском? А то я даже погуглить по-человечески не могу, а немецких учебников в сети нет, копирайты, блин. Моя благодарность и так уже предельно безгранична, а будет вообще того. Несопоставима с реальностью smile

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  mdb2.gif 10,80 Kb
PM MAIL   Вверх
Akina
Дата 15.4.2009, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(hildi @  15.4.2009,  16:51 Найти цитируемый пост)
Может быть, что-то еще нужно указать?

Во-первых, по-новой связывающие поля исходных таблиц.
Во-вторых, соответствие полей исходных таблиц и конечной таблицы.

Добавлено @ 16:07
Ок, пока писАл, появился предыдущий пост.

Теперь рассказывайте, что при обновлении делать с дубликатами а) полными б) частичными.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
hildi
Дата 15.4.2009, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 14.4.2009

Репутация: нет
Всего: нет



По идее, там дубликатов быть не должно, т. е., каждый дитя-девайс случается в своей исходной таблице только один раз. Буде случается дубликат при опросе софтом девайсов, то данные в строке соотв. девайса просто обновляются. То же самое и с папа-девайсами.

Так что и в конечной таблице данные в соотв. стобцах должны просто обновляться, там же еще поля для ручного заполнения, их содержимое относительно автоматически пополняемых данных надо сохранить в любом случае.
PM MAIL   Вверх
Akina
Дата 15.4.2009, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(hildi @  15.4.2009,  17:20 Найти цитируемый пост)
По идее, там дубликатов быть не должно

Давайте мыслить процессом, а не моментом.
Вот вчера были получены данные и занесены в локальную таблицу. Сегодня мы получаем свежие данные, понятно, что 99% из них - дубликаты уже существующих в локальной таблице. Опять же понятно, что если есть полное совпадение всех получаемых полей - можно ничего не обновлять... а если часть полученных полей совпадает, а часть различается - что делать? обновлять? создавать новую запись? скорее всего в зависимости от того, какие именно поля различаются - тогда список полей уникальных (завести новую запись) и неуникальных (обновить)...

Добавлено через 9 минут и 20 секунд
И вот что... руками всё это набирать лень... Вот код:
Код

Option Compare Database
Option Explicit

Sub SaveTableStructures()
Dim dbs As DAO.Database
Dim tdf As DAO.TableDef
Dim fld As DAO.Field
Dim idx As DAO.index
Dim ff As Long

ff = FreeFile
Open "\structure.txt" For Output As #ff
Set dbs = CurrentDb
For Each tdf In dbs.TableDefs
    If Left(tdf.Name, 4) <> "MSys" Then
        Print #ff, "TableName="; tdf.Name
        Print #ff,
        For Each fld In tdf.Fields
            Print #ff, "  FieldName="; fld.Name
            Print #ff, "  FieldType="; fld.Type
            Print #ff, "  FieldSize="; fld.Size
            If fld.DefaultValue <> "" Then Print #ff, "  FieldDefaultValue="; fld.DefaultValue
            Print #ff, "  FieldAllowZeroLength="; fld.AllowZeroLength
            Print #ff, "  FieldRequired="; fld.Required
            If fld.ValidationRule <> "" Then Print #ff, "  FieldValidationRule="; fld.ValidationRule
            If fld.ValidationText <> "" Then Print #ff, "  FieldValidationText="; fld.ValidationText
            Print #ff,
        Next
        For Each idx In tdf.Indexes
            Print #ff, "    IndexName="; idx.Name
            Print #ff, "    IndexUnique="; idx.Unique
            Print #ff, "    IndexPrimary="; idx.Primary
            Print #ff, "    IndexRequired="; idx.Required
            Print #ff, "    IndexIgnoreNulls="; idx.IgnoreNulls
            Print #ff, "    IndexClustered="; idx.Clustered
            Print #ff, "    IndexDistinctCount="; idx.DistinctCount
            Print #ff, "    IndexForeign="; idx.Foreign
            For Each fld In idx.Fields
                Print #ff, "      IndexField="; fld.Name
            Next
            Print #ff,
        Next
    End If
Next
Close #ff
End Sub

Откройте свою БД. Перейдите на вкладку "Модули". Выберите "Создать модуль". Проверьте что в меню Tools-References есть галка на "Microsoft DAO 3.6 Object Library", если нет - поставьте. Сотрите всё, что в окне текста модуля появится. Скопируйте туда этот код. Сохраните модуль (File-Save). Поставьте курсор в строку "Sub SaveTableStructures()". Выберите Run - Run Sub/Userform. По завершении работы (1-2 сек) закройте базу (при следующем запуске модуль можно будет удалить). Заархивируйте созданный в корне диска файл structure.txt и приложите к сообщению.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
hildi
Дата 15.4.2009, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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?
PM MAIL   Вверх
Akina
Дата 15.4.2009, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(hildi @  15.4.2009,  17:41 Найти цитируемый пост)
Получается, надо добавить в конечную таблицу поле для однозначной идентификации дитя-девайсов по связке public_bbk.region и public_bbk.a_bk_netzelem_id? 

Нет, это должно проверяться в запросе. Вернее, запросах - потому как запросы на добавление, обновление и удаление - это три разных выполняющихся один за другим запроса.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
hildi
Дата 15.4.2009, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 14.4.2009

Репутация: нет
Всего: нет



Спасибо smile
Вот, собсно. 
Какой жуткий язык этот VBA, ни фига не понятно :-/


Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  structure.txt 5,51 Kb
PM MAIL   Вверх
hildi
Дата 17.4.2009, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 14.4.2009

Репутация: нет
Всего: нет



Фиг с ней уже, с актуализацией, мне бы хоть данные в базу просто запихнуть, там мало изменений происходит, в крайнем случае, их можно и руками обновлять...

Скажите мне ключевое слово, пожалста, про что погуглить в такой ситуации... А то я в растерянности полной.
PM MAIL   Вверх
bopoha
Дата 17.4.2009, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1283
Регистрация: 10.5.2006
Где: Беларусь, Минск

Репутация: 21
Всего: 21



hildi, а что вы хотите сделать?

Попробуйте следующие:
1. Создайте копии таблиц, как на сервере.
2. Мастером создайте формы для каждой таблицы. Может у вас поятвятся идеи. 
PM MAIL WWW ICQ Skype GTalk   Вверх
hildi
Дата 17.4.2009, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 14.4.2009

Репутация: нет
Всего: нет



Я хочу перенести данные из двух связанных постгресовских таблиц в одну акссесовскую (задача минимум).
А зачем таблицы копировать? Мастером можно формы и так ведь создать к ним... Ни фига не понимаю. Хоть намекните smile

Пытаюсь пока к таблицам через  VBA достучаться, но учебник читается мееедленно, синтаксис совсем неочевидный :-(

Пример из учебника вываливает ошибку 424 object required...

Код


Private Sub NeuerSatz_Click()

    Dim rs As New ADODB.Recordset
    
    rs.Open "projekte", CurrentProjekt.Connection
    
    MsgBox (rs![ubk])

    
End Sub



PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS Access"
Akina
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] и [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS Access | Следующая тема »


 




[ Время генерации скрипта: 0.1249 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.