Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как удалять запись по паролю? (2003)
 
 автор: NaBar   (13.08.2009 в 20:54)   личное сообщение
 
 

Нужно реализовать следующее: удалять запись из таблицы только по паролю. То есть при любой попытке стереть строку должен запрашиваться пароль и только знающий его человек мог совершить удаление. Или это впринципе невозможно?

  Ответить  
 
 автор: час   (13.08.2009 в 21:36)   личное сообщение
 
 

http://hiprog.com/index.php?option=com_content&task=view&id=251661606&Itemid=35

пароль спроси при входе в базу .
открывая форму задай условие
если пароль верен откройся в обычном режиме
если не верен откройся только для чтения

  Ответить  
 
 автор: NaBar   (16.08.2009 в 22:57)   личное сообщение
 
 

Встречала Вашу статью
http://hiprog.com/index.php?option=com_content&task=view&id=251661592&Itemid=35
(Простая авторизация средствами ACCESS от 30 мая 2008), вышла на нее через Яндекс.
Пробежала по диагонали - показалось полезным, но не совсем подходящим, занесла в Избранное на всяк.случай :)

А тут и с самим автором встретиться довелось! Спасибо Вам!

  Ответить  
 
 автор: osmor   (14.08.2009 в 10:45)   личное сообщение
 
 

в форме есть события до удаления, удаление, после удаления
используйте их.
мне кажется есть подводные камни...
вот например мне нельзя удалять строку, а изменять ее я могу?
тогда могу все поля заполнить пустыми строками и нулями....
или изменить на полный бред.

  Ответить  
 
 автор: Гоблин   (15.08.2009 в 00:00)   личное сообщение
14 Кб.
 
 

Если требуется удалить выбранную, то гоблин способ покатит. Кста код можно сократить до указания одного поля счетчика.
Где-то читал про способ очистить таблу вовсе

CurrentDb().Execute ("delete * from имятабла") 'очистить таблу на
DoCmd.Quit 'закрыть приложение на

Такой код точно паролить на.

  Ответить  
 
 автор: NaBar   (16.08.2009 в 22:54)   личное сообщение
 
 

Работать с базой будут "девочки из ресепшн" :-) Редактировать поля (кроме Индекса) можно, но все поля обязательные и после заполнения их уже на ноль не изменишь. А вот чтобы удалить ошибочную запись или отмененную по просьбе клиента - это только через управляющего, которого на 5 сек подозвали, он кнопку нажал и все. Поэтому вариант с паролем на входе слишком сложен: это выходить, заходить снова по паролю, потом опять выходить и перезаходить без пароля.
Была идея сделать так: при нажатии на кнопку "удалить" - прочитать данные из текстового поля "Индекс удаляемой строки" и "Пароль". Потом проверить - есть ли такой пароль (хранятся в табл "Пароли") с помощью DoCmd.RunSQL, но никак не могу подобрать нужный запрос. Самой выборки ведь не надо, нужен лишь булевский результат - найден или нет. И уже при проложительном результате удалять запрашиваемую строку. Удаление работает, а пароль никак не подключу :-(

Убила пару вечеров на перебор вариантов и поиск примеров. Похоже, таким образом это не раелизовать. Буду искать примеры, как сделать через Recordset.

  Ответить  
 
 автор: NaBar   (16.08.2009 в 23:01)   личное сообщение
 
 

Все поля заполняются только из списка заранее заданных. В свободной форме только необязательный комментарий вводится. Изменяются только пустые строки, а если уже что-то было выбрано, то менять можно только - опять же - вызвав управляющего. Это как раз его придумка: защита от несанкционированного удаления оплаченных клиентом процедур, с тем, чтобы работник денюшку в карман себе не забирал мимо кассы.

  Ответить  
 
 автор: Гоблин   (16.08.2009 в 23:48)   личное сообщение
 
 

Ну коли будет таблица, наверное в 1 строку с полем [Пароль], без права добавления.
То я бы создал запрос с полем типа Выражение:[Введи пароль]
При запуске запроса вылезет диалоговое окно куда надо ввести пароль.
Далее в этом запросе в соседнем поле создал бы Сравнение:IIF([Пароль]=[Выражение];1;0)
То бишь коли пароль верен, то при срабатывании запроса в этом поле вылезет 1, а коли нет, то 0
Если все это прописать в VBA то дальнейшие действия через IF можно спрограммировать.
Будет время сделаю. Кстати идея ведь блин.

PS: Может не стоит админа за каждую грамматическую ошибку гонять? В данный момент мучаю одну базку. Так в ней реализована блокировка по дате. Т.е. Сегодня при вводе инфы можно удалять и редактировать. А завтра - поезд ушел. В некоторых формах разрешаю 3 дня на размышление, далее -
With Me.Form
.AllowDeletions = False

  Ответить  
 
 автор: NaBar   (17.08.2009 в 00:34)   личное сообщение
 
 

Гоблин, спасбо за идею! Ща спать лягу, пообдумываю как это попробовать. А насчет PS - задача до слез смешная (ну раз надо заказчику- значит надо!) - малюсенький журнальчик на один день: регистратор просто записывает к кому из работников приходят клиенты и за какими услугами (т.е. списки работников и услуг - заранее определены, грамматические ошибки исключаются) . А управляющий вечером сравнивает записи с наличными в кассе. Запрет удаления нужен, чтобы пресечь оплату мимо кассы - чтобы никто из работников не мог удалить услугу. Тут мне видятся всякие обходные маневры - типа подговорить регистратора не вносить запись вообще, или еще что-нить. Но решить такую штуку задачи пока не поступало. А самое смешное - вечером управляющий хочет все удалять. "А вдруг фискальный контроль?" :)

  Ответить  
 
 автор: Denis V.   (17.08.2009 в 12:44)   личное сообщение
 
 

