Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Vista + ADOX_TLB [D7]


a1x ©   (2007-01-28 11:21:00) 

Поставил на днях Windows Vista и сразу возникли проблемы с базой (Delphi+Access+ADO). А именно не работают функции ADOX_TLB. Например я хочу определить права пользователя:
...
var
 Catalog: _Catalog;
...
 Catalog := coCatalog.Create;
 Catalog.Set_ActiveConnection(Connection.ConnectionString);
 try
     Catalog.Groups['Admins'].Users[User].Name;
     showmessage('Администратор');
 except
     showmessage('Юзверь');      
 end;
...

Вылезает ошибка Недопустимое имя учетной записи или парольв строчке
Catalog.Set_ActiveConnection(Connection.ConnectionString);
Причем, если коннектиться юзер с обычными правами, то все нормально, а если админ, то вылезает эта ошибка.
Может кто подскажет, как это исправить. В XP и 2000 все работало.


a1x   (2007-01-31 10:45:00) [1]

Наконец-то заработало! А поменял всего лишь следущую строку:
Catalog.Set_ActiveConnection('User ID='+User+'; Password='+Passw+'; Provider=Microsoft.Jet.OLEDB.4.0; Data Source='+str+'; Jet OLEDB:System database='+aut+';');
То есть вместо ADOConnection1.ConnectionString вручную прописал строку коннекта. Хотя в XP с ConnectionString тоже работало.

Спасибо за помощь. Тему можно закрыть.


sniknik   (2007-01-30 17:01:00) [2]

p.s. если всетаки соизволишь проверить то положи лучше сюда измененный код из [5] с проверяемым юзером и вместо ADOConnection1.ConnectionString вписывай реальную строку коннекта (значение, а не переменную переменная ни о чем не говорит).
т.е. именно то что у тебя выполняется (для того юзера что проверяется и под которым коннект). ну и ответ который получил естественно.


sniknik   (2007-01-30 16:49:00) [3]

> у меня созданы 2 группы (Admins и Users)
???
они уже есть, это стандартные группы, если специально не убирал... то зачем "созданы"? (и как поведет при одноименных? вообще дает создать?)

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

> так там все нормально
ой. а тогда зачем ты здесь?... очевидно не все нормально.

> то не могу ни добавить нового пользователя, ни пароль сменить и пр.
ну, судя по тому что здесь было сказано, нет у тебя в админах  того юзера которым коннектишся. просто нет. (первоначальные ссылки на висту както "по-издержали себя")


a1x   (2007-01-30 15:37:00) [4]

Пути прописал полные - не помогает.
Общая картина такая: у меня созданы 2 группы (Admins и Users). В каждой несколько пользователей. При коннекте любого пользователя из Admins вылетает ошибка. Под пользователями из Users коннект происходит, но у них нет прав на редактирование.

> а раз так, то почему бы не проверить то что в [5] посоветовано?
> , приконектиться тем чем дает и проверить интересующего
> юзера на предмет находится ли он вообще и в какой группе.
>  ???

У меня выводятся в виде дерева все пользователи и группы, к которым они относятся, так там все нормально. Но так как я это могу посмотреть только под пользователем из Users, то не могу ни добавить нового пользователя, ни пароль сменить и пр. А это как раз и нужно.


sniknik   (2007-01-30 12:52:00) [5]

> Все равно та же ошибка в строке
ты говорил
> Причем я коннекчусь не под юзером по-умолчанию, а которого сам создал.
? значит не если по умолчанию, например Admin -ом то коннектиться? ну ка понял.
а раз так, то почему бы не проверить то что в [5] посоветовано?, приконектиться тем чем дает и проверить интересующего юзера на предмет находится ли он вообще и в какой группе. ???
если никем не коннектиться... то так и говори, без делений, а лучше с перечислением испробованных логинов.

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


a1x   (2007-01-30 11:57:00) [6]

Все равно та же ошибка в строке
Catalog.Set_ActiveConnection(ADOConnection1.ConnectionString);
Файлы у меня не в "Program Files". Пробовал даже из сети запускать с другого компа.
Secured.mdw создавал в другой операционке. Пробовал создать новый в Viste - с ним тоже самое.


sniknik   (2007-01-29 19:56:00) [7]

