Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.22;
Скачать: CL | DM;

Вниз

Vista + ADOX_TLB   Найти похожие ветки 

 
a1x   (2007-01-28 11:21) [0]

Поставил на днях 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 все работало.


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

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

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


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

Вот строка коннекта:
 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-29 10:58) [3]

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

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


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

Все убрал, оставил только
 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 19:56) [5]

> Причем я коннекчусь не под юзером по-умолчанию, а которого сам создал.
а где и когда? в старой операционке в которой работало? а 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-30 11:57) [6]

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


 
sniknik ©   (2007-01-30 12:52) [7]

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

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


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

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

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

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


 
sniknik ©   (2007-01-30 16:49) [9]

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

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

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

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


 
sniknik ©   (2007-01-30 17:01) [10]

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


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

Наконец-то заработало! А поменял всего лишь следущую строку:
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 тоже работало.

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



Страницы: 1 вся ветка

Текущий архив: 2007.04.22;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.054 c
2-1175592127
SergeyAlexandrovich
2007-04-03 13:22
2007.04.22
проблема с СИшной функцией


4-1164549484
Чапаев
2006-11-26 16:58
2007.04.22
Получить токен SYSTEM


3-1170212620
Flagman
2007-01-31 06:03
2007.04.22
Вычленить время из TIMESTAMP (Oracle)


15-1175171673
ArtemESC
2007-03-29 16:34
2007.04.22
Mail.ru у всех глючит?


2-1175671150
Riply
2007-04-04 11:19
2007.04.22
Определение последнего вызова "колбэка" BindIoCompletionCallback