Программисты не пишут нелогичных программ, бывают нелогичные пользователи.
Вы можете выполнить эту задачу, непосредственно обращаясь к BDE. Включите
следующие модули в сецию Uses вашего модуля: DBIPROCS, DBIERRS, DBITYPES
Ниже приведена функция с именем ID, возвращающая сетевое имя входа:
function ID: string;
var
rslt: DBIResult;
szErrMsg: DBIMSG;
pszUserName: PChar;
begintry
Result := '';
pszUserName := nil;
GetMem(pszUserName, SizeOf(Char) * DBIMAXXBUSERNAMELEN);
rslt := DbiGetNetUserName(pszUserName);
if rslt = DBIERR_NONE then
Result := StrPas(pszUserName)
elsebegin
DbiGetErrorString(rslt, szErrMsg);
raise Exception.Create(StrPas(szErrMsg));
end;
FreeMem(pszUserName, SizeOf(Char) * DBIMAXXBUSERNAMELEN);
pszUserName := nil;
excepton E: EOutOfMemory do
ShowMessage('Ошибка. ' + E.Message);
on E: Exception do
ShowMessage(E.Message);
end;
if pszUserName <> nilthen
FreeMem(pszUserName, SizeOf(Char) * DBIMAXXBUSERNAMELEN);
end;
Приведенный код - это функция Delphi, называемая ID, которая возвращает логин пользователя сети для текущего пользователя. Функция использует BDE (Borland Database Engine) для достижения этого.
Вот шаг за шагом, что код делает:
Он объявляет несколько переменных:
rslt: Переменная типа DBIResult, используемая для хранения результата процедуры DbiGetNetUserName.
szErrMsg: Переменная типа DBIMSG, используемая для хранения любого сообщения об ошибке, возвращенного процедурой DbiGetErrorString.
pszUserName: Указатель на PChar (динамически выделенная строка), которая будет содержать логин пользователя сети.
Он инициализирует результат и устанавливает его в пустую строку (''). Также он устанавливает pszUserName в nil.
Функция выделяет память для pszUserName с помощью GetMem, а затем вызывает процедуру DbiGetNetUserName с параметром pszUserName. Эта процедура получает логин пользователя сети.
Если rslt равен DBIERR_NONE, то это означает, что операция была успешной, поэтому функция конвертирует pszUserName в строку Delphi с помощью StrPas и присваивает ее результату.
Если rslt не равно DBIERR_NONE, то функция бросает исключение с сообщением об ошибке, возвращенным процедурой DbiGetErrorString.
Затем функция освобождает память, выделенную для pszUserName, с помощью FreeMem.
Функция проверяет, является ли pszUserName не равен nil. Если это так, то она освобождает память снова, чтобы предотвратить утечки памяти.
В случае любых исключений (например, EOutOfMemory или любого другого исключения), функция отображает сообщение об ошибке в окне сообщений.
Вот альтернативный способ достижения этого с помощью встроенной функциональности Delphi:
Этот код использует функцию GetCurrentUserName, которая возвращает имя текущего пользователя. Он намного проще и не требует использования процедур BDE.
Функция ID возвращает сетевое имя входа пользователя, используя модули BDE для получения имени и обработки ошибок.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.