powered by simpleCommunicator - 2.0.19     © 2024 Programmizd 02
Map
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / MS Access доступ к базе PosgreSQL через ODBC
9 сообщений из 9, страница 1 из 1
MS Access доступ к базе PosgreSQL через ODBC
    #40138061
mari.p68
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дано:
MS Access 2016 32 бит, PostgreSQL 11, ODBC драйвер версии 13.01
Таблица spr_tbnames в БД kip PostgreSQL
Код: SQL
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE IF NOT EXISTS public.spr_tbnames
(
    uid integer NOT NULL,
    naim text COLLATE pg_catalog."default",
    description text COLLATE pg_catalog."default",
    CONSTRAINT spr_tbnames_pkey PRIMARY KEY (uid)
)
Необходим автоинкремент первичного ключа uid, в postgreSQL это настраивается с помощью sequence
CREATE SEQUENCE IF NOT EXISTS public.spr_tbnames_seq
INCREMENT 1
START 25
MINVALUE 25
MAXVALUE 2147483647
CACHE 1
OWNED BY mvp;
далее в поле uid добавляется правило nextval(' spr_tbnames_seq'::regclass)
После всех действий в PostgreSQL добавление записи запросом проходит успешно
kip=> insert into "spr_tbnames" (naim,description) values ('test_naim','test_desc');
INSERT 0 1

Задача: создать присоединенную таблицу spr_tbnames в MS Access с возможностью добавления, редактирования и удаления записей.
Проблема: При отсутствии настройки автоинкремента все работает нормально, после настройки автоинкремента при попытке добавить запись в новой записи появляется строка #Удалено, хотя после закрытия и открытия связанной таблицы добавленная запись отображается нормально.
Без автоинкремента такой проблемы нет.
Подскажите пожалуйста уважаемые профессионалы как решить?
...
Рейтинг: 0 / 0
MS Access доступ к базе PosgreSQL через ODBC
    #40138062
alvk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mari.p68 [игнорируется] 

Я правильно понимаю, что вы сначала присоединили таблицу к БД, потом на сервере добавили автоинкремент?
В таком случае нужно удалить таблицу и заново подключить. Если не поможет, то возможно не подходит версия ODBC драйвера к вашему Postgre
...
Рейтинг: 0 / 0
MS Access доступ к базе PosgreSQL через ODBC
    #40138063
mari.p68
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alvk [игнорируется] 

Добрый день, спасибо за ответ. удаление связанной таблицы и присоединение заново ничего не дает.
Нашла адекватную статью
https://www.postgresql.org/message-id/492B80A7.4070000@postnewspapers.com.au

Похоже придется обрабатывать событие в Access Form_BeforeInsert, отдельно запускать nextval, а потом брать из него current

Set MyDB = CurrentDb()
Set MyQ = MyDB.CreateQueryDef("nextval")
MyQ.Connect = DSN

' Generate the new key, discarding the result. We must do
' this to ensure that Access doesn't call nextval(seqname)
' twice, as it will if ReturnsRecords is set.
MyQ.SQL = "SELECT nextval('" & seqName & "')"
MyQ.ReturnsRecords = False
MyQ.Execute

' Now that there's a value in the context of the current
' transaction, retrieve it. Since this procedure has no
' side effects, it'll do no harm when Access calls it twice.
MyQ.SQL = "SELECT currval('" & seqName & "') AS new_id"
MyQ.ReturnsRecords = True
Set MyRS = MyQ.OpenRecordset()
MyRS.MoveFirst
nextval = MyRS!new_id

CurrentDb.QueryDefs.Delete "nextval"
MyQ.Close
MyRS.Close
MyDB.Close
Exit Function
...
Рейтинг: 0 / 0
MS Access доступ к базе PosgreSQL через ODBC
    #40138065
alvk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mari.p68 [игнорируется] 
посмотрите ещё тут
https://odbc.postgresql.org/howto-accessvba.html
https://www.interface.ru/home.asp?artId=7901
...
Рейтинг: 0 / 0
MS Access доступ к базе PosgreSQL через ODBC
    #40138066
mari.p68
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alvk [игнорируется] 

Все оказалось намного проще. необходимо обрабатывать событие Form_AfterInsert простой командой
Код: SQL
1.
Me.Requery
и новая строка отображается корректно.
Что касается вызова из Access nextval, то к сожалению эта конструкция не работает.
Команда уходит, но счетчик не увеличивается и соответственно currval возвращает ошибку, поскольку в текущем сеансе не отработала корректно функция nextval.
...
Рейтинг: 1 / 0
Нравится: alvk
MS Access доступ к базе PosgreSQL через ODBC
    #40138078
alvk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mari.p68 [игнорируется] 

Я пока за 15 лет не встречал никого, кто бы работал из Акцесса с таблицами на Постгре :)
...
Рейтинг: 0 / 0
MS Access доступ к базе PosgreSQL через ODBC
    #40138082
mari.p68
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alvk  21.09.2023, 10:20
[игнорируется]
mari.p68 [игнорируется] 

Я пока за 15 лет не встречал никого, кто бы работал из Акцесса с таблицами на Постгре :)
А я и не работаю, это прога настройки сборщика, ну лень писать что-то приличное.
Приложение клиент-серверное, сервер сборщик работает на Linux+Postgres, клиент - SCADA
...
Рейтинг: 0 / 0
MS Access доступ к базе PosgreSQL через ODBC
    #40138094
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mari.p68 [игнорируется] 

нет, вы серьезно? после полутора лет забвения форума, первое это Акцесс и Постгре??
я в шоке - это очень мягко!
...
Рейтинг: 0 / 0
MS Access доступ к базе PosgreSQL через ODBC
    #40138144
Неуловимый Джо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShIgor  30.09.2023, 23:09
[игнорируется]
mari.p68 [игнорируется] 

нет, вы серьезно? после полутора лет забвения форума, первое это Акцесс и Постгре??
я в шоке - это очень мягко!
ну так импортозамещение ведь )
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / MS Access доступ к базе PosgreSQL через ODBC
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (0):
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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