![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Гранты, TIBDataSet и его Prepare [D5, IB5.x]
eugie © (2004-01-21 16:46:00)
Уважаемые Мастера! Столкнулся с такой проблемой. В приложении используются компоненты TIBDataSet с запросами на SELECT, REFRESH, INSERT, UPDATE, DELETE (т.е. "live query"). Их довольно много, кроме того, некоторые еще и создаются в run-time. Так вот, при подключении к БД под именем пользователя, имеющего ограниченные права на объекты БД (например только SELECT и REFERENCE) сервером выдается ошибка при выполнении IBDataSet.Open типа "нет прав на вставку/обновление". Причина - при выполнении метода (IBDataSet.Open) выполняется метод Prepare для каждого из запросов компонента (смотрел исходник) - как следствие - возникновение ошибки. Подскажите, есть ли какие-либо другие компонеты, у которых Prepare выполняется отдельно для каждого из запросов непосредственно при его использовании? Или есть пути для обхода данного затыка? Просто переделывать сильно много, хочется "малой кровью" обойтись...
eugie (2004-01-22 04:54:00) [1]
Так и есть. Я тоже начал склоняться к этому варианту.
Sandman25 (2004-01-21 17:47:00) [2]
Я тут поковырялся по исходникам... Вроде бы prepare происходит только при наличии соответствующего SQL. Можно попытаться определять права пользователя заранее (до открытия Dataset) и присваивать только те SQL (Insert, update, delete), на которые есть доступ.
eugie (2004-01-21 17:40:00) [3]
Именно это и надо. Путей 2: "нарисовать" новую компонету на основе TIBDataSet с переопределением метода Prepare и необходимых свойств или изменить стандартный. Вот я и спросил, может уже кто сделал подобное?
Sandman25 (2004-01-21 17:35:00) [4]
[5] Johnmen © (21.01.04 17:32)
Вот видишь... Сегодня не пятница и не 13-ое, и мы опять друг друга понимаем :)
Johnmen (2004-01-21 17:32:00) [5]
>Sandman25 © (21.01.04 17:28)
Точно :)
Sandman25 (2004-01-21 17:28:00) [6]
Я думаю, Johnmen имел ввиду, чтобы Prepare вызывался при их первом использовании, а не TIBDataSet.Open.
eugie (2004-01-21 17:25:00) [7]
>Sandman25
Таких свойств нет
>Johnmen
Закоментарить - не пойдет: подключающийся пользователь может иметь права на изменение объекта БД. Есть конечно такая идея - последовательно делать попытки выполнения TIBDataSet.Open и в зависимости от кода ошибки выносить тексты из запросов на INSERT, UPDATE и DELETE. Но тогда возникает проблема востановления таковых при смене пользователя. Геморрой, короче.
Johnmen (2004-01-21 17:01:00) [8]
>eugie
Малой кровью - подправить исходники :)
Закомментарь препарирование...
Sandman25 (2004-01-21 16:56:00) [9]
ReadOnly/RequestLive (или как его там для IB компонент) указан верно?