Цитата:
Сообщение от AlexBolton
по старинке ручками ibexpert`om
|
))) Тогда разберем еще один страшный случай - утерянный пароль админа:
скрипт
Код HTML:
var FSO = NewCOMObject('Scripting.FileSystemObject'),
FDBServ = 'localhost',
FBSPort = 14357,
FBCFile = FSO.GetParentFolderName(Action.Control.Owner.Owner.Owner.ExeName) + '\\' + 'fbclient.dll',
FDBFile = new Object(),
NewFile = new String(),
ConnectionString = new String(),
Path = system.askFileName('FDB');
if (FSO.FileExists(Path)) {
try {
FDBFile = FSO.GetFile(Path);
system.sleep(200);
NewFile = FSO.GetParentFolderName(FDBFile.Path) + '\\' + FSO.GetBaseName(FDBFile.Name) + '_V9.FDB';
FDBFile.Copy(NewFile);
system.log('Новый файл БД: ' + NewFile);
system.sleep(200);
ConnectionString = 'Driver={Firebird/InterBase(r) driver};' +
'Dbname=' + FDBServ + '/' + FBSPort + ':' + NewFile + ';' +
'CHARSET=NONE;' +
'PWD=masterkey;' +
'UID=SYSDBA;' +
'Client=' + FBCFile + ';';
system.log('Строка соединения: ' + ConnectionString);
var Connection = NewCOMObject('ADODB.Connection'),
Recordset = NewCOMObject('ADODB.Recordset'),
Query = 'Select\n' +
' PARAM_BASE.PARAM, ' +
' PARAM_BASE.VALUE_P\n' +
'From\n' +
' PARAM_BASE';
try {
Connection.Open(ConnectionString);
Recordset.ActiveConnection = Connection;
Recordset.CursorType = 3;
Recordset.LockType = 3;
Recordset.Open(Query);
Recordset.MoveFirst();
while (Recordset.EOF == 0) {
if (Recordset.Fields.Item('PARAM').Value == 'VERSION') {
system.log('Текущее значение: ' + Recordset.Fields.Item('VALUE_P').Value);
Recordset.Fields.Item('VALUE_P').Value = 10; //4 - БМ v.8; 10 - БМ v.9; 14 - БМ v.10
system.log('Новое значение: ' + Recordset.Fields.Item('VALUE_P').Value);
Recordset.Update();
};
Recordset.MoveNext();
};
} catch (Error) {
Recordset.Close();
Connection.Close();
alert(decodeURIComponent(escape(Error.message)));
Action.Cancel();
};
Recordset.Close();
Query = 'Select\n' +
' USERS_BASE.ID_UB, ' +
' USERS_BASE.NAME_USER, ' +
' USERS_BASE.PASS\n' +
'From\n' +
' USERS_BASE';
try {
Recordset.Open(Query);
Recordset.MoveFirst();
while (Recordset.EOF == 0) {
if (Recordset.Fields.Item('ID_UB').Value != 1) {
system.log('Пользователь базы: "' + Recordset.Fields.Item('NAME_USER').Value + '" - удален.');
Recordset.Delete();
Recordset.Update();
} else {
system.log('Пароль пользователя: "' + Recordset.Fields.Item('NAME_USER').Value + '" - удален.');
Recordset.Fields.Item('PASS').Value = '';
Recordset.Update();
};
Recordset.MoveNext();
};
} catch (Error) {
Recordset.Close();
Connection.Close();
alert(decodeURIComponent(escape(Error.message)));
Action.Cancel();
};
Recordset.Close();
Connection.Close();
system.log('Работа скрипта завершена.');
alert('Файл БД скопирован и преобразован.');
} catch (Error) {
alert('Копировать файл БД неудалось, возможно файл занят.\n' +
decodeURIComponent(escape(Error.message)));
Action.Cancel();
};
};
[свернуть]
Добавлена функция удаления всех пользователей кроме администратора и удаление пароля администратора.