Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.01.30;
Скачать: [xml.tar.bz2];

Вниз

Блокировка записи в базе данных на сервере   Найти похожие ветки 

 
Сергей   (2010-11-11 14:20) [0]

Здравствуйте. Написал простую сетевую программу. На сервере база данных Access. Программа запускается одновременно на 2-х компьютерах и подключается к базе на сервере через компоненты ADOConnection->ADOTable.
Все работает нормально. Только вот не знаю как заблокировать запись, которая открыта для редактирования на Компьютере1, чтоб ее нельзя было редактировать на Компьютере2, пока Компьютер1 не освободить эту запись.
Подскажите, пожалуйста, как заблокировать запись, на время ее редактирования?
Спасибо.


 
Anatoly Podgoretsky ©   (2010-11-11 14:22) [1]

> Сергей  (11.11.2010 14:20:00)  [0]

Работника на компьютере 2 уволить, как лишнего.


 
Сергей   (2010-11-12 13:14) [2]

Спасибо, дедушка Толя, за «помощь» и сарказм…

Вот только хотелось бы обратить внимание на 2 вещи.
1. Я задавал вопрос в «Конференцию начинающим». И в самом начале конференции есть такие слова – «Просьба к участникам быть взаимовежливыми, ПРОФЕССИОНАЛАМ отдельная просьба - быть СНИСХОДИТЕЛЬНЫМИ»… И нигде не сказано, что здесь будут насмехаться…

2. Желаю, чтобы с Вашими внуками (когда им понадобится помощь) не обращались так, как Вы обращаетесь с нами…

P.S. Немного о себе. Врач-хирург. 37 лет. Программу пишу для регистратуры (на выдачу талонов пациентам). Купить не можем, так как финансирование от государства очень-очень малое…  Вот и хочу хоть немного облегчить людям жизнь (чтоб не стояли в длинных очередях возле окошек).

Удачи  всем и доброго здоровья.


 
Anatoly Podgoretsky ©   (2010-11-12 13:34) [3]

С какой стати талон будет получать сразу в двух окошках. Значит один работник лишний.

Все разработчики БД стремяться избежать блокировок, а тут ее еще и принудительно хотят. Непорядок.


 
Sergey13 ©   (2010-11-12 13:35) [4]

> [2] Сергей   (12.11.10 13:14)
> Врач-хирург. 37 лет. Программу пишу для регистратуры (на выдачу талонов пациентам).
Как ты отнесешся ко мне, когда я приду на форум хирургов и попрошу направить меня в операции по вырезанию апендицита?

По теме. Ты написал не сетевую программу, а локальную (точнее однопользовательскую). Она иногда может работать по сети, но не всегда, а как повезет.
Если это регистратура, то сомнительно, что стразу в нескольких окошках редактируют одного пациента. Так что может все не так и плохо.


 
Anatoly Podgoretsky ©   (2010-11-12 13:39) [5]


> Сергей   (12.11.10 13:14) [2]

И ты странные выводы делаешь. Никто над тобой не насмехается, ты просто мнительный.


 
Сергей   (2010-11-12 14:16) [6]

Ну, если точнее сформулировать задачу, то в регистратуре 2 компьютера, один из которых еще и в роли сервера будет.

В единой базе (расшаренная папка на компьютере1) находится табель (расписание) работы врача на 1 день. Каждая строка это

время;   номер талона;    ФИО больного;    метка «занято»,
(например
8,10-8,20;   талон №2;   ФИО пока нет;    «свободно»)
8,10-8,20;   талон №3;   ФИО пока нет;    «свободно»)
8,10-8,20;   талон №4;   ФИО пока нет;    «свободно»)

Приходит человек к окошку1 и говорит дайте талон на 8,10, регистратор начинает в компьютере1 в строке таблицы вводить его ФИО. В это время походит человек к окошку2 и тоже просит талон на 8,10, но эта строка редактируется уже компьютером1. И программа должна сообщить, что талон уже занимается другим пользователем, попробуйте другой талон. Понимаете, мне чем проще, тем надежнее)


 
Сергей   (2010-11-12 14:21) [7]

ой, небольшое исправление :)

время;   номер талона;    ФИО больного;    метка «занято»,
(например
8,10-8,20;   талон №2;   ФИО пока нет;    «свободно»)
8,20-8,30;   талон №3;   ФИО пока нет;    «свободно»)
8,30-8,40;   талон №4;   ФИО пока нет;    «свободно»)


 
И. Павел ©   (2010-11-12 14:27) [8]

Можно, например, вашу таблицу использовать просто как расписание. А реальные талоны создавать только при выдаче и в другой таблице.
Тогда просто сделайте поле времени талона индексом без повторений. Тогда при попытке создать второй талон на 8,10 произойдет ошибка: такое значение уже есть.


 
Anatoly Podgoretsky ©   (2010-11-12 14:31) [9]

> Сергей  (12.11.2010 14:16:06)  [6]

Это недостатки программы, подобные программы строятся иначе с вводом понятия
резервирование, сначал резервируется, потом утверждается.
И что это дает, просто выдадут два талона. Или талон выдадут во втором
окошке, а в первом окошке надо вводить еще понятие возврат.
Ты смотри не со своей точки, а с точки зрения регистратуры, попытайся
съэмулировать работу клерка, как они сейчас работают без компьютера.
Проблему ты выдумал для себя сам лично. Никакие блокировки не нужны, а то
через некоторое время все окошки окажутся заблокироваными.


 
Anatoly Podgoretsky ©   (2010-11-12 14:33) [10]

