|
|
|
| Нужно реализовать следующее: удалять запись из таблицы только по паролю. То есть при любой попытке стереть строку должен запрашиваться пароль и только знающий его человек мог совершить удаление. Или это впринципе невозможно? | |
|
| |
|
|
|
| http://hiprog.com/index.php?option=com_content&task=view&id=251661606&Itemid=35
пароль спроси при входе в базу .
открывая форму задай условие
если пароль верен откройся в обычном режиме
если не верен откройся только для чтения | |
|
| |
|
|
|
| Встречала Вашу статью
http://hiprog.com/index.php?option=com_content&task=view&id=251661592&Itemid=35
(Простая авторизация средствами ACCESS от 30 мая 2008), вышла на нее через Яндекс.
Пробежала по диагонали - показалось полезным, но не совсем подходящим, занесла в Избранное на всяк.случай :)
А тут и с самим автором встретиться довелось! Спасибо Вам! | |
|
| |
|
|
|
| в форме есть события до удаления, удаление, после удаления
используйте их.
мне кажется есть подводные камни...
вот например мне нельзя удалять строку, а изменять ее я могу?
тогда могу все поля заполнить пустыми строками и нулями....
или изменить на полный бред. | |
|
| |
|
14 Кб. |
|
| Если требуется удалить выбранную, то гоблин способ покатит. Кста код можно сократить до указания одного поля счетчика.
Где-то читал про способ очистить таблу вовсе
CurrentDb().Execute ("delete * from имятабла") 'очистить таблу на
DoCmd.Quit 'закрыть приложение на
Такой код точно паролить на. | |
|
| |
|
|
|
| Работать с базой будут "девочки из ресепшн" :-) Редактировать поля (кроме Индекса) можно, но все поля обязательные и после заполнения их уже на ноль не изменишь. А вот чтобы удалить ошибочную запись или отмененную по просьбе клиента - это только через управляющего, которого на 5 сек подозвали, он кнопку нажал и все. Поэтому вариант с паролем на входе слишком сложен: это выходить, заходить снова по паролю, потом опять выходить и перезаходить без пароля.
Была идея сделать так: при нажатии на кнопку "удалить" - прочитать данные из текстового поля "Индекс удаляемой строки" и "Пароль". Потом проверить - есть ли такой пароль (хранятся в табл "Пароли") с помощью DoCmd.RunSQL, но никак не могу подобрать нужный запрос. Самой выборки ведь не надо, нужен лишь булевский результат - найден или нет. И уже при проложительном результате удалять запрашиваемую строку. Удаление работает, а пароль никак не подключу :-(
Убила пару вечеров на перебор вариантов и поиск примеров. Похоже, таким образом это не раелизовать. Буду искать примеры, как сделать через Recordset. | |
|
| |
|
|
|
| Все поля заполняются только из списка заранее заданных. В свободной форме только необязательный комментарий вводится. Изменяются только пустые строки, а если уже что-то было выбрано, то менять можно только - опять же - вызвав управляющего. Это как раз его придумка: защита от несанкционированного удаления оплаченных клиентом процедур, с тем, чтобы работник денюшку в карман себе не забирал мимо кассы. | |
|
| |
|
|
|
| Ну коли будет таблица, наверное в 1 строку с полем [Пароль], без права добавления.
То я бы создал запрос с полем типа Выражение:[Введи пароль]
При запуске запроса вылезет диалоговое окно куда надо ввести пароль.
Далее в этом запросе в соседнем поле создал бы Сравнение:IIF([Пароль]=[Выражение];1;0)
То бишь коли пароль верен, то при срабатывании запроса в этом поле вылезет 1, а коли нет, то 0
Если все это прописать в VBA то дальнейшие действия через IF можно спрограммировать.
Будет время сделаю. Кстати идея ведь блин.
PS: Может не стоит админа за каждую грамматическую ошибку гонять? В данный момент мучаю одну базку. Так в ней реализована блокировка по дате. Т.е. Сегодня при вводе инфы можно удалять и редактировать. А завтра - поезд ушел. В некоторых формах разрешаю 3 дня на размышление, далее -
With Me.Form
.AllowDeletions = False | |
|
| |
|
|
|
| Гоблин, спасбо за идею! Ща спать лягу, пообдумываю как это попробовать. А насчет PS - задача до слез смешная (ну раз надо заказчику- значит надо!) - малюсенький журнальчик на один день: регистратор просто записывает к кому из работников приходят клиенты и за какими услугами (т.е. списки работников и услуг - заранее определены, грамматические ошибки исключаются) . А управляющий вечером сравнивает записи с наличными в кассе. Запрет удаления нужен, чтобы пресечь оплату мимо кассы - чтобы никто из работников не мог удалить услугу. Тут мне видятся всякие обходные маневры - типа подговорить регистратора не вносить запись вообще, или еще что-нить. Но решить такую штуку задачи пока не поступало. А самое смешное - вечером управляющий хочет все удалять. "А вдруг фискальный контроль?" :) | |
|
| |
|
|
|
| Сделайте управляющему отдельный интерфейс! | |
|
| |
|
|
|
| Что Вы имеете ввиду? Назначить логин и пароль и перед входом их запрашивать? | |
|
| |
|
|
|
| Скорее всего отдельную форму для админа, которая будет открываться с разрешением удаления. Но тоже по паролю.
А чем мое предложение плохо? В форме удаление запрещено, изменение тоже можно запретить. Удаляет запрос на удаление при выборе записи. Обязательно что ли в таблу пароль вставлять?
Встрой в программу несколько паролей меняющихся в зависимости от даты. Или генератор паролей с петушиным словом, зависящим от даты, квартала, года и титула пра-пра-бабушки любимой админа морской свинки. Вычислять пароль будет админ по определенной форуле или таблице... Там пароль этот получится меняться будет хоть каждую неделю. | |
|
| |
|
23 Кб. |
|
| Вот попробуй так. На мое программерство не смотри, но примерная мысля будет ясна.
Обвесь это всякими "Сменить пароль", "Подтвердить пароль", маску ввода *** что бы было и т.д. | |
|
| |
|
|
|
| Гениально!!!!! :) Супер идея! Мне даже в голову не пришло бы такое!А главное - как просто! Выводить в форму и просто сделать значение невидимым!!! :) Спасибо огромнейшее-преогромнейшее!!! | |
|
| |
|
|
|
|
Учусь вот понемногу чему-нибудь и как попало. | |
|
| |
|
66 Кб. |
|
| Вот, тоже сделал на основе того что Гоблин придумал для пароля...
PS пароль-123456 (кому под Shift'ом лень зайти) | |
|
| |
|
|
|
| Ну коли там все удаляет, то свойства формы можно было и не менять. Но ей похоже надо выборочные строки удалять и менять. Этот код должен срабатывать в случае неправильно введенного пароля.
Надо было запросик поставить на действие удалить. Что бы все удаленное и изменяемое в отдельную таблу заносил с фиксацией даты изменения. Для проверяющих финансистов и налоговиков. | |
|
| |
|
|
|
| А можно подробнее про запрос, а то мысля такая была, а как реализовать не пойму??? | |
|
| |
|
23 Кб. |
|
| Ну если касается удаления записей, то надо запрос на добавление состряпать. При событии удаления запускать его. Таблу "Удаленое" создать и после удаления записей открыть ее.
Если изменяем записи, то можно запрос запускать тот же, только на другое событие запускать.
(изменение, внесены изменения). Можно развить тему. Поледействие в табле "Удаленное" поставить и запрос что бы вносил "Изменено" или "Удалено". Дата фиксируется автоматом по умолчанию.
Кароче примерно так. (для удаления) | |
|
| |
|
20 Кб. |
|
| Ну давай тему развивать. Итак при удалении в таблу "Удаленное" внесется удаляемая запись с пояснением "Удалено". При изменении записи соответствующая запись будет внесена с пояснением "Изменено".
Токмо несколько записей сразу удалять нельзя. И еще. При наборе пароля или нажатии кнопки надо запретить добавлять запись. Ну типа
With me.form
.allowAdditions=false
Ну или нечто в этом роде, что бы не дополняли в этом виде. Пробуй. Может что и понравится.
И отключи все возможные сообщения акса на добавление, предупреждения и прочее. Можно программно. Где-то такое видел. Копаться лень. | |
|
| |
|
|
|
| Вопрос - а как распознать что удаляется более 1 записи сразу? | |
|
| |
|
|
|
|
| Ну тогда как реализовать это в запросе. Если выделено 5 записей и удалены. Что бы запрос на добавление все 5 внес в таблу удаленных записей. Нечто связанное с Select? | |
|
| |
|
|
|
| К чему Dcount цеплять? Каким образом обрабатываются выделенные записи на форме? ЧЮть подробнее. Плизз | |
|
| |
|
|
|
|
| Ого! Целая дискуссия! :) Ща почитаю.
Гоблин, помоги плиз еще чуток :) Стала реализовывать идею со скрытым выводом пароля на форму. Ты пишешь if Par = Me.Пароль
В данном случае Пароль - это имя поля? Или это имя столбца в таблице Пароль, т.е. данные? Видимо я в свойствах не всё, что нужно, отметила, т.к. ругается и не дает доступа :-( | |
|
| |
|
|
|
| Акбар, вот как по логике гоблин-программерства. (без правил) По умолчанию в форме разрешены только добавления. Удаления и изменения запрещены. Источник строк - табла Пароли. В ней скрыто поле Пароль. Поле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
Так как источник строк формы таблица Пароли, то поле пароль - в нее выведено и скрыто. Оно так и будет называться. | |
|
| |
|
|
|
| Это я все поняла. У меня отчего-то скрытый пароль не выводится. То есть если я в свойстве поля пропишу "вывод на экран = да", то в окошке появляется #Имя? вместо нужной записи из таблицы Пароли. Правда я вывожу скрытый пароль не в отдельную форму, а на общую, где журнал с записями, которые и надо редактировать.
В области данных - сам журнал, а в Примечании формы - поле для ввода пароля, поле для ввода номера удаляемой строки, кнопка для удаления одной строки и кнопка для удаления всего журнала. И там же скрыто поле с настоящим паролем. | |
|
| |
|
|
|
| А зачем хранить парольна форме? Его ж узнают. Тем же способом как вы его скрыли его раскроют блудливые ручки юзеров.
Проще
ввод пароля - обработка (из табы паролей или программно) - разрешение или запрет на удаление, изменение. | |
|
| |
|
|
|
| Об этом я изначально и спрашивала. У меня есть Табл Журнал. Есть Табл Пароли. На форме Журнал есть кнопка: удалить и текстовое поле для ввода пароля. Планировалось, что по нажатию кнопки Удалить, будет программно производиться запрос в таблицу Пароли и, если совпадение будет найдено, то DoCmd.RunSQL "Delete...." Но я столкнулась с тем, что не знаю, как программно сделать запрос на поиск подходящего Пароля. RunSQL - не позволяет это делать а Recordset я еще ни разу не пользовала, поэтому не знала, как его правильно оформлять (да и поможет ли он?) Тут Гоблин предложил идею с паролем на форме. Мне она понравилась и я стала пробовать ее воплотить. | |
|
| |
|
|
|
| Пароли вообще мона хранить в другой БАЗЕ, и вот так до нее программно дозваниваться!!!
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 то фиг с маслом!!!
если есть - то доступ | |
|
| |
|
51 Кб. |
|
| Выведи в свою форму не поле а список и укажи источник его строк таблу пароли. Далее работай со значением этого списка.
Вот и кот того же мнения. Но список этот можно также скрыть, засунуть под кнопку, сжать до 1 мм и прочее.
И все же лучше не в форме. Кста есть еще способы обратиться программно к этому полю, без вывода его в форму. | |
|
| |
|
|
|
| Если у Вас еще не пропал интерес к этой теме, то я сообщите мне email, я подготовлю материал и выставлю на форум.
По моему глюбокому убеждению, никакие стандартные ср-ва не годятся.
Сделал модуль, к-рый по паролю пользователя (он запрашивается при входе программу и к нему привязано описание запрещений кнопок, полей, св-в allow... формы и даже заход в форму для этого пользователя) настраивает форму под конкретного пользователя, т.е. хотя и видит кнопку, но она enabled=false, а поле - loced=true и т.д.
Эту систему я использую уже несколько лет и горя не знаю. | |
|
| |
|