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

Откуда: Москва
Сообщений: 106
Столкнулся с загадочной особенностью RemoteView в ORACLE 8, 9
1. Есть простейшая таблица: ключ и Наименование
2. Добавляю запись через RemoteView в VFP9 (ключ создается через тригер в ОРАКЛЕ)
3. делаю TABLEUPDATE(), изменения сохраняются.
4. Редактирую Наименование, делаю TABLEUPDATE(), изменения сохраняются.
5. Редактирую Наименование через DBA Studio или SQL Navigator, commit

Теперь если в любое время попробовать изменить запись, которая редактировалась в
DBA Studio или SQL Navigator, через RemoteView в VFP9, TABLEUPDATE()
возвращает .f. и изменения не сохраняются.
В чем дело?
5 фев 07, 18:18    [3741387]     Ответить | Цитировать Сообщить модератору
 Re: RemoteView и ORACLE  [new]
alex11100
Guest
ну Вы увидели не странность, а достоинство

через массив ошибок получите код
if !TABLEUPDATE(....)
AERROR(aErrorArray)
messgebox(....) или что-то делайте


запись потрогали пока вы думали
это правильно,
скажите на клиенте, что запись изменена другим пользователем

пусть юзер на клиенте обновит свой курсор

и лучше пользоваться курсорадаптером
5 фев 07, 19:07    [3741621]     Ответить | Цитировать Сообщить модератору
 Re: RemoteView и ORACLE  [new]
alex11100
Guest
курсорадаптер, в отличии от простого склэкзека - умный и навороченный посредник,
берет на себя основной груз работы с сервером, конвертирования данных, облегчает разработку,
позволяет избежать массы ошибок при разработке, связанных с обрезанием длины полей, несоответсвия типов данных и т.д., позволяет абстрагироваться на некий объект-сущность.

курсорадаптер в отличии от ремоутвью имеет массу преимуществ.
Это объект, не требует хранить вью в БД, позволяет оч. просто создать универсальный
класс-посредник, который можно просто и удобно наследовать.
5 фев 07, 19:15    [3741654]     Ответить | Цитировать Сообщить модератору
 Re: RemoteView и ORACLE  [new]
Vch1
Member

Откуда:
Сообщений: 36
Способ который вы пытаетесь применить для обновления данных Оракла не обеспечивает безопасность базы. Продумаете политику безопасности и вы откажитесь от RemoteView. Основые положения политики безопасности: View - только для чтения с правами только select, обновления - только через хранимые процедуры с правами доступа только execute, доступа к таблицам и другим объектам у пользователей нет вообще. Хранимые процедуры выполняют проверку прав доступа и корректность данных, т.о. обеспечивается безопасность не зависимо от того вызвана процедура из приложения фокса или другого приложения. Клиентское приложение выполняет только предварительный контроль.
5 фев 07, 21:46    [3742155]     Ответить | Цитировать Сообщить модератору
 Re: RemoteView и ORACLE  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
omorozov
Столкнулся с загадочной особенностью RemoteView в ORACLE 8, 9 ...

А какое поведение, по Вашему мнению, должно быть в описанной ситуации?

Как минимум, есть два варианта: либо сообщить пользователю, что пока он думал "о судьбах мира", кто-то уже изменил те же самые данные, либо молча затереть изменения сделанные другим пользователем.

Какой из этих двух сценариев правильный?

Оба правильные. Все зависит от конкретной задачи. Более того, разработчики FoxPro уже предусмотрели оба варианта. За этим следит второй параметр функции TableUpdate()

Есть переведенный Help на русском, правда смысл второго параметра в этом переводе не вполне ясен.

TABLEUPDATE () Функция
6 фев 07, 01:29    [3742397]     Ответить | Цитировать Сообщить модератору
 Re: RemoteView и ORACLE  [new]
alex11100
Guest
2 Vch1

использование ХП имеет оч.важный недостаток -
удорожание стоимости разработки и поддержки

- если систематически изменяется структура таблиц,
то Вы вынуждены постоянно править ХП.
- при разработке Вы заранее закладываете ошибки,
связанные с обрезанием полей при апдейте, проблемы
с актульностью данных на клиенте.

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

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

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

есть ГОСТ по безопасности, если необходимо я уточню,
требованиям которого технология ФП-КА-СКЛ соответствует.
6 фев 07, 09:14    [3742749]     Ответить | Цитировать Сообщить модератору
 Re: RemoteView и ORACLE  [new]
alex11100
Guest
да еще, и если уж так хочется сохраняться херез ХП,
то и этот трюк реализуем с пом.КА,
описыванием свойства апдейтсмд в которое достаточно прописать
вызов ХП с нужными параметрами и подергавшись дополнительно в событиях
6 фев 07, 10:14    [3743055]     Ответить | Цитировать Сообщить модератору
 Re: RemoteView и ORACLE  [new]
