powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Пересечение пользователей
19 сообщений из 19, страница 1 из 1
Пересечение пользователей
    #32341809
$ergio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть в программе такая вещь:

Private ReceptItemsDC As New ADODB.Recordset
ReceptItemsDC.Open "SELECT " ...
"FROM ...
"WHERE .. ", DC, adOpenDynamic, adLockOptimistic, adCmdText

ReceptItemsDC.Fields("FullCost") = 100

ReceptItemsDC.UpdateBatch adAffectCurrent
'ReceptItemsDC.Update
ReceptItemsDC.Requery
ReceptItemsDC.MoveLast

База Аксесовская . При работе в сети - если делается это одновременно, то происходит пересечение пользователей.

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

чувствую,что дело в Requery. Хотя может и нет

Подскажите, что делать
Заранее благодарен.
...
Рейтинг: 0 / 0
Пересечение пользователей
    #32341816
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Что значит "добавится у одного пользователя"? Запись добавилась в таблицу, ну и хорошо. Где видно, что она добавилась у этого пользователя, а не у другого?
...
Рейтинг: 0 / 0
Пересечение пользователей
    #32341858
$ergio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
попробую обьяснить подробнее:
с одной базой работают два пользователя.
заносят рецепты. Если делается это одновременно, то когда добавлен из списка медикамент в этот рецепт (у каждого свой) и нажимаем кнопку "Ввод", то происходит следующее. Это мы отследили по дебаггеру.
Значит идут проверки, и когда все данные удовлетворяют (у каждого пользователя свои), доходим до Requery.
После этого у кого вперед произойдет это событие, тому копируются все медикаменты другого пользователя, и свои остаются.
А у другого, который позже начинает Requery рецепт сохраняется, но в нем нет медикаментов - они у первого пользователя.

Мож текст программы будет понятней:

Private Sub UpdateDrugList_Click()
Dim strTmp As String, varTmp(2) As Variant
Dim dblCorrect As Double, lOldRI_FullCost As Long
Dim IsItError As Boolean
IsItError = False
If DrgCode = 0 Then
MsgBox "Не введен медикамент", vbCritical, "Ошибка"
IsItError = True
AddMedical.SetFocus
End If
If Not IsNumeric(AmmountText.Text) Then
MsgBox "Не введено количество", vbCritical, "Ошибка"
IsItError = True
AmmountText.SetFocus
End If
If (CVar(AmmountText.Text) <= 0) Then
MsgBox "В поле ""КОЛИЧЕСТВО"" нужно ввести положительное число (Например: 54,67)", vbCritical, "Ошибка!"
IsItError = True
AmmountText.SetFocus
End If
' Call AmmountText_Validate(True)

If Not IsItError Then
'Basic глючит с типами, т.е иногда 1>1 и разница составляет в ~1e-15
' => пришлось ввести корректировочный член dblCorrect
dblCorrect = Abs(CDbl(AmmountText.Text) - CDbl(IAmmountText.Text))
If (dblCorrect > 0.00000001) Then dblCorrect = 0
'Чтобы к-во не больше остатка для случая постановки рецепта в очередь
If (CDbl(AmmountText.Text) > (CDbl(IAmmountText.Text) + TAmmount + dblCorrect)) And StackCheck.Value = vbUnchecked Then
MsgBox "Количество больше остатка", vbCritical, "Ошибка"
AmmountText.SetFocus
Exit Sub
End If

'Для нового рецепта
If UpdateType = False Then
If DrugsUpdateType = False Then 'Новая запись или корректируем старую
ReceptItemsDC.AddNew
End If
'Значения
If StackCheck.Value = vbUnchecked Then ReceptItemsDC.Fields("ItemCode") = NewItmCode
ReceptItemsDC.Fields("IDrugCode") = DrgCode
ReceptItemsDC.Fields("Ammount") = CDbl(AmmountText.Text)
ReceptItemsDC.Fields("RiOutPrice") = CCur(OutPriceText.Text)
ReceptItemsDC.Fields("ItemCode") = NewItmCode 'новый код остатков
ReceptItemsDC.Fields("SumForPeople") = CCur(SummChargeText.Text)
ReceptItemsDC.Fields("FullCost") = CLng(CDbl(SummaryText.Text) * 100)
ReceptItemsDC.Fields("IsUpdated") = False
rsBaseOperation.Fields("FullCost") = ReceptItemsDC.Fields("FullCost")
ReceptItemsDC.UpdateBatch adAffectCurrent
'ReceptItemsDC.Update
ReceptItemsDC.Requery
ReceptItemsDC.MoveLast
End If
'Для текущего рецепта
If UpdateType = True Then
'Новая запись или корректируем старую
If DrugsUpdateType = False Then
ReceptItemsDC.AddNew
lOldRI_FullCost = 0
Else
lOldRI_FullCost = ReceptItemsDC.Fields("FullCost")
End If
'Значения
If StackCheck.Value = vbUnchecked Then ReceptItemsDC.Fields("ItemCode") = NewItmCode
ReceptItemsDC.Fields("ReceptCode") = ReceptCode
ReceptItemsDC.Fields("IDrugCode") = DrgCode
ReceptItemsDC.Fields("ItemCode") = NewItmCode 'новый код остатков
ReceptItemsDC.Fields("RiOutPrice") = CCur(OutPriceText.Text)
ReceptItemsDC.Fields("SumForPeople") = CCur(SummChargeText.Text)
ReceptItemsDC.Fields("Ammount") = CDbl(CVar(AmmountText.Text))
ReceptItemsDC.Fields("IsUpdated") = True
ReceptItemsDC.Fields("FullCost") = CLng(CDbl(CVar(SummaryText.Text)) * 100)
ReceptItemsDC.Update 'должно быть в конце иначе перескакивает на др строчку и считатет х-ню
ReceptItemsDC.Requery
ReceptItemsDC.MoveLast
End If
End If
End Sub
...
Рейтинг: 0 / 0
Пересечение пользователей
    #32341879
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ReceptItemsDC.UpdateBatch adAffectCurrent - лишний (ты открыл набор как adLockOptimistic, а не adLockBatchOptimistic)
'ReceptItemsDC.Update - сними комментарий. Этого достаточно для сохранения
ReceptItemsDC.Requery - лишний
ReceptItemsDC.MoveLast - лишний

