Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.27;
Скачать: CL | DM;

Вниз

Ctrl+Del в DBGrid   Найти похожие ветки 

 
Teuton ©   (2005-03-10 13:10) [0]

Здравствуйте.
Известно, что в DBGrid встроено сочетание клавишь Ctr+Del, которое удаляет запись. Помогите пожалуйста советом, как запретить пользователю удалять запись таким образом, как заблокировать это?

Заранее благодарю!


 
REA   (2005-03-10 13:12) [1]

А чем плохо? Впрочем можно перехватить нажатие клавиш.


 
Teuton ©   (2005-03-10 13:21) [2]

>>REA

Я знаю, что можно, просто не знаю как это сделать ;) Не подскажите чайнику?
Заранее благодарю!


 
_1   (2005-03-10 13:34) [3]

DatasetOnDelete:

if ЯНехочуЧтобыТекущаяЗаписьБылаУдалена then
begin
 ShowMessage("Ассеss denied!");
 Abort;
end;


 
_1   (2005-03-10 13:36) [4]

^ вместо OnDelete - BeforeDelete


 
Teuton ©   (2005-03-10 13:38) [5]

>>_1

Спасибо большое!
Только я не совсем понял, что же писать вместо "if ЯНехочуЧтобыТекущаяЗаписьБылаУдалена then"


 
Vlad ©   (2005-03-10 13:44) [6]


> Teuton ©   (10.03.05 13:38) [5]

Так тебе нужно вобще запретить удалять записи из набора данных или только по Ctrl-del из DBGrid?


 
Teuton ©   (2005-03-10 13:50) [7]

>>Vlad