Сделайте управляющему отдельный интерфейс!

  Ответить  
 
 автор: NaBar   (17.08.2009 в 20:08)   личное сообщение
 
 

Что Вы имеете ввиду? Назначить логин и пароль и перед входом их запрашивать?

  Ответить  
 
 автор: Гоблин   (17.08.2009 в 20:27)   личное сообщение
 
 

Скорее всего отдельную форму для админа, которая будет открываться с разрешением удаления. Но тоже по паролю.
А чем мое предложение плохо? В форме удаление запрещено, изменение тоже можно запретить. Удаляет запрос на удаление при выборе записи. Обязательно что ли в таблу пароль вставлять?
Встрой в программу несколько паролей меняющихся в зависимости от даты. Или генератор паролей с петушиным словом, зависящим от даты, квартала, года и титула пра-пра-бабушки любимой админа морской свинки. Вычислять пароль будет админ по определенной форуле или таблице... Там пароль этот получится меняться будет хоть каждую неделю.

  Ответить  
 
 автор: Гоблин   (17.08.2009 в 21:06)   личное сообщение
23 Кб.
 
 

Вот попробуй так. На мое программерство не смотри, но примерная мысля будет ясна.
Обвесь это всякими "Сменить пароль", "Подтвердить пароль", маску ввода *** что бы было и т.д.

  Ответить  
 
 автор: NaBar   (17.08.2009 в 22:24)   личное сообщение
 
 

Гениально!!!!! :) Супер идея! Мне даже в голову не пришло бы такое!А главное - как просто! Выводить в форму и просто сделать значение невидимым!!! :) Спасибо огромнейшее-преогромнейшее!!!

  Ответить  
 
 автор: Гоблин   (17.08.2009 в 22:49)   личное сообщение
 
 



Учусь вот понемногу чему-нибудь и как попало.

  Ответить  
 
 автор: zhebov_andrey   (18.08.2009 в 09:11)   личное сообщение
66 Кб.
 
 

Вот, тоже сделал на основе того что Гоблин придумал для пароля...

