ADO, блокировка записей , Access

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
geba47
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 10.11.2004 (Ср) 12:28

ADO, блокировка записей , Access

Сообщение geba47 » 18.10.2005 (Вт) 14:34

Привет всем! Пролейте свет на следующую проблему. Есть сервер, на котором лежит БД Access. С нескольких компьютеров к ней оброщаются клиентские программы. В БД есть таблица "MySclad", в которой записывается Дата и Время создания накладной (при открытии этой накладной). Это для того, чтобы в один момент времени мог только один пользователь открыть накладную. При закрытии накладной, запись о времени создания накладной удаляется и соответственно с другого компа можно просмотреть и т.д.

Public Sub ClearScladDate()
Dim rs As Recordset
Set rs = New Recordset
SQL = "SELECT * FROM MySclad WHERE " & _
" MyDate=#" & Format$(ScladDate, "mm\/dd\/yyyy") & _
"# AND MyTime=#" & Format$(ScladTime, "hh:mm:ss") & "#"
rs.Open SQL, cn, adOpenStatic, adLockOptimistic
rs.Delete
rs.Close
Set rs = Nothing

ScladDate = sEmpty
ScladTime = sEmpty
End Sub

И в коде при попытке открыть накладную идет проверка:

Set rs = New Recordset
SQL = "SELECT * FROM MySclad WHERE " & _
" MyDate=#" & Format$(grdRash.Columns(1).Value, "mm\/dd\/yyyy") & _
"# AND MyTime=#" & Format$(grdRash.Columns(6).Value, "hh:mm:ss") & "#"
rs.Open SQL, cn, adOpenStatic, adLockOptimistic
If rs.RecordCount > 0 Then
rs.Close
Set rs = Nothing
Exit Sub
Else
rs.AddNew
rs!MyDate = grdRash.Columns(1).Value
rs!MyTime = grdRash.Columns(6).Value
ScladDate = grdRash.Columns(1).Value
ScladTime = grdRash.Columns(6).Value
rs.Update
End If
rs.Close
Set rs = Nothing


Так проблема в том, что при первой проверке все прекрасно работает. После нескольких проверок (закрытия и открытия накладных-- удаления и создания записей в таблице) проверка не срабатывает. Хотя в таблице есть запись, но запрос показывает rs.RecordCount =0. Может чтото в блокировке, хотя не думаю. Пробовал на двух компьютерах в сети, и на одном, запуская два экземпляра приложения.Никак не пойму в чем дело. Помогите найти причину. Спасибо.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 18.10.2005 (Вт) 14:57

А чего ради запрещать нескольким юзерам смотреть эту несчастную накладную? Может пущай себе смотрят ее хоть до посинения - криминала-то в этом никакого нет... :lol:
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

geba47
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 10.11.2004 (Ср) 12:28

Сообщение geba47 » 18.10.2005 (Вт) 15:11

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

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 18.10.2005 (Вт) 15:31

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


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

Ты сравниваешь со временем, а представь, к примеру что ты открыл накладную и компьютер повис. После этого сможешь ее открыть или в базу ручками придется лезть? А если два юзера открыли две накладных в одно и то-же время? А если другой юзер успел ее открыть/закрыть несколько раз? Ты представляешь работу своей программы в этих ситуациях?

Если на то пошло, то чтобы убрать описанный тобой "глючок" (хотя другие проблемы останутся) - пиши вместо даты и времени ID-шку накладной.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

geba47
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 10.11.2004 (Ср) 12:28

Сообщение geba47 » 18.10.2005 (Вт) 15:52

ID накладной и является время и дата ее написания. Не номер же накладной использовать (вчера тоже была накладная с таким номером). А открывают ее не только для просмотра, но и для редактирования при необходимости( администратор) и для расхода( складчики) И еще ситуация, без запрета открытия одновременно одной накладной, откроют сразу оба складчика и начнут расход в одну накладную. Было уже такое. И вместо , например, 10 шт отсканировали 19. Вот тогда и приходится в базе лазить и все IMEI испровлять. У нас оптовый магазин и складчикам постоянно кричать я сканирую 5 накладную , а я 7 надоело и они ошибаются. Ну а на счет того, что если прога некоректно закроется , то в базе останется запись и придется ее ручками удалять , ты прав. Если есть предложения , с благодарностью выслушаю.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 18.10.2005 (Вт) 15:58

