Въпросче...

5 отговора 241 прегледа
#1

Въпросче...

Имам следния въпрос :
Потребителя желае да направи справка след което евентуално да редактира данните от справката . За целта в изпълнимия файл се вика метод от .DLL, който създава необходимите ADO компоненти , и след като ги инициализира вика съхранена процедура на сървъра .В метода от .DLL се отваря и затваря конекцията към SQL сървъра, като към .EXE-то се изпраща резултата
или под формата на множество отделни променливи или под формата на DateTable. Т.е. в .Exe-to не се ползват никакви ADO компоненти .

[.EXE] -> [.DLL] -> [MS SQL SERVER 2000]

Потребителя може веднага да редактира данните , може цял ден да блей пред тях и накрая на деня да ги редактира . А може и въобще да не ги редактира .
Проблема в случая е че потребителите са повече от 50 , като всеки един от тях може в даден момент да направи обръщение към едни и същи данни.
Според вас кой е най-подходящия начин да се направи така ,че когато един потребител извлича данни , и когато реши да ги редактира да е сигурен ,че друг не ги е променил пред него.
Естествено ,че първото нещо което идва на ум на човек при такъв случай е заключването, но след като огледах нещата нещо не ми харесва идеята, още повече ,че връзката на потребителя с SQL Server-a се съдава и унищожава в DLL -a .

Отговор
в отговор на БOИЛ #2

Re: Въпросче...

Кое не ти харесва в заключването не разбрах? Добавяш за всеки запис флаг locked, дигаш го, когато трябва да се редактира и го сваляш, когато вече е свободен.

Я вышел им наперерез!
Отговор
в отговор на БOИЛ #3

Re: Въпросче...

Uno momento! Искаш да кажеш, че ще е възможно един потребител да е отворил данните на неговия комп, да се е заблеял по колежките си, и чак привечер да се сети да ги редактира? А през това време някой вече може да ги е редактирал от друг компютър, тъй ли?

Хич не знам дали съм разбрал правилно темата, ама така каго го четях - се сещам за добрите чичковци от Майкрософт, дето написаха мрежов Ofiice. Тряа да провериш коя версия поддържа работа в мрежа (мисля че от 2к нагоре), и просто да използваш благинките. Абе, верно, че като се попретовари и става бъгав, ама в общи линии върши чудесна работа. Е, сега аз не мога да знам дали в твоя проект ще свърши работа, защото не съм запознат с проекта, но все пак ми беше приятно, че си писахме.

Отговор
в отговор на БOИЛ #4

Re: Въпросче...

Къстъм локинг. Просто си го правиш ти - не разчитай на АДО за това.
Правиш си таблица в ДБ-то с локове.
Така ще може да информираш потребителя какво става и какви действия да се предприемат.

UB40 !
Отговор
в отговор на БOИЛ #5

Re: Въпросче...

Ами можеш да пазиш timestamps.
Примерно за някакви данни пазиш кога последно са update-нати.
Когато някой потребител ги прочете в неговата сесия пазиш този запис.
Като тръгне да commit-ва - проверяваш дали не са променяни след него (по timestamp-a). Ако са - rollback. Ако не са - commit-ваш и променяш този запис (timestamp-a).

Нещо такова.

Отговор
в отговор на БOИЛ #6

Ami Batch Update...

na rekordset-a mu e maijkata- той си влачи и оригиналните данни...

Отговор