imho.ws |
![]() |
![]() |
![]() |
# 1 |
Newbie
Регистрация: 15.12.2008
Сообщения: 11
![]() |
Access front-end + Postgres back-end... kak?
Мне надо сделать не большую программу (клиенты,продукты, заказы и тд.) и она должна быть написанна в Access + Postgres база данных. В Access все должно быть в VBA (без макро). С VBA дел не имел, но формы,кнопки разные создавать вроде научился, БД настроил, но есть еще пара вопросов:
1.Как соединиться с Postgres используя *.adp пройект? (могу соединиться через *.mdp проект, но при создании adp не вижу сервера в списке) 2.Можно ли получить созданные представления (views) из postgres в Accesse? (при создании *.mdp проекта вижу только таблицы) P.S. Пользую Access 2003, Postgres 8.3 и все на WinXP SP2. инет облазил толком ничего не нашел. Заранее спасибо. |
![]() |
![]() |
# 3 |
Newbie
Регистрация: 15.12.2008
Сообщения: 11
![]() |
Да, использовал. Вроде бы соединиться через .mdp проект и получить "views" тоже удалось, наверно тогда в .mdp и продолжу... Только опять возник вопрос, как сделать "views" прямыми (direct), что бы при обновлении в таблице они автоматически обновляли свои данные тоже, а то данные в таблице меняю, а "view" старые показывает. И еще... как получить данные из таблиц в VBA? я использую Dlookup() для одного значения(правильно?), а если надо получить коллекцию данных из таблицы? И как по ней перемещатся? подскажите кто знает.
|
![]() |
![]() |
# 4 |
Full Member
Регистрация: 20.01.2004
Адрес: Таллинн
Пол: Male
Сообщения: 623
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
ODBC должен вьюшки обновлять. Я правда только оракл пробовал.
Из VBA нужно делать Connection и Recordset. http://www.everythingaccess.com/tuto...ith-Recordsets ЗЫ. .mdp - это вообще что? Може всётаки mdb? Последний раз редактировалось EvroStandart; 17.12.2008 в 15:22. |
![]() |
![]() |
# 5 |
Newbie
Регистрация: 15.12.2008
Сообщения: 11
![]() |
Извеняюсь за ошибку зто .mdb
С "view" разобрался... обновляются. Теперь у меня вопрос по SQL: мне надо обновлять "view" который содержит данные из 3 таблиц (клиент,адрес,страна). Все они связаны. Я создал правило (rule) для обновления, но при обновлинии инфо о клиенте мне надо добавить адрес в таблицу "адрес" только в том случае если он не существует (в таблице), а если существует то просто обновить ссылку на адрес в таблице "клиент". можно ли такое это реализовать? |
![]() |
![]() |
# 6 |
мод
IMHO Кодер-200(6,7,8) Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Если вьюха редактируема (editable) то можно просто в нее делать вставку, он сам разберется с ключами и внешними связями, которые прописаны. Ну если нет -то нет, реализовывайте логику в приложении, вставляйте что надо в нужные таблицы.
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям! Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru Pahan-Hubbitus. |
![]() |
![]() |
# 7 |
Newbie
Регистрация: 15.12.2008
Сообщения: 11
![]() |
Она редактируема и я могу обновлять имя, телефон клиента, но насколко я знаю она не может проверять существует ли вставляемое значение в таблице или нет. И вот мне надо что бы она перед тем как вставить сделала проверку. Как я полагаю нужен INSERT с условием.
вот "view" и правило на UPDATE : Код:
CREATE OR REPLACE VIEW view_client AS SELECT client.id_cli, client.name, client.phone, addresse.id_adr, adresse.str_adr, adresse.postc_adr, adresse.loc_adr, country.name_countr FROM client NATURAL JOIN addresse NATURAL JOIN country; CREATE OR REPLACE RULE "_UPDATE" AS ON UPDATE TO view_client DO INSTEAD //вот здесь проверка если новый адрес, добавить и вернуть ID, если уже такой имеется просто вернуть ID UPDATE client SET id_cli = new.id_cli, name = new.name, phone = new.phone, id_adr = *тут id_adr полученный из предыдущего запроса* WHERE client.id_cli = new.id_cli; Последний раз редактировалось 7enych; 17.12.2008 в 16:31. |
![]() |
![]() |
# 8 | |
мод
IMHO Кодер-200(6,7,8) Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
"правило на UPDATE" это триггер чтоли? Ну и если так, то действительно, там где у Вас комментарий проверить и вернуть новый ИД, там и сделайте проверку. Вроде все стройно выходит. Вопрос-то в чём именно? А, и еще, там в триггере, вы используете просто new.*, а если за раз будет апдейтится сразу 100 строк? Вы не хотите разве все их обработать, только одну?
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям! Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru Pahan-Hubbitus. |
|
![]() |
![]() |
# 9 | |||
Newbie
Регистрация: 15.12.2008
Сообщения: 11
![]() |
Цитата:
Цитата:
Цитата:
|
|||
![]() |
![]() |
# 10 | ||
мод
IMHO Кодер-200(6,7,8) Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
http://msdn.microsoft.com/ru-ru/library/ms188064.aspx ? Так оно же вроде только для ограничений данных столбца написано...
Цитата:
Цитата:
Код:
UPDATE client SET id_cli = new.id_cli, name = new.name, phone =...
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям! Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru Pahan-Hubbitus. |
||
![]() |