Форум: "Базы";
Текущий архив: 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.043 c