PS пароль-123456 (кому под Shift'ом лень зайти)

  Ответить  
 
 автор: Гоблин   (18.08.2009 в 09:53)   личное сообщение
 
 

Ну коли там все удаляет, то свойства формы можно было и не менять. Но ей похоже надо выборочные строки удалять и менять. Этот код должен срабатывать в случае неправильно введенного пароля.
Надо было запросик поставить на действие удалить. Что бы все удаленное и изменяемое в отдельную таблу заносил с фиксацией даты изменения. Для проверяющих финансистов и налоговиков.

  Ответить  
 
 автор: zhebov_andrey   (18.08.2009 в 11:40)   личное сообщение
 
 

А можно подробнее про запрос, а то мысля такая была, а как реализовать не пойму???

  Ответить  
 
 автор: Гоблин   (18.08.2009 в 13:21)   личное сообщение
23 Кб.
 
 

Ну если касается удаления записей, то надо запрос на добавление состряпать. При событии удаления запускать его. Таблу "Удаленое" создать и после удаления записей открыть ее.
Если изменяем записи, то можно запрос запускать тот же, только на другое событие запускать.
(изменение, внесены изменения). Можно развить тему. Поледействие в табле "Удаленное" поставить и запрос что бы вносил "Изменено" или "Удалено". Дата фиксируется автоматом по умолчанию.
Кароче примерно так. (для удаления)

  Ответить  
 
 автор: Гоблин   (18.08.2009 в 13:41)   личное сообщение
20 Кб.
 
 

Ну давай тему развивать. Итак при удалении в таблу "Удаленное" внесется удаляемая запись с пояснением "Удалено". При изменении записи соответствующая запись будет внесена с пояснением "Изменено".
Токмо несколько записей сразу удалять нельзя. И еще. При наборе пароля или нажатии кнопки надо запретить добавлять запись. Ну типа
With me.form
.allowAdditions=false

Ну или нечто в этом роде, что бы не дополняли в этом виде. Пробуй. Может что и понравится.
И отключи все возможные сообщения акса на добавление, предупреждения и прочее. Можно программно. Где-то такое видел. Копаться лень.

  Ответить  
 
 автор: kot_k_k   (18.08.2009 в 14:00)   личное сообщение
 
 

Вопрос - а как распознать что удаляется более 1 записи сразу?

  Ответить  
 
 автор: snipe   (18.08.2009 в 14:05)   личное сообщение
 
 

Посчитать DCount -ом

  Ответить  
 
 автор: Гоблин   (18.08.2009 в 14:20)   личное сообщение
 
 

Ну тогда как реализовать это в запросе. Если выделено 5 записей и удалены. Что бы запрос на добавление все 5 внес в таблу удаленных записей. Нечто связанное с Select?

  Ответить  
 
 автор: kot_k_k   (18.08.2009 в 14:22)   личное сообщение
 
 

К чему Dcount цеплять? Каким образом обрабатываются выделенные записи на форме? ЧЮть подробнее. Плизз

  Ответить  
 
 автор: Гоблин   (18.08.2009 в 14:23)   личное сообщение
 
 

Наверное SelectCount.

  Ответить  
 
 автор: NaBar   (18.08.2009 в 14:23)   личное сообщение
 
 

Ого! Целая дискуссия! :) Ща почитаю.
Гоблин, помоги плиз еще чуток :) Стала реализовывать идею со скрытым выводом пароля на форму. Ты пишешь if Par = Me.Пароль
В данном случае Пароль - это имя поля? Или это имя столбца в таблице Пароль, т.е. данные? Видимо я в свойствах не всё, что нужно, отметила, т.к. ругается и не дает доступа :-(

  Ответить  
 
 автор: Гоблин   (18.08.2009 в 14:37)   личное сообщение
 
 

Акбар, вот как по логике гоблин-программерства. (без правил) По умолчанию в форме разрешены только добавления. Удаления и изменения запрещены. Источник строк - табла Пароли. В ней скрыто поле Пароль. Поле0 - свободное, куда вводим пароль.
Dim Par As String 'Объявляем переменную
Par = Me.Поле0 'Присваиваем ей то, что ввели
If Par = Me.Пароль Then 'Если значение переменной = тому, что в скрытом поле из таблы, то выводим сообщение
MsgBox ("На кнопку закрыть не нажимай. Корректируй записи. По закрытии формы1 корректура будет невозможна.")
With Forms![Таблица1].Form ' в свойствах формы Таблица1 меняем свойства
.AllowDeletions = True 'Разрешаем удаление
.AllowEdits = True 'Разрешаем изменения
End With 'Заканчиваем свойства
Else 'Если пароль неверен, то выводим сообщение
MsgBox ("В данном случае пароль Плут. Введи его для удаления и изменения записей в форме Таблица1")
Ну еще можно было бы типа
Me.Поле0.Setfocus
Me.Поле0="" 'Ну типа поставить фокус в поле ввода и очистить его

End If
Так как источник строк формы таблица Пароли, то поле пароль - в нее выведено и скрыто. Оно так и будет называться.

  Ответить  
 
 автор: NaBar   (18.08.2009 в 14:45)   личное сообщение
 
 

Это я все поняла. У меня отчего-то скрытый пароль не выводится. То есть если я в свойстве поля пропишу "вывод на экран = да", то в окошке появляется #Имя? вместо нужной записи из таблицы Пароли. Правда я вывожу скрытый пароль не в отдельную форму, а на общую, где журнал с записями, которые и надо редактировать.

В области данных - сам журнал, а в Примечании формы - поле для ввода пароля, поле для ввода номера удаляемой строки, кнопка для удаления одной строки и кнопка для удаления всего журнала. И там же скрыто поле с настоящим паролем.

  Ответить  
 
 автор: kot_k_k   (18.08.2009 в 14:56)   личное сообщение
 
 

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

  Ответить  
 
 автор: NaBar   (18.08.2009 в 15:12)   личное сообщение
 
 

Об этом я изначально и спрашивала. У меня есть Табл Журнал. Есть Табл Пароли. На форме Журнал есть кнопка: удалить и текстовое поле для ввода пароля. Планировалось, что по нажатию кнопки Удалить, будет программно производиться запрос в таблицу Пароли и, если совпадение будет найдено, то DoCmd.RunSQL "Delete...." Но я столкнулась с тем, что не знаю, как программно сделать запрос на поиск подходящего Пароля. RunSQL - не позволяет это делать а Recordset я еще ни разу не пользовала, поэтому не знала, как его правильно оформлять (да и поможет ли он?) Тут Гоблин предложил идею с паролем на форме. Мне она понравилась и я стала пробовать ее воплотить.

  Ответить  
 
 автор: kot_k_k   (18.08.2009 в 15:27)   личное сообщение
 
 

Пароли вообще мона хранить в другой БАЗЕ, и вот так до нее программно дозваниваться!!!

Dim con As New ADODB.Connection
Dim rst As ADODB.Recordset
Dim rst_G As ADODB.Recordset

Set rst = New ADODB.Recordset
Set rst_G = New ADODB.Recordset
con.Provider = "MSDataShape"
con.ConnectionString = "Provider=MSDataShape;Data Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\pasword.mdb;User Id=admin;Password=;"
con.Open
rst.StayInSync = False
rst.MoveLast

и делай с ней чё хош.

а на SQL твой запрос выглядеть должен так:

str_="select * from табла_с_паролями where имя_пользователя=" & Пользователь_аффтаризованный & " and поле_значение_пароля=" & me!Pass (введенный пароль,
если пользовательне аффтаризируется то
str_="select * from табла_с_паролями where поле_значение_пароля=" & me!Pass

set Pas_Word=dbs.OpenRecordset(str_)
если нет записи BOF=true и EOF =true то фиг с маслом!!!
если есть - то доступ

  Ответить  
 
 автор: Гоблин   (18.08.2009 в 14:58)   личное сообщение
51 Кб.
 
 

Выведи в свою форму не поле а список и укажи источник его строк таблу пароли. Далее работай со значением этого списка.
Вот и кот того же мнения. Но список этот можно также скрыть, засунуть под кнопку, сжать до 1 мм и прочее.
И все же лучше не в форме. Кста есть еще способы обратиться программно к этому полю, без вывода его в форму.

  Ответить  
 
 автор: LAN   (20.08.2009 в 12:27)   личное сообщение
 
 

Если у Вас еще не пропал интерес к этой теме, то я сообщите мне email, я подготовлю материал и выставлю на форум.
По моему глюбокому убеждению, никакие стандартные ср-ва не годятся.
Сделал модуль, к-рый по паролю пользователя (он запрашивается при входе программу и к нему привязано описание запрещений кнопок, полей, св-в allow... формы и даже заход в форму для этого пользователя) настраивает форму под конкретного пользователя, т.е. хотя и видит кнопку, но она enabled=false, а поле - loced=true и т.д.
Эту систему я использую уже несколько лет и горя не знаю.

  Ответить  
 
 автор: kot_k_k   (21.08.2009 в 10:46)   личное сообщение
 
 

"Прежде чем строить забор вокруг огорода, нужно посчитать стоимость урожая."

Из опыта программирования.

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList