Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.038 c
3-1169972469
a1x
2007-01-28 11:21
2007.04.22
Vista + ADOX_TLB


15-1174765170
Sam Stone
2007-03-24 22:39
2007.04.22
Аттракцион "Невиданная жадность"


15-1175194588
roamer
2007-03-29 22:56
2007.04.22
Delphi и 1С:Предприятие. Программирование информационного обмена


2-1175260591
G
2007-03-30 17:16
2007.04.22
Ноль


2-1175196193
Riiid
2007-03-29 23:23
2007.04.22
Что в проекте испльзовал?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский