Блокировка при определении кол-ва записей.

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
oif
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 22.01.2009 (Чт) 18:11

Блокировка при определении кол-ва записей.

Сообщение oif » 21.01.2010 (Чт) 21:13

Народ помогите.
Есть база mdb.
С нескольких компов делается запрос к ней.Допустим добавление записи с номером=Кол-во записей в базе +1.
Как сделать так чтобы при одновременном нажатии "Добавить" не создавались 2 записи с одинаковым номером,а у них были разные номера.
Т.е сделать блокировку пока не будут введены данные одним пользователям 2 пользователь не мог сделать запрос на кол-во записей.
Повторяю срабатывание происходит одновременно.
Вот код.
Код: Выделить всё
Dim conn As ADODB.Connection
Set conn = New ADODB.Connection
connString = "Provider= Microsoft.Jet.OLEDB.4.0;Data Source= " & putfile & ";Jet OLEDB:Database Password=7777777"
conn.Open connString
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
With rs
.ActiveConnection = conn
.Source = "dan"
.CursorType = adOpenDynamic
.LockType = adLockOptimistic
.Open "SELECT * FROM dan"
End With
IDz = rs.RecordCount + 1
rs.AddNew
rs.Fields(0) = Str(IDz)
rs.Fields(1) = Text1.Text
....
rs.Update
rs.Close

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Блокировка при определении кол-ва записей.

Сообщение alibek » 21.01.2010 (Чт) 23:40

Никак.
Меняй логику.
Пусть номер присваивает сама СУБД.
Lasciate ogni speranza, voi ch'entrate.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Re: Блокировка при определении кол-ва записей.

Сообщение Twister » 22.01.2010 (Пт) 13:58

Да, тут надо бы сделать что-то вроде сиквенса.
Создай таблицу, в ней одна запись и столько полей, сколько таких псевдо-сиквенсов ты хочешь юзать.
В самом Access'е на VBA напиши функцию, которая будет выдавать новый номер отталкиваясь от того, что записано в этой таблице. И тут же обновлять значение в ней. Т.е. два одинаковых запроса типа
select GenUniqId()
from <тут чуть не написал dual :lol: >
никогда не вернут одинаковых значений.
А я все практикую лечение травами...

oif
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 22.01.2009 (Чт) 18:11

Re: Блокировка при определении кол-ва записей.

Сообщение oif » 24.01.2010 (Вс) 11:50

Меняй логику.
Пусть номер присваивает сама СУБД.

Я пробывал ставить счетчик,но при удаленнии записи,счетчик продолжает считать дальше.Мне это не удобно.

Да, тут надо бы сделать что-то вроде сиквенса.
Создай таблицу, в ней одна запись и столько полей, сколько таких псевдо-сиквенсов ты хочешь юзать.
В самом Access'е на VBA напиши функцию, которая будет выдавать новый номер отталкиваясь от того, что записано в этой таблице. И тут же обновлять значение в ней. Т.е. два одинаковых запроса типа

Как я понял хранить кол-во записей в новой таблице?А если опять одновременно два запроса будет?

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Re: Блокировка при определении кол-ва записей.

Сообщение VVitafresh » 24.01.2010 (Вс) 12:00

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


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11

    TopList