char buffer[1024];
unsigned long *size = new unsigned long(1024);
GetUserName(buffer,size);
ShowMessage(buffer);
delete size;
как узнать имя пользователя Windows
Как узнать имя пользователя Windows, который запустил приложение с использованием TADOConnection к базе на SQL Server? Аутентификация на SQL сервере "SQL and windows".
Цитата: j_anna
Как узнать имя пользователя Windows, который запустил приложение с использованием TADOConnection к базе на SQL Server? Аутентификация на SQL сервере "SQL and windows".
Код:
если надо более сложные вопросы используй GetTokenInformation и LookupAccountSid
мне нужно узнать имя пользователя базы SQL Server, а оно может не совпадать с именем пользователя в Windows. Как это можно сделать, используя компоненты ADO?
Цитата: j_anna
ответ на свой вопрос получила, спасибо, но получается я неправильно вопрос задала :)
мне нужно узнать имя пользователя базы SQL Server, а оно может не совпадать с именем пользователя в Windows. Как это можно сделать, используя компоненты ADO?
мне нужно узнать имя пользователя базы SQL Server, а оно может не совпадать с именем пользователя в Windows. Как это можно сделать, используя компоненты ADO?
Вы можете использовать для этого CURRENT_USER наприм:
Код:
SELECT CURRENT_USER;
go
go
в хранимке или непосредственно в запросе. Так же можно использовать USER_NAME() - эти функции эквивалентны.
Цитата: j_anna
Как узнать имя пользователя Windows, который запустил приложение с использованием TADOConnection к базе на SQL Server? Аутентификация на SQL сервере "SQL and windows".
Хотя тут не очень понятно, что собственно требуется. Ведь для подключения к серверу у вас уже должно быть имя пользователя - ведь строка подключения както формируется? Или я чегото не понял?
Я сделала через TADODataSet с CommandType=CmdText и в CommandText="select IS_MEMBER ('ИмяДомена\ИмяГруппы')". На форме разместила невидимый DBGrid, связанный с TADODataSet. А в событии OnClick меню формы добавила код
Код:
AnsiString s = "";
TDataSet *pDS = DBGridUser->DataSource->DataSet;
s = s + pDS->Fields->Fields[0]->AsString;
TMenuItem *ItemToEdit = mnuMain->Items->Items[0];
if (s==1)
{ItemToEdit->Items[0]->Enabled=false;}
else
{ItemToEdit->Items[0]->Enabled=true;}
TDataSet *pDS = DBGridUser->DataSource->DataSet;
s = s + pDS->Fields->Fields[0]->AsString;
TMenuItem *ItemToEdit = mnuMain->Items->Items[0];
if (s==1)
{ItemToEdit->Items[0]->Enabled=false;}
else
{ItemToEdit->Items[0]->Enabled=true;}
Всё работает, но как-то может можно сделать проще?
Код:
ADODataSet1->Close();
ADODataSet1->CommandText="ваш_запрос";
ADODataSet1->Open();
AnsiString User=ADODataSet1->Fields->FieldByNumber(0);
ADODataSet1->CommandText="ваш_запрос";
ADODataSet1->Open();
AnsiString User=ADODataSet1->Fields->FieldByNumber(0);
(или возможно не открывать/закрывать, а просто Refresh(), точно не помню).
Или примерно то же самое можно через ADOQuery сделать. Данные ни в какой невидимый грид отображать не нужно.
P.S. В коде возможны неточности, если так не работает - посмотрите справку...
MySQL 5.0.37, Delphi 7, WinXP
Цитата: malor
У компонента TConnection есть свойство Password, а где свойство User указывается?
MySQL 5.0.37, Delphi 7, WinXP
MySQL 5.0.37, Delphi 7, WinXP
Что за компонент TConnection?