Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.02.27;
Скачать: CL | DM;

Вниз

Многопользовательский режим   Найти похожие ветки 

 
GAlexis ©   (2003-02-10 16:14) [0]

Уважаемые мастера! Возникла такая проблема. Есть БД написанная как однопользовательская. Теперь надо двухпользовательскую. Подключил с другого компьютера, вроде бы все заработало, но как оказалось не правильно. Только что введеная запись одним пользователем забивается следом введеной записью другого пользователя. Что не так? Помогите пожалуйста, очень надо


 
Anatoly Podgoretsky ©   (2003-02-10 16:23) [1]

Так это особенность многопользовательских баз, кто последний тот и прав.


 
GAlexis ©   (2003-02-10 16:39) [2]

Так и что же делать? Я то думал, что если Post сделан, то все, записано. А тут получается что разные пользователи к одному и тому же месту прилепляются в БД


 
BIS ©   (2003-02-10 17:01) [3]

Еще раз подтверждаем, что так оно и происходит. Кто последним был на Post-у, тот и записал.
А если не хочешь, чтоб пользователи к одному лепились, так и пиши прогу так, чтобы они свои записи выбирали.


 
galexis ©   (2003-02-10 17:06) [4]

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


 
sniknik ©   (2003-02-10 17:10) [5]

Переходи на SQL, если записи сохранять инсертами, то таких проблем не будет. Будут другие. :-)))


 
alexander_ua   (2003-02-10 17:17) [6]

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


 
galexis ©   (2003-02-10 17:18) [7]

Да, переход на SQL в плане есть. Но работа стоит, начальство требует. А такой переход требует время.


 
galexis ©   (2003-02-10 17:24) [8]

С редактированием проблем нет. Есть проблема когда используется Append...Post. Следующий пользователь делает тоже, но в итоге получается так, как будто он делает Edit..Post только что введеной записи.


 
MsGuns ©   (2003-02-10 17:32) [9]

>galexis © (10.02.03 17:24)
>С редактированием проблем нет

Похоже, есть проблемы с правильно продуманной моделью данных.
Если возможность ОДНОВРЕМЕННОГО редактирования одной записи считается нормальной, то БД спроектирована безобразно. И не важно, сколько юзеров ее юзают, - даже если всего один.


 
sniknik ©   (2003-02-10 17:34) [10]

можно сделать так (проще всего помоему, на пока не SQL)

добавляеш запись ставиш ей какой нибудь маркер "запись временная" и ID. Тут же Post. Редактируеш уже созданную и записаную, если откат придется удалить (или метка "удалено" для повторного использования). В таком варианте от Append до Post (первого) будет доля секунды, вряд ли юзера пересекутся в это время.


 
galexis ©   (2003-02-10 17:47) [11]

У меня и так доли секунды от Append до Post поскольку все делается по нажатию кнопки Сохранить. Дело то вот в чем. Один пользователь сохранил запись, она физически есть в базе. После нажатия Кнопки Сохранить вторым пользователем, запись замещает только что введеную. Отличие у них друг от друга в том, что они работают с поразному отфильтрованной одной и той же таблицей. Идет регистрация документов. Одна регистрирует Входящие, другая Исходящие.


 
Соловьев ©   (2003-02-10 17:54) [12]

А как ты для каждой записи генериш ID? или у тебя его нет?


 
galexis ©   (2003-02-10 18:06) [13]

ID двойной. Код документа и Номер документа этого типа по порядку (в разных полях таблицы). Когда нужно ввести документ, таблица фильтруется по нужному типу - по коду документа, и затем к номеру последнего введенного документа прибавляется 1. У другого пользователя та же таблица отфильтрована по другому коду документа, далее то же самое. Что здесь не так?


 
MsGuns ©   (2003-02-10 18:07) [14]

И как же это так получается, что и ВХОДЯЩЕМУ, и ИСХОДЯЩЕМУ документу (ИМХО, разным сущностям БД) соответствует ОДНА запись БД ?


 
Соловьев ©   (2003-02-10 18:11) [15]

Я никогда не работал с Append.
Делай Insert:
with Table1 do
begin
Insert;
FieldByName("NameDoc").AsString := Edit1.Text;
...
// Если используешь DBEdit, то код выше не нужен
Post;
end;


 
galexis ©   (2003-02-10 18:13) [16]

Ну как же, пара "код документа + номер документа являются уникальными"! Предположим Входящий с кодом 04 и номером 100 (номер документа 04-100) и Исходящий с кодом 05 и номером 100 (номер документа 05-100). Повторений нет.


 
galexis ©   (2003-02-10 18:16) [17]

Вот так у меня и написано, но вместо Inset стоит Append, что тоже самое, я проверял да и написано это.


 
Соловьев ©   (2003-02-10 18:21) [18]

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


 
MsGuns ©   (2003-02-10 18:31) [19]

>Соловьев © (10.02.03 18:21)

Если он определил для ключевого поля автоинкремент, то при вставке (по барабану - Insert или Append), но до постинга, Парадокс им вполне может вернуть ОДИНАКОВОЕ значение поля ! При такой ситуации и возникнет этот самый глюк ! А вообще, ИМХО, без структур таблиц и хотя бы примерном описании средств (компонент, обработчиков и т.д.) доступа к ним беседа эта напоминает поиски черной кошки в темной комнате.


 
Соловьев ©   (2003-02-10 18:33) [20]


> MsGuns ©
...

> Парадокс

А я думал мы про FoxPro :(


 
Соловьев ©   (2003-02-10 18:34) [21]

Попробую стать провидцем:
Table->DataSouce->DBGrid
Доступ через BDE.


 
MsGuns ©   (2003-02-10 18:36) [22]

>Соловьев © (10.02.03 18:33)

Действительно...;(


 
galexis ©   (2003-02-11 12:40) [23]

До меня тут кажется дошло. Надо перед Append делать Refresh. А блокировка записей производится Edit. Если кто-то редактирует, то никто другой не может.
А BDE я вообще не пользуюсь. Использую Vista Apollo 5. DBGrid тоже не использую и вообще с приставкой DB ничего не использую.



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

Текущий архив: 2003.02.27;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.019 c
3-87297
vladimirS
2003-02-10 06:56
2003.02.27
программный вызов isql


6-87597
Help me
2002-12-23 18:41
2003.02.27
Unix разделители


8-87572
Helg
2002-11-12 19:44
2003.02.27
Как незаметно перерисовать форму?


1-87377
sl888
2003-02-17 16:20
2003.02.27
ColorBox в RGB


3-87345
Calm
2003-02-11 10:38
2003.02.27
Можно ли возвращать из ХП строку, содержащую символ #13?