omorozov
Member

Откуда: Москва
Сообщений: 106
Vch1
Способ который вы пытаетесь применить для обновления данных Оракла не обеспечивает безопасность базы. Продумаете политику безопасности и вы откажитесь от RemoteView. Основые положения политики безопасности: View - только для чтения с правами только select, обновления - только через хранимые процедуры с правами доступа только execute, доступа к таблицам и другим объектам у пользователей нет вообще. Хранимые процедуры выполняют проверку прав доступа и корректность данных, т.о. обеспечивается безопасность не зависимо от того вызвана процедура из приложения фокса или другого приложения. Клиентское приложение выполняет только предварительный контроль.

В принципе я в основном RemoteView для чтения и использую,
просто решил попробовать, раз есть возможность редактирования данных,
и интересно понять механизм ошибки.
Блокировки быть не должно, т.к. измения в DBA были сделаны, и он закрыт.
Буду разбираться с кусорами, спасибо за совет.
6 фев 07, 13:12    [3744435]     Ответить | Цитировать Сообщить модератору
 Re: RemoteView и ORACLE  [new]
omorozov
Member

Откуда: Москва
Сообщений: 106
alex11100
ну Вы увидели не странность, а достоинство

через массив ошибок получите код
if !TABLEUPDATE(....)
AERROR(aErrorArray)
messgebox(....) или что-то делайте


запись потрогали пока вы думали
это правильно,
скажите на клиенте, что запись изменена другим пользователем

пусть юзер на клиенте обновит свой курсор

и лучше пользоваться курсорадаптером

В том и проблема, что редактирую запись в "монопольном" режиме,
никаких других подключений к таблице нет.
aerror(1)=95
aerror(2)= Statement is not allow in interactive mode
aerror(2)= View1
остальные Null
6 фев 07, 13:15    [3744455]     Ответить | Цитировать Сообщить модератору
 Re: RemoteView и ORACLE  [new]
omorozov
Member

Откуда: Москва
Сообщений: 106
ВладимирМ
omorozov
Столкнулся с загадочной особенностью RemoteView в ORACLE 8, 9 ...

А какое поведение, по Вашему мнению, должно быть в описанной ситуации?

Как минимум, есть два варианта: либо сообщить пользователю, что пока он думал "о судьбах мира", кто-то уже изменил те же самые данные, либо молча затереть изменения сделанные другим пользователем.

Какой из этих двух сценариев правильный?

Оба правильные. Все зависит от конкретной задачи. Более того, разработчики FoxPro уже предусмотрели оба варианта. За этим следит второй параметр функции TableUpdate()

Есть переведенный Help на русском, правда смысл второго параметра в этом переводе не вполне ясен.

TABLEUPDATE () Функция

В том и проблема, что редактирую запись в "монопольном" режиме,
никаких других подключений к таблице нет.
Поэтому непонятен источник ошибки.
6 фев 07, 13:40    [3744655]     Ответить | Цитировать Сообщить модератору
 Re: RemoteView и ORACLE  [new]
omorozov
Member

Откуда: Москва
Сообщений: 106
Вот где собака порылась, изменил updatetype на key field only,
и все помирились
6 фев 07, 14:55    [3745243]     Ответить | Цитировать Сообщить модератору
 Re: RemoteView и ORACLE  [new]
Vch1
Member

Откуда:
Сообщений: 36
alex11100

Я полностью согласен с вами по поводу приятностей курсорадаптера. Но база оракла используется для многопользовательских систем в которой разные группы пользователей имеют разные права на доступ и управление данными. И эти права нужно обеспечить не только со стороны родного клиентского приложения, написанного на фоксе, но и со строны стронних приложений. Например: установлен plsql developer и пользователь пытается с его помощью получить доступ к данным. Такие требования безопасности обеспечить только с помощью внешнего приложения не представляется возможным. Нужно использовать средства оракла (или другой СУБД). Я применяю подход когда запросы поступают в курсор фокса через Views оракла. Views только для чтения. А все изменения выполняются только через хранимые процедуры оракла. Права на хранимые процедуры только execute и то только тем пользователям, которые имеют права на редактирирование. Прав на другие объекты оракла у пользователей нет. Права на редактирование прописыватся в таблицах оракла, доступа к которым у пользователей нет, только у хранимой процедуры.
А вот то что курсор фокса это очень хорошее средство я полностью с вами согласен. На основе курсоров создаются интеллектуальные гриды в клиентской части. Равного по их потенциалу средства в других системах программирования на сегодня нет.
6 фев 07, 21:59    [3747151]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить