Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Postgres  [new]
VRS
Member

Откуда:
Сообщений: 18
Может кто сталкивался.
Подключаю Postgres к Access под пользователем superuser.
Присоединяю таблицу.
Затем удаляю таб, подключаюсь под другим пользователем, у которого есть ограничения.
Вопрос: почему при переподключении ограничения установленные на пользователя не работают?
Если выйти из Access, затем зайти - все работает корректно.
Т.е чтобы все корректно работало, надо сразу подключаться под нужным пользователем. Переподключения не помогают
22 янв 19, 12:58    [21790986]     Ответить | Цитировать Сообщить модератору
 Re: Postgres  [new]
VRS
Member

Откуда:
Сообщений: 18
может так будет понятней.
Function PrisoedenitTablitsu(rstrTblSrc As String)
On Error GoTo Err_Handler
Dim lbl As Label
Dim tdf As TableDef
Dim rstrTblDest As String
Dim db As Database
Dim serverConn As String
  
  Set db = CurrentDb
  Set tdf = db.CreateTableDef(rstrTblSrc)
  
  serverConn = "ODBC;DSN=PostgreSQL35W" _
    & ";DATABASE=" & baseName _
    & ";SERVER=" & hostName _
    & ";PORT=" & portNo _
    & ";Uid=" & userName _
    & ";Pwd=" & psw
  
  Debug.Print serverConn
    
  tdf.Connect = serverConn
  tdf.SourceTableName = rstrTblSrc
  db.TableDefs.Append tdf
  'db.TableDefs.Refresh
  'db.TableDefs(tdf.Name).RefreshLink
  'tdf.RefreshLink
  RefreshDatabaseWindow
lbl:
  
  'закрываем лавочку
  Set tdf = Nothing
  db.Close
  Set db = Nothing
  
  Debug.Print "Подключена таб: " & rstrTblSrc
  
  Exit Function
  
Err_Handler:
    
  If Err.Number = 3010 Then 'таблица с таким уменем уже есть
  
    DoCmd.Close acTable, rstrTblSrc 'закрываем, если открыта
    
    If IsTableExist(rstrTblSrc) = 2 Then DoCmd.DeleteObject acTable, rstrTblSrc '2 - Таблица присоединенная. Удаляем
    
    db.TableDefs.Refresh
    Set tdf = Nothing
    db.Close
    Set db = Nothing
    
    Debug.Print "отключена таб " & rstrTblSrc
    
    Call PrisoedenitTablitsu(rstrTblSrc) 'линкуем по новой
    
  Else
    Debug.Print Err.Number, Err.Description
    'Stop
    'Resume 
    GoTo lbl
  End If
    
End Function


подключаюсь под пользователем "readonly". Данные в таб отображаются с ограничениями, как и должно быть.
Переподключаюсь под суперпользователем, а в таб данные так же с ограничениями что для "readonly", а должны быть все.
При открытии Access, первое подключение всегда правильное, переподключение - нет
Как переподключиться, чтобы данные отображались правильно?
24 янв 19, 12:08    [21793144]     Ответить | Цитировать Сообщить модератору
 Re: Postgres  [new]
alecko
Member

Откуда: Башкирия
Сообщений: 453
функция вызывающая саму себя... смело, но насколько правильно?
24 янв 19, 12:31    [21793190]     Ответить | Цитировать Сообщить модератору
 Re: Postgres  [new]
VRS
Member

Откуда:
Сообщений: 18
alecko,

с этим проблем нет
24 янв 19, 13:00    [21793243]     Ответить | Цитировать Сообщить модератору
 Re: Postgres  [new]
VRS
Member

Откуда:
Сообщений: 18
никто не сталкивался что-ли с перелинковкой?
24 янв 19, 14:17    [21793370]     Ответить | Цитировать Сообщить модератору
 Re: Postgres  [new]
vmag
Member

Откуда: MP
Сообщений: 3139
alecko
функция вызывающая саму себя... смело, но насколько правильно?


Согласен...
У тебя получается зашел, прилинковал.
Второй раз зашел, уже прилинковано - пытаешься перелинковать, причем так кривовато, тут даже трудно сказать из-за чего трабл может быть, начиная с того что ошибка м.б. не равна 3010 и заканчивая чем угодно...

У меня была подобная задача только в MySql, сделал так:
- в бд есть локальная таблица со списком нужных таблиц на сервере.
- при подключении тупо по списочку игнорируя ошибки удаляю все присоединенные таблицы (возможно их даже и нет - на случай аварийного завершения прошлого сеанса).
- опять же по списочку подключаю их к бд по новой с нужным юзером
Перед завершением сеанса опять по списочку удаляю все присоединенные таблицы...

В вашем случае сейчас самый простой варант - запретить переподключение юзеров в одном сеансе, ну типа пароль ввел, зашел, поработал и теперь можно только завершить приложение, в принципе то так и должно быть имхо
24 янв 19, 21:45    [21793819]     Ответить | Цитировать Сообщить модератору
 Re: Postgres  [new]
vmag
Member

Откуда: MP
Сообщений: 3139
VRS
Как переподключиться, чтобы данные отображались правильно?


Ну как бэ должен быть полноценный режим выход из БД с удалением присоединенных таблиц, а не попытка заменить шило на мыло после ввода новой фамилии...
24 янв 19, 21:50    [21793822]     Ответить | Цитировать Сообщить модератору
 Re: Postgres  [new]
VRS
Member

Откуда:
Сообщений: 18
vmag,
Да нет. При выходе таб удалять не обязательно.
При входе, соединяюсь под любым пользователем и работает правильно.
25 янв 19, 13:09    [21794207]     Ответить | Цитировать Сообщить модератору
 Re: Postgres  [new]
VRS
Member

Откуда:
Сообщений: 18
vmag
...У тебя получается зашел, прилинковал.
Второй раз зашел, уже прилинковано - пытаешься перелинковать, причем так кривовато...

старая таб удаляется, новая соединяется.
в каком месте криво?

vmag
... ошибка м.б. не равна 3010 и заканчивая чем угодно...

проверял пошагово
25 янв 19, 13:22    [21794227]     Ответить | Цитировать Сообщить модератору
 Re: Postgres  [new]
vmag
Member

Откуда: MP
Сообщений: 3139
VRS
старая таб удаляется, новая соединяется.
в каком месте криво?


Мне кажется тут
Call PrisoedenitTablitsu(rstrTblSrc) 'линкуем по новой

Ведь старая процедура висит пока она же не выполнится второй раз...
Попробуй временно задублировать процедуру, сделай такую же PrisoedenitTablitsu2
и во второй раз дерни её, что получится ?
Просто уже ради спортивного интереса...
25 янв 19, 17:41    [21794495]     Ответить | Цитировать Сообщить модератору
 Re: Postgres  [new]
VRS
Member

Откуда:
Сообщений: 18
vmag,

создал. попробовал. НЕ идет.

надо как-то "перегружать" программно Access
25 янв 19, 23:58    [21794637]     Ответить | Цитировать Сообщить модератору
 Re: Postgres  [new]
vmag
Member

Откуда: MP
Сообщений: 3139
VRS
создал. попробовал. НЕ идет.


- Таблица уже есть, идем на Err_Handler:
- Ошибка 3010
- Пытаемся закрыть (не открытую таблицу) получаем другую ошибку и опять идем на Err_Handler:
- так как ошибка уже не 3010 идем на выход (lbl:), оставляя старую таблицу

Не ????
26 янв 19, 00:27    [21794653]     Ответить | Цитировать Сообщить модератору
 Re: Postgres  [new]
VRS
Member

Откуда:
Сообщений: 18
vmag
VRS
создал. попробовал. НЕ идет.


- Таблица уже есть, идем на Err_Handler:
- Ошибка 3010
- Пытаемся закрыть (не открытую таблицу) получаем другую ошибку и опять идем на Err_Handler:
- так как ошибка уже не 3010 идем на выход (lbl:), оставляя старую таблицу

Не ????


Нет. старая таблица удаляется однозначно.
таблица открыта, не открыта ошибку не дает.
если открыта, закрывает, удаляет и линкует поновой
еще раз проверил пошагово.
26 янв 19, 01:24    [21794664]     Ответить | Цитировать Сообщить модератору
 Re: Postgres  [new]
vmag
Member

Откуда: MP
Сообщений: 3139
VRS,

ну тогда если искусственная пауза на пару-тройку секунд после удаления старой таблицы не поможет
(после Debug.Print "отключена таб " & rstrTblSrc), нужно что-то кардинальное...

А вообще такое ощущение что трабл в другом месте, пробовал выводить при каждой привязке в отладку
юзера и пароль, мож. они такие как надо только при старте?
26 янв 19, 12:46    [21794750]     Ответить | Цитировать Сообщить модератору
 Re: Postgres  [new]
alecko
Member

Откуда: Башкирия
Сообщений: 453
VRS, может
db.Close

убрать, зачем закрывать текущую базу данных в которой идет работа?
26 янв 19, 13:34    [21794773]     Ответить | Цитировать Сообщить модератору
 Re: Postgres  [new]
VRS
Member

Откуда:
Сообщений: 18
alecko,
db.Close
Set db = Nothing
убрал, не помогает

vmag,
Debug.Print serverConn
при каждом подключении в строке подключения видно пользователя.
он действительно тот, под которым подключаюсь

Нужно типа перегрузки Accessa
26 янв 19, 18:09    [21794878]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить