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;
Функция TablePasswort в Delphi, которая устанавливает пароль для таблицы Paradox. Вот шаг за шагом, что она делает:
Функция принимает два параметра: Table, объект TTable, представляющий таблицу Paradox, и password, строка, содержащая новый пароль.
Функция проверяет, является ли таблица уже открыта и эксклюзивна, и если да, то закрывает ее. Затем она устанавливает свойство Exclusive в True, чтобы обеспечить, что только один доступ к таблице может быть открыт одновременно.
Если таблица не активна (то есть еще не была открыта), функция открывает ее.
Функция получает handle базы данных (hDB) ассоциированный с таблицей и закрывает его.
Блок памяти выделяется с помощью GetMem для хранения структуры pCRTblDesc, которая представляет описание таблицы.
Структура pCRTblDesc заполняется информацией о таблице, включая ее имя (преобразованное из Unicode в OEM кодовую страницу с помощью функции StrToOem), тип (szParadox) и пароль (также преобразованный в OEM кодовую страницу).
Флаги bPack и bProtected устанавливаются в True, указывая, что таблица должна быть упакована (то есть ее данные должны быть сжаты) и защищена паролем, соответственно.
Функция вызывает функцию DbiDoRestructure, передавая handle базы данных, структуру описания таблицы (pTblDesc) и другие параметры. Эта функция отвечает за установку пароля на таблицу Paradox.
Если функция DbiDoRestructure возвращает код ошибки, отличный от DBIERR_NONE, функция выходит с статусом ошибки.
Наконец, если блок памяти, выделенный для структуры pCRTblDesc, не был null, он освобождается с помощью FreeMem.
Функция StrToOem используется для преобразования строк Unicode в строки OEM кодовой страницы. Это вероятно необходимо потому, что таблицы Paradox используют OEM кодовые страницы для хранения имен таблиц и паролей.
Альтернативное решение могло бы быть использовать свойство Password компонента TDatabase, чтобы установить пароль на таблицу, а не использовать низкоуровневую функцию DbiDoRestructure. Однако это может требовать более специфических знаний Delphi и может не работать с всеми версиями Paradox.
Поставить пароль на таблицу Paradox с помощью функции TablePasswort позволяет обеспечить безопасность доступа к базе данных.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.