и создай единую транзакцию
...
Рейтинг: 0 / 0
Пересечение пользователей
    #32341882
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
автору кого вперед произойдет это событие, тому копируются
Блин. Копируются куда??? Это не одна таблица??? Я повторяю свой вопрос:

Где видно, что она добавилась у этого пользователя, а не у другого?
...
Рейтинг: 0 / 0
Пересечение пользователей
    #32341913
$ergio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нет - таблица одна - ReceptItems. и База общая.
Для одного рецепта в этой таблице существует столько же записей, сколько в нем медикаментов.
1 - пользователь - выбрал клиента, врача(неважно), затем выбирает медикаменты со склада - например Адельфан
2 - пользователь - выбрал другие данные, и затем выбирает медикамент - Анальгин.
Одновременно нажимаем - "Сохранить рецепт".
Доходим до Requery. 1 польз. нажал немного раньше 2-го:
После этого - в таблице ReceptItems появятся 2 записи для 1 пользователя.
Рецепт-1 адельфан
Рецепт-1 Анальгин
Для 2-го пользователя будет запись:
Рецепт-2 Пусто.

Что делать ?
...
Рейтинг: 0 / 0
Пересечение пользователей
    #32341933
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да блин ты наверняка с идентификаторами намудил хде-то
Сначала каким-нибудь DMax-ом получаешь новый, потом с ним и сохраняешь
Ясен перец что у тебя получается ситуация, когда два пользователя один и тот же ID-шник для основной таблицы получают, вот у тебя состав и уползает из одного в другой.
...
Рейтинг: 0 / 0
Пересечение пользователей
    #32341935
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
БЛИН!!!

авторпоявятся 2 записи для 1 пользователя
Что такое записи для 1 пользователя?????????? Чем они отличаются от записей для 2 пользователя?????????????????????
...
Рейтинг: 0 / 0
Пересечение пользователей
    #32342004
$ergio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
короче дело немного даже не так:
заносится рецепт, потом для него добавляются медикаменты которые отображаются в ДатаГриде. Нажимаем "Добавить", ставим кол-во,цена, стоим-ть. При нажатии на кнопку "Ввод" он должен отобразится в Гриде. Нажатие этой кнопки я и описал выше.

ReceptItemsDC.AddNew
ReceptItemsDC.Fields("IDrugCode") = DrgCode
ReceptItemsDC.Fields("Ammount") = CDbl(AmmountText.Text)
ReceptItemsDC.Fields("RiOutPrice") = CCur(OutPriceText.Text)
ReceptItemsDC.Fields("ItemCode") = ItmCode
ReceptItemsDC.Fields("SumForPeople") = CCur(SummChargeText.Text)
ReceptItemsDC.Fields("FullCost") = CLng(CDbl(SummaryText.Text) * 100)
ReceptItemsDC.Fields("IsUpdated") = False

ReceptItemsDC.UpdateBatch adAffectCurrent
ReceptItemsDC.Requery
ReceptItemsDC.MoveLast

в предыдущих сообщ. я ошибся - данные не сразу сохраняются в таблицу ReceptItems, а запоминаются и сохраняются позже при сохранении всего рецепта.

Но дело в том, что после вызова Requery - у одного пользователя в ДатаГриде отобразится и свой медикамент и медикамент, который вводится другим пользователем, а у того - пустая запись.

Мож я конечно плохо обьясняю.

>Лох Позорный
>Да блин ты наверняка с идентификаторами намудил хде-то
Я мож тебя неправильно понял. Ты имеешь ввиду, что идентификатор записи таблицы одинаковый получают одновременно два польз. ?

