![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Password on DB MS Access [Win95/98, WinME, Win2k, WinXP]
kblc © (2006-02-07 13:10:00)Уважаемые мастера, помогите плз решить проблему. Пытаюсь сменить пароль на файл БД MS Access;
Но это исключение меня уже достало :( . На данный момент пароль стоит пустой, т.е. пароля нет.
исключение:
при выполнении строкиDB:=DAO.OpenDatabase(AFileName,VOptions,VReadOnly,VConnect);попадаю в CheckAutoResult а оттуда уже в SafeCallError(). Там и вызываетсяraise
var
LAST_DATABASE_ERROR: string = '';
//....
function Database_ChgPassword(const ALPassword, ANPassword: string): BOOLEAN;
var
DAO: _DBEngine;
DB: Database;
ClassID: TGUID;
VOptions, VReadOnly, VConnect: OLEVariant;
AFileName, LPassword, NPassword: WideString;
const
V35 = 'DAO.DBEngine.35';
V36 = 'DAO.DBEngine.36';
begin
Result:=FALSE;
try
/////////////////////////////
try
try
ClassID := ProgIDToClassID(v36);
except
ClassID := ProgIDToClassID(v35);
end;
if ALPassword<='' then LPassword:=#0 else LPassword:=WideString(ALPassword);
if ANPassword<='' then NPassword:=#0 else NPassword:=WideString(ANPassword);
AFileName:=WideString('C:\123.mdb'); //файл точно не открыт никакой другой программой
VOptions:=dbDriverCompleteRequired; // либо любые другие возможные (в т.ч. TRUE - как указано во многих примерах)
VReadOnly:=WORDBOOL(FALSE);
VConnect:=WideString(';Pwd=' + LPassword); //VConnect:='' тоже не помогает
DAO:=CreateComObject(ClassID) as _DBEngine;
DB:=DAO.OpenDatabase(AFileName,VOptions,VReadOnly,VConnect); // в этом месте получаю исключение (т.е. при выполнении этой строки). "Ошибочный аргумент"
with DB do
begin
NewPassword(LPassword, NPassword);
Close;
end;
Result:=TRUE;
except
on E: Exception do
begin
LAST_DATABASE_ERROR:=E.Message;
end;
end;
finally
DAO:=nil;
DB:=nil;
/////////////////////////////
end;
end;
П.С.
Может это и не важно, но я использую Delphi 2005
sniknik (2006-02-07 22:22:00) [1]там галочка есть... на третьей закладке мастера составляющего строку, так и называется exclusive, ее поставь, остальные сними при той же строке что была.
kblc (2006-02-07 21:32:00) [2]Можно поподробнее:
Как в строке соединения (ConnectionString [ADOConnection]) указать монопольныйдоступ?
sniknik (2006-02-07 13:49:00) [3]p.s. открыто должно быть экслюзивно(монопольно)
sniknik (2006-02-07 13:47:00) [4]ALTER DATABASE PASSWORD