Понимаете в чем дело, в идеале мне хотелось бы сделать так, чтобы удалять запись пользователь мог только в случае если правильно будет введен пароль... Но весь ужас в том, что я даже не представляю как установить пароль так, чтобы его можно было бы держатьне в тестовом файле и чтобы его можно было бы изменять этот пароль через диалоговое отдельное окно. Ну стандартная оперция смены пароля. Если пароль введен правильно, то тогда активизируется бутон удаления и пользователь может удалить запись. А это сочетание Ctrl+Del работает всегда :( Вот я и хочу от него избавиться...


 
markers ©   (2005-03-10 15:56) [8]

А Read-Only не пробовал?


 
Teuton ©   (2005-03-10 16:11) [9]

>>markers

Нет это не помогает :(


 
stakan ©   (2005-03-10 16:15) [10]

Можно так
procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
 if (ssCtrl in Shift) and (Key = VK_DELETE) then
 begin
   ShowMessage("Нельзя!!!");
   Abort
 end;
end;


 
Teuton ©   (2005-03-10 16:44) [11]

>>stakan

Спасибо вам большое! Пользуясь случаем, хочу спросить вас, каков принцип сохранения паролей (с возможностью програмного изменения пароля) в Дельфи, но так, чтобы сохранять пароль не в текстовом файле, доступном всем, а в каком-нибудь зашифрованном файле?

Заранее благодарю!


 
markers ©   (2005-03-10 16:54) [12]

Шифровать писать свою систему щифрования либа юзать компоненты. И ещё Разные типы шифрования существуют... Если хочешь подробнее пиши в приват..


 
stakan ©   (2005-03-10 16:59) [13]

>> Teuton
 Вариантов много, смотря какое приложение.
Если работа с БД то пароли можно хранить в самой БД (создавать пользователя базы с паролем, тогда шифрованием займётся СУБД) или завести отдельную таблицу в базе для хранения пользователей с паролями. Насчёт алгоритмов шифрования, то тут я не спец. Если приложение обычное, то можно в реестре, опять же шифруя пароль. Насколько я помню есть компоненты (из RXLib) которые пишут в реестр уже в зашифрованом виде. И т.д.


 
markers ©   (2005-03-10 17:02) [14]

ту Стакан
Чё-то я там не замечал?
Да и есть хорошая библиотечка (Фришная) которая может и в MD5 и BlowFish и еже сним...


 
markers ©   (2005-03-10 17:05) [15]

То Teuton
Короче пиши в приват либо на ящик в инфо либо
admin(ЗаСпАм)@sibdisnet.ru
Естественно (ЗаСпам) убери когда писать будешь...


 
Teuton ©   (2005-03-10 17:05) [16]

>>stakan

У меня простое приложение учета товаров, работающее локально с DBF-файлом.


 
markers ©   (2005-03-10 17:06) [17]

А DBF у нас что, не база?


 
stakan ©   (2005-03-10 17:18) [18]

>>Teuton  
Есть простейший способ шифрования, но любопытного юзера остановит. Разбиваешь пароль на символы (байты), делаешь каждому символу XOR с какой нибудь битовой маской (любым символом), на выходе получаешь левый символ. Расшифровка - так же: берёшь символ, XOR с той же маской, с какой шифровал - получаешь исходный символ.


 
Vlad ©   (2005-03-10 17:32) [19]


> Teuton ©   (10.03.05 17:05) [16]

Если работаешь с базой, то пароль резоннее хранить в таблице.
Правда такая защита рассчитана на полного ламера, поскольку файл DBF сам по себе можно открыть хоть Excel"ем, смотреть, изменять данные и делать с ними все что угодно.
Хранить пароль лучше в виде хеш-суммы (напр. MD5)
вот пример исходников вычисления MD5 на Delphi
http://delphibase.spb.ru/?action=viewfunc&topic=mathcode&id=10243

При этом, в программе старайся избегать проверки пароля типа:
if CheckPassword(...) then  <пускаем в программу>
взламывается за 5 минут.
Придумай что нибудь посложнее.


 
Teuton ©   (2005-03-11 08:53) [20]

>>stakan Vlad
Спасибо вам большое за советы, друзья, но слишком хорошего мнения о моих познаниях в программировании...
Что такое MD5, XOR и как работать с байтами я вообще не знаю :( А Слово хэш лишь напоминает мне о моиг потугах работать с массивом в перле и не более того :(

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

Спасибо еще раз.


 
Anatoly Podgoretsky ©   (2005-03-11 09:07) [21]

Не храни пароль совсем.


 
Teuton ©   (2005-03-11 09:48) [22]

>>Anatoly Podgoretsky

Как же его не хранить? А с чем сверять введенный пароль? ;)


 
Bronco ©   (2005-03-11 10:32) [23]


> Teuton ©   (11.03.05 08:53) [20]


> А что если вписывать в таблицу зашифрованный пароль? То
> есть значение в таблицу будет записано функцией типа crypt()
>

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


 
Bronco ©   (2005-03-11 10:33) [24]

извиняюсь

> Хэш, в отличие от пароля,

читать как
Хеш, в отличие от зашифрованного пароля


 
Teuton ©   (2005-03-11 10:50) [25]

>>Bronco

Да кажется, я вас понял ;) Уж простите за навязчивость, но не могли бы вы мне пояснить как это делать?

Заранее благодарю!


 
Bronco ©   (2005-03-11 10:58) [26]


> Teuton ©   (11.03.05 10:50) [25]


> не могли бы вы мне пояснить как это делать

Ну, если упрощенно, то примерно так:
Есть некая функция, вычисляющая хэш-сумму от твоей строки с паролем. Пример функции приведен в [19] ссылке. Вычисляешь эту хэш-сумму и записываешь в таблицу БД.
Затем, когда юзер вводит пароль, чтобы зайти в программу, твоя программа предварительно вычисляет хэш от введенного пароля и сравнивает с тем значением, которое уже хранится в базе. Если совпало, значит пускаем в программу


 
Anatoly Podgoretsky ©   (2005-03-11 12:11) [27]

Teuton ©   (11.03.05 09:48) [22]
Сверяй с сигнатурой, один из вариантов этого термина ХЕШ.
Для данного случая я бы порекомендовал CRC32 или CRC16, поскольку тогда легко хранить где угодно, в базе, в реестре, в ини и т.д.



Страницы: 1 вся ветка

Текущий архив: 2005.03.27;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.041 c
8-1102669878
siv14
2004-12-10 12:11
2005.03.27
вращение фигур


3-1109667661
kivadim
2005-03-01 12:01
2005.03.27
Отображение в отчете связи один-ко-многим


8-1101796474
СЕМЕН
2004-11-30 09:34
2005.03.27
Задолбил TJPEGIMAGE


11-1093507527
ssk
2004-08-26 12:05
2005.03.27
На форме в DLL не обрабатываются кнопки по умолчанию


11-1092829854
omegaB
2004-08-18 15:50
2005.03.27
Передача файла с использованием KOLICS - KOLWSocket