И еще - я понял, что Requery убирать нельзя (если только чем-ньть заменить), потому что когда его нет, в ДатаГриде отображается неполная информация - какие-то данные есть каких-то нету.
...
Рейтинг: 0 / 0
Пересечение пользователей
    #32342011
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Автор принципиально не отвечает на мой вопрос. Лох, ты сможешь объяснить мне, что ты понял?
...
Рейтинг: 0 / 0
Пересечение пользователей
    #32342023
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор писалЯ мож тебя неправильно понял. Ты имеешь ввиду, что идентификатор записи таблицы одинаковый получают одновременно два польз. ?
Судя по симптомам - да. А вообще это я у тебя должен спрашивать. Я ж не знаю как ты идентификаторы получаешь, мне NewItmCode мало что говорит.

2 Саныч
Насколько я понял, у него при одновременной работе двух юзеров состав одного нового документа (от 1-го юзера) влезает в состав другого нового документа (от 2-го юзера).
Непонятно что с шапками происходит. Ну да и хрен бы с ним.
...
Рейтинг: 0 / 0
Пересечение пользователей
    #32342037
$ergio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
еще раз :
когда нжимается кнопка ввода медикамента в рецепт, то
выполняется
ReceptItemsDC.AddNew
т.е. добавление новой записи в Рекордсет.
Полям присваиваются значения.
Причем есть поле "Code"-счетчик, значение которого никак не может совпадать с другой записью.

NewItmCode - это не идентификатор. Это код остатка медик-та - короче он не важен.

ReceptItemsDC.Fields("IDrugCode") = DrgCode - код медик-та
ReceptItemsDC.Fields("Ammount") = CDbl(AmmountText.Text) - кол-во
ReceptItemsDC.Fields("RiOutPrice") = CCur(OutPriceText.Text) - цена
ReceptItemsDC.Fields("ItemCode") = ItmCode - код остатка медикамента
ReceptItemsDC.Fields("SumForPeople") = CCur(SummChargeText.Text) - сумма
ReceptItemsDC.Fields("FullCost") = CLng(CDbl(SummaryText.Text) * 100) - полная сумма

ReceptItemsDC.UpdateBatch adAffectCurrent
ReceptItemsDC.Requery
ReceptItemsDC.MoveLast

И при Requery происходит пересечение пользователей. Причем если потом сохранить эти оба рецепта, то в эту общую базу занесутся такие записи:
1 рецепт и со своим медикаментом и с медикаментом 2 рецепта
а второй так и будет пустым.
короче лажа.
...
Рейтинг: 0 / 0
Пересечение пользователей
    #32342057
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>короче лажа.

Да. У тебя лажа. Полная.

А как таблицы Рецепт и Медикамент связаны?
...
Рейтинг: 0 / 0
Пересечение пользователей
    #32342058
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да ептттттттты пальцем можешь показать где у тебя происходит установка связи "рецепт"-"медикамент"???
...
Рейтинг: 0 / 0
Пересечение пользователей
    #32342111
$ergio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
короче
ReceptItems - это и есть медикаменты рецепта.
для понятности приведу поля этой таблицы:
Code - Счетчик
receptCode - Код для связи с табл. Recept(табл. хранения рецептов)
ItemCode - Код для связи с табл. Items (табл. остатков)
DrugCode - Код медикамента
OutPrice - Цена
Ammount - Кол
FullCost - Стоим-ть полная
SumForPeople - Стоим-ть

Если есть в рецепте два медик-та - то в это табл. и будет две записи.
и ReceptCode - будет в обоих одинаков.

Когда выберется из КомбаБокса - медикамент, то его код присвоится DrugCode,
и остальные поля также по связям с Items(остатки).
DrgCode = ItemDC.Fields("DrgCode")
DrugNameText.Text = ItemDC.Fields("LongName")
IAmmountText.Text = ItemDC.Fields("Ammount")
OutPriceText.Text = ItemDC.Fields("OutPrice")
IFullCostText.Text = ItemDC.Fields("IFullCost")

И через эти переменные потом присваиваются значения для ReceptItemsDC.
Только я не понимаю - зачем вы это спрашиваете.
Дело явно не в них.
Тут все дело в "Методах обновления данных". Update, Requery и т.д.
...
Рейтинг: 0 / 0
Пересечение пользователей
    #32342129
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все. Это не лечится.
Меняй профессию.
...
Рейтинг: 0 / 0
Пересечение пользователей
    #32342194
фыыф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Перевожу с русского на :

Вас спрашивают, откуда Вы берете значение переменной ReceptCode, которое присваивается в строке:

ReceptItemsDC.Fields("ReceptCode") = ReceptCode

!Ибо поиск по текущей странице не дает представления о СПОСОБЕ получения этой величины ВАШЕЙ процедурой. А результат, описанный Вами однозначно указывает, что вы присваиваете обоим наборам медикаментов (у обоих пользователей) ОДИН И ТОТР ЖЕ КОД ReceptCode.

Все остальное не имеет отношения к проблеме.
...
Рейтинг: 0 / 0
Пересечение пользователей
    #32342224
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2фыыф
>Все остальное не имеет отношения к проблеме.

А как же хранение в таблице ВыписанныеРецепты полей
FullCost - Стоим-ть полная
и на%%я связь с таблицей Остатков (ItemCode)
...
Рейтинг: 0 / 0
Пересечение пользователей
    #32342316
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эк вас торкнуло от этих медикаментов
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Пересечение пользователей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]