geba47 писал(а):ID накладной и является время и дата ее написания. Не номер же накладной использовать (вчера тоже была накладная с таким номером).


А у нас вот две машину (ЗИЛ и Москвич) имели один и тот-же ГАИ-шный номер...

Вообще-то люди в качестве ID_шки обычно используют поле типа счетчика.

geba47 писал(а): А открывают ее не только для просмотра, но и для редактирования при необходимости( администратор) и для расхода( складчики) И еще ситуация, без запрета открытия одновременно одной накладной, откроют сразу оба складчика и начнут расход в одну накладную. Было уже такое.


И при чем тут открытие? Проводи расход в транзакции.

geba47 писал(а): И вместо , например, 10 шт отсканировали 19. Вот тогда и приходится в базе лазить и все IMEI испровлять. У нас оптовый магазин и складчикам постоянно кричать я сканирую 5 накладную , а я 7 надоело и они ошибаются.


Вах! Мне бы тоже надоело! :lol:

geba47 писал(а): Ну а на счет того, что если прога некоректно закроется , то в базе останется запись и придется ее ручками удалять , ты прав. Если есть предложения , с благодарностью выслушаю.


Ну что сказать... Целиком все описывать я как-то не берусь - может кто другой решится - думаю твоя проблема уже многим понятна...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

geba47
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 10.11.2004 (Ср) 12:28

Сообщение geba47 » 18.10.2005 (Вт) 16:13

Ты не знаком ни с программой , ни со спецификой работы магазина , а умничаешь. Счетчик не подходит -- бывают, видители, возвраты, и номер накладной с самой накладной удаляются( если заказ сегодняшний) И я задал конкретный вопрос-- почему при наличии записи в таблице, rs.RecordCount = 0 ? Код вверху.

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

Сообщение alibek » 18.10.2005 (Вт) 16:17

А ты не знаком с основами, а критикуешь.
Если ты не понял, что тебе сказали, лучше переспроси.

Во-первых, рекордсет должен быть клиентским.
Во-вторых, причем тут счетчик и номер накладной? Счетчик используется для внутренних целей. Если ты на значение счетчика завязываешь логику, то ты сам себе злобный буратино.
Lasciate ogni speranza, voi ch'entrate.

geba47
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 10.11.2004 (Ср) 12:28

Сообщение geba47 » 18.10.2005 (Вт) 16:26

Счетчик я вообще не использую, это Андрей предлогает их использовать.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 18.10.2005 (Вт) 16:26

geba47 писал(а):Ты не знаком ни с программой , ни со спецификой работы магазина , а умничаешь.


Со спецификой твоей программы я действительно не знаком. А оно мне надо? Зато других я знаю довольно много...

geba47 писал(а): Счетчик не подходит -- бывают, видители, возвраты, и номер накладной с самой накладной удаляются( если заказ сегодняшний)


Ну и что?

geba47 писал(а): И я задал конкретный вопрос-- почему при наличии записи в таблице, rs.RecordCount = 0 ? Код вверху.


Да потому что тебе теорию работы с базами с азов учить нужно.

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

Изначально кривой подход к программе влечет за собой кучу проблем, поверь...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

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

Сообщение alibek » 18.10.2005 (Вт) 16:30

Andrey Fedorov писал(а):Скорей всего из-за того что поле даты/времени - это все-же плавающее число. Оно просто отображается как дата/время. Ну и при поиске соответствено не всегда может найтись из-за ошибки округления времени.

Да нет, просто рекордсет серверный.
Но он идет своим путем, невзирая на многолетние наработки других разработчиков.
Lasciate ogni speranza, voi ch'entrate.

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

Сообщение alibek » 18.10.2005 (Вт) 16:35

geba47 писал(а):Счетчик я вообще не использую, это Андрей предлогает их использовать.

Правильно предлагает.
Только он не предлагает его использовать в качестве номера накладной.
Lasciate ogni speranza, voi ch'entrate.

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 18.10.2005 (Вт) 16:47

Ну, и мой маленький вклад в разгром.

Хавать шаренную базу по сети тусовкой - лажа полная!
Ибо, в один прекрасный момент базы... не будет)))
Как по тех соображению, так и по HR
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru


Вернуться в Visual Basic 1–6

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

Сейчас этот форум просматривают: Google-бот, SemrushBot и гости: 123

    TopList