Member 13444338 Ответов: 1

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


я новичок в программировании, делая свой первый проект с помощью vb.net и доступ. я пытаюсь разработать проект, в котором данные пациентов добавляются с разных счетчиков. то, что я разработал, работает нормально, когда только один счетчик добавляет данные в базу данных, но когда два счетчика обращаются к одной и той же базе данных и пытаются сохранить запись, это дает ошибку первичный ключ не может быть дублирован.

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

в многопользовательской среде оба оператора генерируют один и тот же номер пациента. когда они нажимают кнопку "новая запись", оба видят одну и ту же последнюю сохраненную запись. при сохранении записи один оператор успешно сохраняет запись, но другой оператор получает ошибку дубликата первичного ключа.

Пессимистические и оптимистические замки не работают для меня, или я не понимаю, как их использовать.

RSS как новый объект adodb.Записей RSS-каналов.Открыть(ул. шарнир равных угловых скоростей, объект adodb.CursorTypeEnum.adOpenDynamic, объект adodb.LockTypeEnum.adLockPessimistic)

плз кто нибудь направьте меня

Что я уже пробовал:

я попытался решить эту проблему, спасая пациента нет. в другой переменной oldPatientno и beore сохранение записи проверяется, есть ли какие-либо изменения в базе данных, если да, то регенерации пациента нет. но это не работает

Richard Deeming

Если вы используете .NET, не используйте древнюю и устаревшую библиотеку ADODB. Переключитесь на использование ADO.NET[^] вместо.

1 Ответов

Рейтинг:
2

OriginalGriff

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

Вместо этого используйте многопользовательскую систему баз данных, такую как Sql Server или MySql, которая предназначена для работы с несколькими одновременными пользователями.

При условии, что вы написали свой код правильно, это должен быть просто случай использования SqlConnection вместо OdbcConnection, SqlCommand вместо OdbcCommand и так далее - фактические команды SQL SELECT, INSERT и UPDATE должны нуждаться в небольших изменениях.

Но пока вы это делаете, измените дизайн своей БД. Никогда не используйте "последняя запись плюс один" для предварительной генерации идентификатора - вместо этого используйте столбец идентификатора в вашей БД, и пусть компонент database engine разберется с уникальным значением для вас - вам не нужен идентификатор до того, как данные будут вставлены в БД, поэтому предварительная генерация идентификатора всегда является рецептом неприятностей, поскольку она всегда создает проблемы, которые вы видите. Блокировка здесь не поможет, действительно, она вызовет больше проблем, а не меньше.