> Сергей  (12.11.2010 14:21:07)  [7]

Да тут вообще не то что блокировка, но даже работа с записью не нужна, тут
нужна серверая процедура "Дай мне талончик", "Возьми его обратно", "Удали
талончик из списка (закрой транзакцию)".


 
Anatoly Podgoretsky ©   (2010-11-12 14:40) [11]

> И. Павел  (12.11.2010 14:27:08)  [8]

Все потому, что непрофессионал, нет ТЗ, нет постановке.
Надо хотя бы простую постановку сделать.


 
Sergey13 ©   (2010-11-12 14:51) [12]

> [7] Сергей   (12.11.10 14:21)

Это отвратительная структура БД. Аналог ампутации конечности без наркоза. 8-)
Надо почитать хотя бы азы про проектирование БД, нормальные формы и связи между таблицами.

> один из которых еще и в роли сервера будет.
У если сервер как таковой предполагается, но может и СУБД взять с самого начала серверную? Они не тяжелее аксеса, поэтому пугаться не надо. Например FireBird.

> ADOTable.
Уж если изначально предполагается сетевая многопользовательская работа, то это надо сразу выкинуть и использовать [ADO]DataSet.


 
Anatoly Podgoretsky ©   (2010-11-12 14:57) [13]

> Sergey13  (12.11.2010 14:51:12)  [12]

> Уж если изначально предполагается сетевая многопользовательская работа, то
> это надо сразу выкинуть и использовать [ADO]DataSet.

Это надо делать и в однопользовательской системе, особенно для Акцесс


 
Сергей   (2010-11-12 14:59) [14]

А я вот покопался в литературе, и  кое что нашел :)
В свойствах компонента ADOTable установил следующее

CursorLocation   ->  clUseServer
CursorType     ->  ctKeyset
LockType    ->  ltPessimistic

Наверно, лес нагородил, но вроде заработало, как я и хотел.


 
Sergey13 ©   (2010-11-12 15:07) [15]

> [13] Anatoly Podgoretsky ©   (12.11.10 14:57)
Согласен, но в многопользовательском режиме это еще критичнее.

> [14] Сергей   (12.11.10 14:59)
Ты не рещил задачу, ты отложил ее решение. Сбил симтомы, но не вылечил.


 
Dennis I. Komarov ©   (2010-11-12 17:36) [16]

Browser <--> [TcpServer(http/https) + BDClient] <--> [СУБД]


 
Плохиш ©   (2010-11-12 20:49) [17]


> Сергей   (12.11.10 14:59) [14]
>
> А я вот покопался в литературе, и  кое что нашел :)
> В свойствах компонента ADOTable установил следующее

Т.е. тебе пофигу на отвечающих. Ну так и стой как баран перед новыми воротами.

> Dennis I. Komarov ©   (12.11.10 17:36) [16]

Ну чё ты над хирургом насмехаешься?


 
Dennis I. Komarov ©   (2010-11-13 12:58) [18]


> Ну чё ты над хирургом насмехаешься?

Ни чуть... Я предложил свое видение реализации задачи. Может проскочит мысль, что в наше время удалять аппендицит вилкой не самое хорошее решение проблемы, а ведь вилки у всех есть, да и держать ее не трудно...
А в
> Программу пишу для регистратуры (на выдачу талонов пациентам).
>  Купить не можем, так как финансирование от государства
> очень-очень малое…  Вот и хочу хоть немного облегчить людям
> жизнь (чтоб не стояли в длинных очередях возле окошек).
не очень то вериться, если у них куча пациентов, а хирург вместо того, чтобы заниматься своими прямыми обязанностями пишет программы, чтобы облегчить жизнь регистратуре. А в регистратуре, пока хирург занят написанием Software, народ практикуется в умении...
Далее...
Soft пишем на D7 - где мы ее взяли (при вышеописанном) - учесть главврача при определенных обстоятельствах описывать не буду - догадаетесь.
Далее...
Пустили Soft в работу. Работаем, работаем - бац косяк обнаружился... Пациент лежит в операционной. В регистратуре уже пробка... Чего делать? Кто виноват? А ведь все с благими намерениями...
Вывод:
Получиться "Хотел как лучше..."


 
Сергей   (2010-11-13 19:56) [19]

Спасибо за критику и советы. А самое главное за указание по какому пути нужно идти. Я понимаю, что каждый должен заниматься своим делом. Программисты писать программы, а я лечить людей, но в свободное время мне интересно посидеть за компьютером. Для меня это лучшая разрядка чем алкоголь и табак. Извините, за непрофессиональные вопросы.

P.S. А программу все-таки сделаю :). Если интересно, потом код выложу для критики.

Удачи всем.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2011.01.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.005 c
4-1244384113
dmitry_12_08_73
2009-06-07 18:15
2011.01.30
Конфликт SetWindowsHookEx при быстром 5-тикратном нажатии Shift


15-1285687990
Штырлиц
2010-09-28 19:33
2011.01.30
Как определить что приложение загрузило GUI


15-1287572572
Сергей М.
2010-10-20 15:02
2011.01.30
TSSHClient (Synapse + SSL CryptoLib based)


15-1287145661
неокубинец
2010-10-15 16:27
2011.01.30
Acer или не Acer?


15-1287347344
Юрий
2010-10-18 00:29
2011.01.30
С днем рождения ! 18 октября 2010 понедельник





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский