Как брать информацию из справочников?

Программирование на Visual Basic for Applications
OlafBond
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 08.04.2005 (Пт) 9:35

Как брать информацию из справочников?

Сообщение OlafBond » 06.05.2005 (Пт) 10:01

Есть база с кучей справочных таблиц (как обычно)
Для того, чтобы вытаскивать из них произвольные значения была написана функция:


Public Function GetСправочник(Результат As String, ИмяТаблицы As String, Условие As String) As Variant
Dim rst As New ADODB.Recordset
On Error GoTo Err_Handler

rst.Open "SELECT " & Результат & " AS Результат FROM dbo." & ИмяТаблицы & " WHERE " & Условие, CurrentProject.Connection
If rst.EOF Then
GetСправочник = ""
Err.Raise vbObjectError + 513, , "Справочник не найден"
Else
GetСправочник = rst!Результат
End If
rst.Close

Set rst = Nothing
Exit Function

Err_Handler:
MsgBox Err.Description, vbCritical, "GetСправочник"
Resume Next
End Function

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

Возможно, кому-то уже удалось решить эту задачу. Поделитесь.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 06.05.2005 (Пт) 14:07

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

OlafBond
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 08.04.2005 (Пт) 9:35

Сообщение OlafBond » 06.05.2005 (Пт) 14:32

Дело в том, что таблицы в общем все закрыты.
Пользователь может только ограниченно считывать из них информацию (определенные поля).
Удобнее это делать хранимыми процедурами.
Но получается, что на каждый случай нужно писать свою Бейсик/SQL процедуру.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 06.05.2005 (Пт) 15:12

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

OlafBond
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 08.04.2005 (Пт) 9:35

Сообщение OlafBond » 06.05.2005 (Пт) 18:16

Вот к этому я и пришел: написал десяток хранимых процедур с целью в последствии определить к ним доступы.

Sedge
Alternative Choice
Alternative Choice
Аватара пользователя
 
Сообщения: 1049
Зарегистрирован: 16.05.2002 (Чт) 18:23
Откуда: Somewhere-In-The-Net

Сообщение Sedge » 06.05.2005 (Пт) 23:57

OlafBond, обрисуй условия задачи более детально. Что делается, на основе каких данных и для чего. А то "темна вода во облацех"...

OlafBond
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 08.04.2005 (Пт) 9:35

Сообщение OlafBond » 07.05.2005 (Сб) 17:39

1. Есть ряд таблиц, содержание которых не должно быть доступно для редактирования пользователем. Грубо говоря, это некие настройки.
2. Есть таблицы с информацией, которая полностью или частично недоступна для рядового пользователя.
3. Есть таблицы (собственно, вводимые и хранимые данные), сохранение которых является важнейшей задачей - необходима защита от умышленного и неумышленного удаления/изменения и также массового копирования. Т.е. необходимы некие механизмы, жестко регламентирующие обращение с этими данными.

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

Если решать проблему "в лоб", то потребуется создать 40-60-... процедур, реализующих все необходимые обращения к таблицам.
В первом посте был приведен пример чтения значения поля таблицы, как наиболее часто встречающийся и способ его реализации универсальной функцией и объяснено, почему он более не устраивает.
Вопрос состоит в том, как, по возможности, можно уменьшить число используемых процедур?

Объяснил, как смог. Не ругайте:)


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 4

    TopList