Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.5 MB
Время: 0.012 c
14-87675
Игорь Шевченко
2003-02-11 11:38
2003.02.27
Сообщения компилятора об ошибках


1-87560
Checist [root]
2003-02-17 10:15
2003.02.27
Цвет ячейки в StringGrid


1-87471
Visit
2003-02-18 13:52
2003.02.27
Как в ObjectInspector е отобразить свойство?


1-87521
DJ_Sedoy
2003-02-17 02:28
2003.02.27
TBitmap


1-87546
Tolyan
2003-02-17 10:38
2003.02.27
Stack overflow




   Наверх