> Причем я коннекчусь не под юзером по-умолчанию, а которого сам создал.
а где и когда? в старой операционке в которой работало? а Secured.mdw оттуда перетащил?

> где str='td.mdb', aut='Secured.mdw'
указывай полные пути к базам, и не ложи базы в "Program Files" (типа рядом с программой) в висте заблокирована запись туда. (а раз не сможет создать файл блокировок то скажет доступ запрещен и т.д. если для системной то откажет в логине)

поменяй еще свою процедуру (что в [0]) на эту, твоя както не очень
procedure TForm1.Button1Click(Sender: TObject);
var
 Catalog: _Catalog;
 i, n: integer;
 st, User: string;
begin
 Catalog:= coCatalog.Create;
 Catalog.Set_ActiveConnection(ADOConnection1.ConnectionString);
 try
   st:= '';
   User:= 'Admin';
   with Catalog.Users do
     for n:= 0 to Count - 1 do
      if AnsiCompareText(Item[n].Name, User) = 0 then begin
        with Item[n].Groups do
          for i:= 0 to Count - 1 do
            st:= st + Item[i].Name + ';';
        ShowMessage(User + ' присутствует в группах : '+st);
        Exit;
      end;
   ShowMessage('Юзера : "' + User + '" не найдено.');
 except
   on E: Exception do ShowMessage('Ошибка : '+E.Message);
 end;
end;


причем "коннектись" нормальным юзером, по умолчанию, а проверяй (подставь вместо User:= 'Admin'; ) того которого сам создал...


a1x   (2007-01-29 14:13:00) [8]

Все убрал, оставил только
 Connection.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;' +
'User ID=Adm;' +
'Data Source='+ str + ';' +
'Jet OLEDB:System database='+ aut ';

где str='td.mdb', aut='Secured.mdw'
Все равно та же ошибка. Причем я коннекчусь не под юзером по-умолчанию, а которого сам создал.


sniknik   (2007-01-29 10:58:00) [9]

убери из строки все лишнее, у тебя же там все в куче, а единственное что нужно практически это указание System database с правильным путем к базе (что неясно из переменной)
нафига тебе к примеру Encrypt Database который при упаковке испльзуется или те что для репликации, и системную базу ты не создаешь а всеголишь подключаешься... может в висте более строго с передаваемыми параметрами... ненужное/конфликтующее  не просто отбрасывается а считается ошибкой.

> А как в 2005 эта проблема решалась?
какая проблема? ну отключили юзера по умолчанию, что другого не создать прям? или этого не дают восстановить в правах? хотя это и не рекомендуют.
просто если у тебя в проге на него жестко завязано то то что в 2000м работало в 2005м будет без доп настроек/изменений выдавать ошибку логина. (что у тебя и описано)


a1x   (2007-01-29 09:28:00) [10]

Вот строка коннекта:
 Connection.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;' +
'User ID=Adm;' +
'Data Source='+ str + ';' +
'Mode=Share Deny None;' +
'Extended Properties="";' +
'Jet OLEDB:System database='+ aut + ';' +
'Jet OLEDB:Registry Path="";' +
'Jet OLEDB:Database Password=' + '' + ';' +
'Jet OLEDB:Engine Type=5;' +
'Jet OLEDB:Database Locking Mode=1;' +
'Jet OLEDB:Global Partial Bulk Ops=2;' +
'Jet OLEDB:Global Bulk Transactions=1;' +
'Jet OLEDB:New Database Password="";' +
'Jet OLEDB:Create System Database=False;' +
'Jet OLEDB:Encrypt Database=False;' +
'Jet OLEDB:Don' + '''' + 't Copy Locale on Compact=False;' +
'Jet OLEDB:Compact Without Replica Repair=False;' +
'Jet OLEDB:SFP=False';

А как в 2005 эта проблема решалась?


sniknik   (2007-01-28 11:38:00) [11]

ну так строку коннекта то покажи, рабочую и нет...

не стоит виста т.е. проверить не смогу, но по аналогии например в 2005 mssql  отключили учетную запись sa (бал админ стал никто...), может и в jet для висты с их "усиленной" безопасностью убрали админскую учетную запись? или изменили на чтото...


Наверх

Титульная страница Поиск, карта сайта Написать письмо