- Алло, техотдел? Я пароль набираю - а меня не пускают.
- Значит, правильно набирать надо.
- Я правильно набираю! Пять звездочек!
uses Bde, SysUtils, dbtables, windows;
function StrToOem(const AnsiStr: string): string;
begin
SetLength(Result, Length(AnsiStr));
if Length(Result) 0 then
CharToOem(PChar(AnsiStr), PChar(Result));
end;
function TablePasswort(var Table: TTable; password: string): Boolean;
var
pTblDesc: pCRTblDesc;
hDb: hDBIDb;
begin
Result := False;
with Table dobeginif Active and (not Exclusive) then Close;
if (not Exclusive) then Exclusive := True;
if (not Active) then Open;
hDB := DBHandle;
Close;
end;
GetMem(pTblDesc, SizeOf(CRTblDesc));
FillChar(pTblDesc^, SizeOf(CRTblDesc), 0);
with pTblDesc^ dobegin
StrPCopy(szTblName, StrToOem(Table.TableName));
szTblType := szParadox;
StrPCopy(szPassword, StrToOem(Password));
bPack := True;
bProtected := True;
end;
if DbiDoRestructure(hDb, 1, pTblDesc, nil, nil, nil, False) DBIERR_NONE then Exit;
if pTblDesc nilthen FreeMem(pTblDesc, SizeOf(CRTblDesc));
Result := True;
end;
Функция Delphi TablePasswort добавляет пароль к таблице Paradox. Функция принимает два параметра: объект TTable и строку пароля.
Разбивка кода:
Первая часть функции проверяет, является ли таблица активной и неэксклюзивной, и если так, то закрывает ее. Затем она устанавливает свойство эксклюзивности в True и открывает таблицу.
Функция получает обрабатывающий базу данных (handle) из таблицы и закрывает его.
Она выделяет память для структуры CRTblDesc с помощью функции GetMem.
Функция заполняет структуру CRTblDesc информацией о таблице, типу (Paradox), пароле, информации о пакетировании и защиты.
Она вызывает функцию DbiDoRestructure, чтобы добавить пароль к таблице. Если функция возвращает код ошибки DBIERR_NONE, то это означает, что пароль был успешно добавлен.
Функция StrToOem используется для конвертации строки ANSI в кодировку OEM, которая, вероятно, необходима потому что таблицы Paradox используют кодировку OEM для паролей.
Предложение по улучшению: вместо использования функций GetMem и FreeMem для ручного управления памятью, рекомендуется использовать встроенные в Delphi функции управления жизненным циклом объектов, такие как интерфейсы или умные указатели. Это может помочь предотвратить утечки памяти и сделать код более надежным.
Кроме того, было бы полезно добавить обработку ошибок в функцию, чтобы поймать любые исключения, которые могут возникнуть при добавлении пароля. Вы можете использовать блоки try-except или обрабатывать конкретные исключения, такие как EDbAccessError.
Наконец, имя функции и комментарии указывают, что она предназначена для добавления паролей к таблицам Paradox, но было бы полезно включить краткое описание, что функция делает и как ее использовать в документации.
Добавляем пароль к таблице Paradox: описана функция TablePasswort, которая добавляет пароль к таблице Paradox с использованием библиотеки dbtables и windows.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.