Тема: HTA: SQLToolz
Многофункциональная утилита для работы с базами данных.
<HTML>
<HEAD>
<TITLE>SQL TOOLZ ( Author - null )</TITLE>
<META content=JavaScript name=vs_defaultClientScript>
<META http-equiv=Content-Type content="text/html; charset=windows-1251">
<SCRIPT language=javascript>
<!-- скрыть скрипт от браузеров не поддерживающих их
var flag=0; // переменная для определения был ли сделан запрос на поиск sql сереверов в сети
var odbclistarr = new Array(); // массив в котром хранятся имена всех Odbc источников данных
var sqlserverlistarr = new Array(); // массив в котром хранятся имена всех найденных в сети sql серверов
var AllArray = new Array();
var interval=""; // интервал по истечении которого будет запускаться функуция SHOW PROCESSLIST для сервера MySql
var DSNSqlserver=""; // если эта переменная не пустая, значит пользователь хочет выполнить запрос к Sql серверу
function resize() // изменение размера окна к приемлемому виду
{
window.window.resizeTo(1024,768);
}
//инструменты для работы с скуль серверами и другими базами, возможно этой функции не будет в дальнейшем
function raznoe()
{
if (raznoechoise.value == "odbc") // если выбран пункт - источники данных odbc, то выводим список источников данных (функция списка источников данных - сперта гдето с нэта)
{
var odbcsource=""; // инициализируем переменную в котрую будет записан список источников данных
resultat.innerText=odbcsource; // очищаем поле "результат"
sRegPath = "Software\\ODBC\\ODBC.INI"; // путь в реестре к источникам данных
oLoc = new ActiveXObject("WbemScripting.SWbemLocator"); // создаем wmi объект с помощью которого переберем все ключи в ключе ODBC.INI
oSvc = oLoc.ConnectServer(null, "root\\default"); // соединяемся с сервером wmi (локально)
oReg = oSvc.Get("StdRegProv"); //не знаю чё тут написано :)
oMethod = oReg.Methods_.Item("EnumKey");
oInParam = oMethod.InParameters.SpawnInstance_(); // чё то связанное с асинхронным запросом вроде
oInParam.hDefKey = '&H80000002'; // HKLM
oInParam.sSubKeyName = sRegPath; //
oOutParam = oReg.ExecMethod_(oMethod.Name, oInParam);
aNames = oOutParam.sNames.toArray();
for (i = 0; i < aNames.length; i++)
{
oMethod = oReg.Methods_.Item("GetStringValue");
oInParam = oMethod.InParameters.SpawnInstance_();
oInParam.hDefKey = '&H80000002'; // HKLM
oInParam.sSubKeyName = sRegPath;
oInParam.sValueName = aNames[i];
oOutParam = oReg.ExecMethod_(oMethod.Name, oInParam);
if ((aNames[i]!="ODBC Data Sources") & (aNames[i]!="ODBC File DSN") ) // в ключе с источниками данных, есть две ненужные записи. Выкидываем их
{
odbcsource=odbcsource+aNames[i]+"\n"; // результат - список источников данных
}
}
resultat.innerText=odbcsource; // записываем список источников данных в текстовое поле
}
if (raznoechoise.value == "createmdb") //создаем базу данных mdb
{
dbname=window.prompt("ВВЕДИТЕ ПУТЬ К СОЗДАВАЕМОЙ БАЗЕ ДАННЫХ","c:\\Database.mdb"); //выводим окно с запросом имени файла для базы данных
var Catalog = new ActiveXObject ("ADOX.Catalog");
Catalog.Create ("Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+dbname); //создаем базу
}
if (raznoechoise.value =="listtables") // список таблиц источника данных, получаемый путем обращения к схеме
{
checked=DataSourceChoise("odbc");
if (checked==1)
{
var objConn = new ActiveXObject ("ADODB.Connection") ;
var objRecordset = new ActiveXObject ("ADODB.RecordSet");
adSchemaTables=20; //переменная для получения списка таблиц из схемы
var listtables="";
window.resultat.innerText=""; //очищаем поле результата перед выводом в него списка таблиц
objConn.ConnectionString="DSN="+window.dbsource.value; // строка для соединения с источником данных
objConn.Open();
objRecordset = objConn.OpenSchema(adSchemaTables); //получаем список таблиц
while ( !objRecordset.EOF) // в цикле записываем список таблиц в переменную listtables
{
listtables=listtables+objRecordset("table_name")+"\n";
objRecordset.MoveNext;
}
window.resultat.innerText= listtables; //помещаем результат в текстовое поле
objRecordset.Close;
}
}
}
function DataSourceChoise(type) // самая мудрёная и хитрая функция для определения - правильно ли выбрал пользователь источник данных или sql сервер и ввел ли имя пользователя и пароль для sql сервера
{
var serverlist=0; // переменная определяющая - был ли выбран источник данных или sql сервер
DSNSqlserver="";
if (type=="sqlserver")
{
datatype=sqlserverlistarr; // datatype присваиваем значения массива со списком sql серверов
}
if (type=="odbc") // если ф-я была вызвана с запросом определиться ODBC источниками данных
{
datatype=odbclistarr; // datatype присваиваем значения массива со списком ODBC источников данных
}
if (type=="all") //// если ф-я была вызвана с запросом определиться любым источнико данных или sql сервером, то в массив AllArray записываем все строки из массивов со списком источников дааных и sql серверов
{
for (i=1;i<odbclistarr.length;i++)
{
AllArray[i]=odbclistarr[i];
}
for (i=1;i<sqlserverlistarr.length;i++)
{
AllArray[odbclistarr.length+(i-1)]=sqlserverlistarr[i];
}
datatype=AllArray;
}
// если запись в поле dbsource совпадет с одной из строк из массива со список источников данных или sql серверов (в зависимости от того с каим параметром была вызвана функция), то функция возратит 1, иначе 0
for (i=0;i<=datatype.length;i++)
{
if (window.dbsource.value != datatype[i])
{
serverlist=0; // присваиваем переменной serverlist значение ноль, если значение выбранного поля в dbsource не совпало ни с одним занчением из массива (списка источников данных и/или sql серверов (в зависимости от того с каким параметром была вызвана функция))
}
else
// если значение выбранного поля в dbsource совпало с одним из значений списка то serverlist=1 и если функция была вызвана с параметром all, то определяем что именно выбрано - источник данных или sql сервер, в зависимости от результата выдаем соответствующие сообщения - если не хватает каких либо параметров (напрмер имени юзера и пароля для sql сервера)
{
serverlist=1;
if ((type=="all") & (i>=odbclistarr.length))
{
type="sqlserver";
}
if ((type=="all") & (i<odbclistarr.length))
{
type="odbc";
DSNSqlserver="DSN="+window.dbsource.value;
}
if ((type=="sqlserver") & (window.winauth.checked == false))
{
DSNSqlserver="Driver={SQL Server}; Server="+window.dbsource.value+"; Database="+window.databasename.value+"; Uid="+window.login.value+"; Pwd="+window.pass.value+";";
}
if ((type=="sqlserver") & (window.winauth.checked == true))
{
DSNSqlserver="Driver={SQL Server}; Server="+window.dbsource.value+"; Database="+window.databasename.value+"; Trusted_Connection=yes";
}
if (type=="odbc")
{
DSNSqlserver="DSN="+window.dbsource.value;
}
break;
}
}
// тут и так всё понятно
if ( (serverlist == 0) & (type=="sqlserver") )
{
alert ("Не задано (или неправильно задано) имя Sql сервера\nВыберите имя Sql сервера из списка источников данных");
}
if ( (serverlist == 0) && (type=="odbc") )
{
alert ("Не указан (или неправильно указан) источник данных ODBC! Выберите источник данных ODBC из выпадающего списка");
}
if ( (type=="sqlserver") & (window.winauth.checked == false) )
{
if ((window.login.value =="") | (window.pass.value == ""))
{
alert("Введите имя пользователя и/или пароль, для подключения к Sql Server-у, \nили установите режим аутентификациии - windows!!!");
serverlist=0;
}
}
if ( (serverlist == 0) & (type=="all") )
{
alert ("Выберите из списка Источник данных или Sql Server");
}
return serverlist;
}
function SqlServer() // функция для работы с sql сервером
{
// список sql серверов в локальной сети
if (SqlServerChoise.value == "sqlserverslist")
{
var oSQLApp = new ActiveXObject ("SQLDMO.Application") //инициируем объект
var Names = oSQLApp.ListAvailableSQLServers(); // присваиваем переменной список серверов в сети
servers="";
window.resultat.innerText=" "; // очищаем поле результата в которое будет записан список серверов
for (i= 1; i<= Names.Count; i++) // в цикле читаем список и записываем в поле
{
servers=servers+Names.Item(i)+"\n";
}
window.resultat.innerText=servers;
}
// свойства скуль сервера
if (SqlServerChoise.value=="ServerProperty")
{
checked=DataSourceChoise("sqlserver");
if (checked==1) // если были введены имя сервера логин и пароль то
{
property=""; // создаем строковую переменную для внесения в неё списка свойств sql сервера
var oServer = new ActiveXObject ("SQLDMO.SQLServer2"); //создаем объект
if (window.winauth.checked == false)
{
oServer.Connect(window.dbsource.value,window.login.value,window.pass.value); // подключаемся к серверу sql аутентификация
}
else
{
oServer.LoginSecure = true
oServer.Connect(window.dbsource.value);
}
// список свойств сервера
property=property+"Кодовая страница сервера - "+oServer.CodePage +"\n";
property=property+"Имя Sql сервера - " +oServer.Name+ "\n";
property=property+"Реальное сетевое имя SQL Server - " +oServer.NetName +"\n";
property=property+"Региональные установки, для драйвера ODBC - " +oServer.RegionalSetting +"\n";
property=property+"Обладаете ли вы правами админа на сервере - " +oServer.SaLogin +"\n";
property=property+"Cостояние SQL Servera - ";
switch (oServer.Status)
{
case 0:
property=property+"не определено\n";
break;
case 1 :
property=property+"рабочее состояние\n";
break;
case 2 :
property=property+"пауза\n";
break;
case 3 :
property=property+"остановлен\n";
break;
case 4 :
property=property+"переход из состояния \"остановлено\" в состояние \"запущено\"\n";
break;
case 5 :
property=property+"переход: из \"запущено\" в \"остановлено\"\n";
break;
case 6 :
property=property+"сервер запускается после приостановки работы\n";
break;
case 7 :
property=property+"работа сервера приостанавливается\n";
break;
}
property=property+"Редакция SQL Server - ";
versionserver=oServer.IsPackage();
switch (versionserver)
{
case 0:
property=property+"не определено\n";
break;
case 1 :
property=property+"Desktop Edition\n";
break;
case 2 :
property=property+"Standart Sdition\n";
break;
case 3 :
property=property+"Enterprice или Developer edition\n";
break;
}
window.resultat.innerText=property; //записываем результат в поле
oServer.Disconnect(); //отсоединяемся от сервера
}
}
if (SqlServerChoise.value == "adSchemaCatalogs") // функция получения списка баз данных sql сервера
{
checked=DataSourceChoise("sqlserver");
if (checked==1)
{
var objConn = new ActiveXObject ("ADODB.Connection") ;
var objRecordset = new ActiveXObject ("ADODB.RecordSet");
objConn.ConnectionString=DSNSqlserver;
objConn.Open();
objRecordset = objConn.OpenSchema(1); // 1- adSchemaCatalogs
dblist=objRecordset.GetString;
window.resultat.innerText=dblist;
}
}
if (SqlServerChoise.value == "EnumProcesses") // функция получения списка процессов sql сервера
{
checked=DataSourceChoise("sqlserver");
if (checked==1)
{
var oServer = new ActiveXObject ("SQLDMO.SQLServer"); //создаем объект
if (window.winauth.checked == false)
{
oServer.Connect(window.dbsource.value,window.login.value,window.pass.value); // подключаемся к серверу, sql аутентификация
}
else
{
oServer.LoginSecure = true
oServer.Connect(window.dbsource.value); //либо windows аутентификация
}
var Processes = oServer.EnumProcesses(); //получаем список процессов на сервере
//засовываем результат в excel
var oXL = new ActiveXObject ("Excel.Application");
oXL.Visible = true;
oXL.Caption = "Enum Processes Sql Server";
oXL.WorkBooks.Add();
for (i=1;i<=Processes.Columns;i++)
{
oXL.ActiveCell.Cells(1,i) = Processes.ColumnName(i);
for (j=1;j<=Processes.Rows;j++)
{
oXL.ActiveCell.Cells(j+2,i) = Processes.GetColumnString(j,i);
}
}
}
}
if (SqlServerChoise.value == "EnumLocks") // функция получения списка блокировок sql сервера
{
checked=DataSourceChoise("sqlserver");
if (checked==1)
{
var oServer = new ActiveXObject ("SQLDMO.SQLServer"); //создаем объект
if (window.winauth.checked == false)
{
oServer.Connect(window.dbsource.value,window.login.value,window.pass.value); // подключаемся к серверу sql аутентификация
}
else
{
oServer.LoginSecure = true
oServer.Connect(window.dbsource.value); //либо windows аутентификация
}
var locks = oServer.EnumLocks(); //получаем список процессов на сервере
//засовываем результат в excel
var oXL = new ActiveXObject ("Excel.Application");
oXL.Visible = true;
oXL.Caption = "Enum Locks Sql Server";
oXL.WorkBooks.Add();
for (i=1;i<=locks.Columns;i++)
{
oXL.ActiveCell.Cells(1,i) = locks.ColumnName(i);
for (j=1;j<=locks.Rows;j++)
{
oXL.ActiveCell.Cells(j+2,i) = locks.GetColumnString(j,i);
}
}
}
}
if (SqlServerChoise.value == "ListMembers") //к каким группам принадлежит текущий юзер
{
checked=DataSourceChoise("sqlserver");
if (checked==1)
{
var oServer = new ActiveXObject ("SQLDMO.SQLServer"); //создаем объект
var memberslist="Роли пользователя на сервере\n--------------------------\n";
if (window.winauth.checked == false)
{
oServer.Connect(window.dbsource.value,window.login.value,window.pass.value); // подключаемся к серверу sql аутентификация
}
else
{
oServer.LoginSecure = true
oServer.Connect(window.dbsource.value);
}
var members = oServer.ListMembers(3); //отображает права юзера на сервере и в базе данных
for (i=1;i<=members.Count;i++)
{
memberslist=memberslist+members.Item(i)+"\n";
}
window.resultat.innerText=memberslist;
}
}
if (SqlServerChoise.value=="ScriptTablDB") // отскриптовать таблицу или базу данных
{
checked=DataSourceChoise("sqlserver");
if (checked==1) // если были введены имя сервера логин и пароль то
{
var oServer = new ActiveXObject ("SQLDMO.SQLServer"); //создаем объект
if (window.winauth.checked == false)
{
oServer.Connect(window.dbsource.value,window.login.value,window.pass.value); // подключаемся к серверу sql аутентификация
}
else
{
oServer.LoginSecure = true
oServer.Connect(window.dbsource.value);
}
//спрашиваем имя базы данных или таблицы которую нужно отскриптовать, если имя таблицы не введено то считаем что нужно отскриптовать базу данных
DBname=window.prompt("ВВЕДИТЕ ИМЯ БАЗЫ ДАННЫХ, ЕСЛИ ХОТИТЕ ПОЛУЧИТЬ СКРИПТ БАЗЫ, ТО НЕ ЗАПОЛНЯЙТЕ ОКНО С ИМЕНЕМ ТАБЛИЦЫ:","master");
TableName = window.prompt("ВВЕДИТЕ ИМЯ ТАБЛИЦЫ:","");
if (TableName!="")
{
var Target = oServer.Databases(DBname).Tables(TableName);
}
else
{
var Target = oServer.Databases(DBname);
}
window.resultat.innerText=Target.Script();
}
}
if (SqlServerChoise.value=="createuser") // создать логин в базе данных
{
checked=DataSourceChoise("sqlserver");
if (checked==1) // если были введены имя сервера логин и пароль то
{
var oServer = new ActiveXObject ("SQLDMO.SQLServer2"); //создаем объект
var oLogin = new ActiveXObject ("SQLDMO.Login")
var WshNetwork = new ActiveXObject("WScript.Network");
var username=WshNetwork.ComputerName+"\\"+WshNetwork.UserName;
if (window.winauth.checked == false)
{
oServer.Connect(window.dbsource.value,window.login.value,window.pass.value); // подключаемся к серверу, sql аутентификация
}
else
{
oServer.LoginSecure = true
oServer.Connect(window.dbsource.value); // либо windows аутентификация
}
oLogin.Name = window.prompt("ВВЕДИТЕ ЛОГИН (ФОРМАТЫ): 1.DomainName\\UserName(или GroupName) 2.CompName\\UserName(или GroupName) 3.UserName (SqlAuth)",username); //выводим окно с запросом имени пользователя
oLogin.Type= window.prompt("ВВЕДИТЕ ТИП УЧЕТНОЙ ЗАПИСИ: 0-уч. запись пользователя windows 1-уч. запись группы windows 2-sql пользователь","0"); //выводим окно с запросом имени пользователя
oServer.Logins.Add (oLogin);
alert ("учетная запись создана!")
}
}
function StoredProcedures (ProcedureName, output) // функция для запуска хранимой процедуры, с выводом либо в ексель либо на форму
{
checked=DataSourceChoise("sqlserver");
if (checked==1)
{
var objConn = new ActiveXObject ("ADODB.Connection") ;
var objRecordset = new ActiveXObject ("ADODB.RecordSet");
objConn.ConnectionString=DSNSqlserver; //строка подключения к источнику данных
objConn.Open();
objRecordset = objConn.Execute(ProcedureName); // выполняем запрос (это может быть как имя процедуры так и sql запрос)
// выводим результат либо в ексель либо на форму
if (output == "excel")
{
var oXL = new ActiveXObject ("Excel.Application");
oXL.Visible = true;
oXL.Caption = ProcedureName;
oXL.WorkBooks.Add();
for (i=0; i<objRecordset.Fields.count;i++) // в цикле танго :)
{
oXL.ActiveCell.Cells(1,i+1).value=objRecordset.Fields.Item(i).Name; // сначала заполняем первую строчку именами полей запроса
}
i=0;
while (objRecordset.EOF != true)
{
i=i+1;
for (j=1;j<=objRecordset.Fields.Count;j++)
{
oXL.ActiveCell.Cells(i+2,j).value=objRecordset.Fields.Item(j-1).value;
}
objRecordset.MoveNext();
}
oXL.Columns.AutoFit(); // автоподборка ширины столбцов
}
if (output=="native")
{
fields="";
strdb = objRecordset.GetString;
for (i=0; i<objRecordset.Fields.count;i++) // в цикле записываем список полей в переменную fields
{
fields=fields+objRecordset.Fields.Item(i).Name+"\t";
}
window.resultat.innerText=fields+"\n------------------------------------------------\n"+strdb;
}
objConn.Close();
}
}
//функции для выполенения хранимых процедур
if (SqlServerChoise.value=="sp_help")
{
StoredProcedures ("sp_help","excel");
}
if (SqlServerChoise.value=="sp_helpdb")
{
StoredProcedures ("sp_helpdb","excel");
}
if (SqlServerChoise.value=="version")
{
StoredProcedures ("select @@version","native");
}
if (SqlServerChoise.value=="sp_tables")
{
StoredProcedures ("sp_tables","excel");
}
if (SqlServerChoise.value=="InfSchemaTables")
{
StoredProcedures ("SELECT * FROM INFORMATION_SCHEMA.TABLES","excel");
}
if (SqlServerChoise.value=="InfSchemaViews")
{
StoredProcedures ("SELECT * FROM INFORMATION_SCHEMA.VIEWS","excel");
}
if (SqlServerChoise.value=="SysDatabaseFiles")
{
StoredProcedures ("select * from sys.database_files","excel");
}
if (SqlServerChoise.value=="SysBackup_devices")
{
StoredProcedures ("select * from sys.backup_devices","excel");
}
if (SqlServerChoise.value=="sys.filegroups")
{
StoredProcedures ("select * from sys.filegroups","excel");
}
if (SqlServerChoise.value=="sys.indexes")
{
StoredProcedures ("select * from sys.indexes","excel");
}
if (SqlServerChoise.value=="sys.foreign_keys")
{
StoredProcedures ("select * from sys.foreign_keys","excel");
}
if (SqlServerChoise.value=="sys.master_files")
{
StoredProcedures ("select * from sys.master_files","excel");
}
if (SqlServerChoise.value=="sys.remote_logins")
{
StoredProcedures ("select * from sys.remote_logins","excel");
}
if (SqlServerChoise.value=="sys.sql_logins")
{
StoredProcedures ("select * from sys.sql_logins","excel");
}
if (SqlServerChoise.value=="sys.syslogins")
{
StoredProcedures ("select * from sys.syslogins","excel");
}
if (SqlServerChoise.value=="sp_helpdevice")
{
StoredProcedures ("sp_helpdevice","excel");
}
if (SqlServerChoise.value=="sp_helplogins")
{
StoredProcedures ("sp_helplogins","excel");
}
if (SqlServerChoise.value=="sp_helpserver")
{
StoredProcedures ("sp_helpserver","excel");
}
if (SqlServerChoise.value=="sp_linkedservers")
{
StoredProcedures ("sp_linkedservers","excel");
}
if (SqlServerChoise.value=="sp_monitor")
{
StoredProcedures ("sp_monitor","excel");
}
if (SqlServerChoise.value=="sp_oledb_defdb")
{
StoredProcedures ("sp_oledb_defdb","excel");
}
if (SqlServerChoise.value=="sp_readerrorlog")
{
StoredProcedures ("sp_readerrorlog","excel");
}
if (SqlServerChoise.value=="sp_server_info")
{
StoredProcedures ("sp_server_info","excel");
}
if (SqlServerChoise.value=="sp_who")
{
StoredProcedures ("sp_who","excel");
}
if (SqlServerChoise.value=="sp_who2")
{
StoredProcedures ("sp_who2","excel");
}
if (SqlServerChoise.value=="sp_MSgetversion")
{
StoredProcedures ("sp_MSgetversion","excel");
}
}
function FindSource() // функция заполняет выпадающий список dbsource списком odbc источников данных и sql серверов
{
if (flag!=1) // по флагу будем определять делели ли мы уже запрос на поиск мс скуль серверов , если делали, то повторяться не будем
{
var arrindex=1;
window.dbsource.clearAttributes(); // очищаем список селект с именем dbsource
alert ("Выполняется поиск источников данных, программа \"зависнет\" на некоторое время");
var oNewNode = document.createElement("option"); // создаем элемент для списка селект
window.dbsource.appendChild(oNewNode); // добавляем новый узел в dbsource
oNewNode.innerHTML="---SQL сервера сети---"; // Текст элемента
var oSQLApp = new ActiveXObject ("SQLDMO.Application")
var Names = oSQLApp.ListAvailableSQLServers(); // список доступных мс скуль серверов
for (i= 1; i<= Names.Count; i++) // в цикле пишем все найденные сервера в список селект
{
var oNewNode = document.createElement("option"); // создаем элемент для списка селект
window.dbsource.appendChild(oNewNode); // добавляем новый узел в dbsource
oNewNode.innerText=Names.Item(i); //добавляем очередной элемент
oNewNode.value=Names.Item(i);
sqlserverlistarr[i]=Names.Item(i); // заполняем списком sql серверов сети, массив sqlserverlistarr
}
var oNewNode = document.createElement("option"); // создаем элемент для списка селект
window.dbsource.appendChild(oNewNode); // добавляем новый узел в dbsource
oNewNode.innerHTML="---ODBC источники данных---"; // Текст элемента
//повторяюсь - функция сперта откуда-то из инэта, поэтому комментов мало, да и лень мне выписывать
sRegPath = "Software\\ODBC\\ODBC.INI";
oLoc = new ActiveXObject("WbemScripting.SWbemLocator");
oSvc = oLoc.ConnectServer(null, "root\\default");
oReg = oSvc.Get("StdRegProv");
oMethod = oReg.Methods_.Item("EnumKey");
oInParam = oMethod.InParameters.SpawnInstance_();
oInParam.hDefKey = '&H80000002'; // HKLM
oInParam.sSubKeyName = sRegPath;
oOutParam = oReg.ExecMethod_(oMethod.Name, oInParam);
aNames = oOutParam.sNames.toArray();
for (i = 0; i < aNames.length; i++)
{
oMethod = oReg.Methods_.Item("GetStringValue");
oInParam = oMethod.InParameters.SpawnInstance_();
oInParam.hDefKey = '&H80000002';
oInParam.sSubKeyName = sRegPath;
oInParam.sValueName = aNames[i];
oOutParam = oReg.ExecMethod_(oMethod.Name, oInParam);
if ((aNames[i]!="ODBC Data Sources") & (aNames[i]!="ODBC File DSN") )
{
var oNewNode = document.createElement("option"); // создаем элемент для списка селект
window.dbsource.appendChild(oNewNode); // добавляем новый узел в dbsource
oNewNode.innerText=aNames[i];
oNewNode.value=aNames[i];
odbclistarr[arrindex]=aNames[i]; // // заполняем списком источников данных, массив sqlserverlistarr
arrindex=arrindex+1; // отдельная переменная для заполнения массива, чтобы в него не добавились две undefined ячейки, которые получаются в результате исключения строк "ODBC Data Sources" и "ODBC File DSN" из списка источников данных
}
}
}
if (flag!=1)
{
alert ("Поиск источников данных выполнен, \nтеперь вы можете просмотреть полученные результаты, нажав на выпадающий список - \"Выберите источник данных\"");
}
flag=1; // по флагу будем определять делали ли мы уже запрос на поиск мс скуль серверов в сети, если делали, то повторяться не будем, потому что долго он их ищет
}
function mysql() // функция для работы с Mysql сервером
{
function MySqlQuery (QueryStr, output) // функция для запуска хранимой процедуры, с выводом либо в ексель либо на форму
{
checked=DataSourceChoise("odbc");
if (checked==1)
{
var objConn = new ActiveXObject ("ADODB.Connection") ;
var objRecordset = new ActiveXObject ("ADODB.RecordSet");
objConn.ConnectionString=DSNSqlserver; //строка подключения к источнику данных
fields="";
objConn.Open();
objRecordset = objConn.Execute(QueryStr); // выполняем запрос
// выводим результат либо в ексель либо на форму
if (output == "excel")
{
var oXL = new ActiveXObject ("Excel.Application");
oXL.Visible = true;
oXL.Caption = QueryStr;
oXL.WorkBooks.Add();
for (i=0; i<objRecordset.Fields.count;i++) // в цикле танго :)
{
oXL.ActiveCell.Cells(1,i+1).value=objRecordset.Fields.Item(i).Name; // сначала заполняем первую строчку именами полей запроса
}
i=0;
while (objRecordset.EOF != true)
{
i=i+1;
for (j=1;j<=objRecordset.Fields.Count;j++)
{
oXL.ActiveCell.Cells(i+2,j).value=objRecordset.Fields.Item(j-1).value;
}
objRecordset.MoveNext();
}
}
oXL.Columns.AutoFit(); // автоподборка ширины столбцов
if (output=="native")
{
fields="";
strdb = objRecordset.GetString;
for (i=0; i<objRecordset.Fields.count;i++) // в цикле записываем список полей в переменную fields
{
fields=fields+objRecordset.Fields.Item(i).Name+"\t";
}
window.resultat.innerText=fields+"\n------------------------------------------------\n"+strdb;
}
objConn.Close();
}
}
if (mysqlchoise.value == "showdatabases")
{
MySqlQuery ("show databases","native");
}
if (mysqlchoise.value == "showtables") // список таблиц текущей базы данных
{
MySqlQuery ("show tables","native");
}
if (mysqlchoise.value == "showfields") //список полей таблицы базы данных
{
tablename=window.prompt("ВВЕДИТЕ ИМЯ ТАБЛИЦЫ, ОПИСАНИЕ КОТОРОЙ НЕОБХОДИМО ПОЛУЧИТЬ","user"); //выводим окно с запросом имени таблицы
MySqlQuery("describe "+tablename,"native");
}
if (mysqlchoise.value == "processlist") // список выполняющихся в данный момент запросов от клиентов к mysql серверу
{
MySqlQuery( "SHOW PROCESSLIST","native");
if (interval == "")
{
interval=window.prompt("ЗАДАЙТЕ ИНТЕРВАЛ ОБНОВЛЕНИЯ В СЕКУНДАХ",10); //выводим окно с запросом имени таблицы
timerID = setTimeout("mysql()",interval*1000);
}
else
{
timerID = setTimeout("mysql()",interval*1000);
}
}
if (mysqlchoise.value == "showversion") // версия сервера и имя текущего пользователя
{
vers=MySqlQuery ("select version()","native");
}
if (mysqlchoise.value == "curruser")
{
MySqlQuery ("select user()","native");
}
if (mysqlchoise.value == "tablesstatus") // информация о всех таблицах базы данных
{
dbname=window.prompt("ВВЕДИТЕ ИМЯ БАЗЫ ДАННЫХ ИНФОРМАЦИЮ О ТАБЛИЦАХ КОТОРОЙ НЕОБХОДИМО ПОЛУЧИТЬ","mysql"); //выводим окно с запросом имени таблицы
MySqlQuery ("SHOW TABLE STATUS FROM "+dbname,"excel");
}
if (mysqlchoise.value == "showcreatetable") // системные переменные my sql сервера
{
tablename=window.prompt("ВВЕДИТЕ ИМЯ ТАБЛИЦЫ, ОПИСАНИЕ КОТОРОЙ НЕОБХОДИМО ПОЛУЧИТЬ В ФОРМАТЕ ЗАПРОСА SQL","user"); //выводим окно с запросом имени таблицы
MySqlQuery("show create table "+tablename,"native");
}
if (mysqlchoise.value == "showvariables") // системные переменные сервера
{
MySqlQuery("show variables","native")
}
if (mysqlchoise.value == "showstatus") // статус (статистика сервера)
{
MySqlQuery ("show status", "native");
}
if (mysqlchoise.value == "checktable") //проверка таблицы
{
tablename=window.prompt("ВВЕДИТЕ ИМЯ ТАБЛИЦЫ, КОТОРУЮ НЕОБХОДИМО ПРОВЕРИТЬ НА НАЛИЧИЕ ОШИБОК","user"); //выводим окно с запросом имени таблицы
MySqlQuery ("check table "+tablename,"native");
}
if (mysqlchoise.value == "optimizetable") //оптимизация таблицы
{
tablename=window.prompt("ВВЕДИТЕ ИМЯ ТАБЛИЦЫ, КОТОРУЮ НЕОБХОДИМО ОПТИМИЗИРОВАТЬ","user"); //выводим окно с запросом имени таблицы
MySqlQuery ("optimize table "+tablename,"native");
}
if (mysqlchoise.value == "repairtable") //восстановление битой таблицы
{
tablename=window.prompt("ВВЕДИТЕ ИМЯ ТАБЛИЦЫ, КОТОРУЮ НЕОБХОДИМО ОПТИМИЗИРОВАТЬ","user"); //выводим окно с запросом имени таблицы
MySqlQuery("repair table "+tablename,"native");
}
}
function ExecQuery(typequery) // выполнить запрос к базе данных
{
if (window.sqlqery.value !=="")
{
checked=DataSourceChoise("all"); // нам можно использовать и источники данных и список sql серверов сети
if (checked==1)
{
var objConn = new ActiveXObject ("ADODB.Connection") ;
if (DSNSqlserver != "")
{
objConn.ConnectionString=DSNSqlserver;
}
else
{
objConn.ConnectionString=window.dbsource.value;
}
window.resultat.innerText=" "; // очищаем поле с результатом выполненных команд
strdb="";
QueryStr=window.sqlqery.value; // запрос к базе данных
objConn.Open();
objRecordset = objConn.Execute(QueryStr); //выполнить запрос
if (typequery=="excel") // сработает если будет нажата кнопка - "Выполнить запрос (Excel)"
{
var oXL = new ActiveXObject ("Excel.Application");
oXL.Visible = true;
oXL.Caption=QueryStr;
oXL.WorkBooks.Add();
for (i=0; i<objRecordset.Fields.count;i++) // в цикле танго :)
{
oXL.ActiveCell.Cells(1,i+1).value=objRecordset.Fields.Item(i).Name; // сначала заполняем первую строчку именами полей запроса
}
i=0;
while (objRecordset.EOF != true)
{
i=i+1;
for (j=1;j<=objRecordset.Fields.Count;j++)
{
oXL.ActiveCell.Cells(i+2,j).value=objRecordset.Fields.Item(j-1).value;
}
objRecordset.MoveNext();
}
oXL.Columns.AutoFit(); // автоподборка ширины столбцов
}
if (typequery=="native") // данные запроса будут возращены в текстовое поле на форме
{
fields="";
//strdb = objRecordset.GetString;
for (i=0; i<objRecordset.Fields.count;i++) // в цикле записываем список полей в переменную fields
{
fields=fields+objRecordset.Fields.Item(i).Name+"\t";
}
window.resultat.innerText=fields+"\n------------------------------------------------\n"
values="\n";
i=0;
while (objRecordset.EOF != true)
{
i=i+1;
for (j=1;j<=objRecordset.Fields.Count;j++)
{
values=values+objRecordset.Fields.Item(j-1).value+"\t";
}
objRecordset.MoveNext();
values=values+"\n";
}
window.resultat.innerText=window.resultat.innerText+values;
}
objConn.Close();
}
}
else
{
alert ("Вы не ввели запрос!");
}
}
function notes() //функция добавляющая заметку в конец этого файла, заметки хранятся в текущем файле
{
// функция запроса добавления заметки ()
function requestaddnote()
{
addnote=window.confirm("Добавить заметку? Если нужно просмотреть заметки нажмите ОТМЕНА!");
if (addnote==true)
{
NoteText = window.prompt("Введите текст заметки", "текст_заметки");
if (NoteText == "")
{
alert ("Вы ничего не ввели!");
}
else
{
AddNotes (NoteText) // запись заметки в файл
}
}
else
{
ReadAllNotes (); //чтение заметок из файла
}
}
// чтение заметок из файла
function ReadAllNotes ()
{
var fso= new ActiveXObject ("Scripting.FileSystemObject"); // создать объект FSO
var itog="";
UrlPath=window.location.pathname;
//FileNamePath=UrlPath.replace(/\\/g,"\\\\");
FileNamePath=UrlPath.replace(/%20/g," ");
txt=fso.OpenTextFile(FileNamePath,1,false); // открыть файл для чтения
for (i=1;i<900;i++)
{
txt.SkipLine() // пропускаем бОльшую часть файла чтобы лишнюю нагрузку на комп не создавать, не сравнивать бесполезные строки
}
while (txt.AtEndOfStream != true) // пока не достигнут конец файла,
{
Kol_voStrok=txt.Line; // s= номер текущей строки открытого файла
CurrentStroka = txt.ReadLine(); // прочитать строку (то есть перейти к следующей строке)
// если в текущей строке найдена нужная подстрока, то читаем все логины в файле
if (CurrentStroka == "<!--notes-->")
{
while (txt.AtEndOfStream != true)
{
StrokaPoiska = txt.ReadLine();
StrokaPoiska=StrokaPoiska.replace(/<!--/g," ");
StrokaPoiska=StrokaPoiska.replace(/-->/g," ")
itog=itog+StrokaPoiska+"\n";
}
}
}
txt.Close();
if (itog == "")
{
alert ("Заметок нет");
}
window.resultat.innerText=itog;
}
//добавление заметок в файл
function AddNotes (passline)
{
var fso= new ActiveXObject ("Scripting.FileSystemObject"); // создать объект FSO
var UrlPath=window.location.pathname;
FileNamePath=UrlPath.replace(/%20/g," ");
txt=fso.OpenTextFile(FileNamePath, 8, false);
txt.WriteLine("<!--"+passline+"-->");
txt.Close();
}
//AddPass();
requestaddnote();
}
function openWin(winname) //функция запуска программы
{
var wsh=new ActiveXObject("WScript.Shell");
wsh.Run(winname,1);
}
-->
</SCRIPT>
</HEAD>
<BODY lang=RU bgColor=silver onload='resize()'>
<H4 align=center>SQL Toolz
<HR align=center width="95%" SIZE=5>
<TABLE width="95%" border=0>
<TBODY>
<TR>
<TD align=left>
<center><select id=dbsource onclick=FindSource() name=dbsource>
<option value=FindSource selected> Выберите ИСТОЧНИК ДАННЫХ </option>
</select></center>
</TD>
<TD align=right>Логин: <input id=login type=text size=10 name=login> Пароль: <input id=pass type=password size=10 name=pass> Имя базы данных:<input id=databasename type=text size=10 value=master name=databasename>WinAuth:<input type=checkbox name=winauth id=winauth value=winauth >
</TD>
</TR>
</TBODY>
</TABLE>
<HR align=center width="95%">
<p></p>
<TABLE cellSpacing=0 cellPadding=0 width="95%" border=0>
<TBODY>
<TR>
<TD>
<P align=left><select id=raznoechoise>
<option selected >РАЗНОЕ</option>
<option value=odbc>--- --- ---</option>
<option value=odbc>Список источников данных ODBC</option>
<option value=createmdb>Создать базу данных .MDB</option>
<option value=listtables>Cписок таблиц Источника данных</option>
</select>
<input id=tools onclick=raznoe() type=button value=ок name=raznoebutton>
</P>
</TD>
<TD>
<P align=left><select id=SqlServerChoise>
<option value=odbc selected >MS SQL Server</option>
<option >--- ИНФОРМАЦИЯ ---</option>
<option value=sqlserverslist>Список MsSql серверов в сети</option>
<option value=ServerProperty >Список свойств Sql сервера</option>
<option value=adSchemaCatalogs>Список баз данных сервера</option>
<option value=EnumProcesses>Список процессов сервера</option>
<option value=EnumLocks>Список блокировок сервера</option>
<option value=ListMembers>Роли пользователя</option>
<option value=version>Версия Sql сервера</option>
<option value=ScriptTablDB>Отскриптовать таблицу или базу</option>
<option>--- ФУНКЦИИ ---</option>
<option value=createuser>Создать юзера</option>
<option>--- ХРАНИМЫЕ ПРОЦЕДУРЫ ---</option>
<option value=sp_help>sp_help</option>
<option value=sp_helpdb>sp_helpdb</option>
<option value=sp_tables>sp_tables</option>
<option value=sp_helpdevice>sp_helpdevice</option>
<option value=sp_helplogins>sp_helplogins</option>
<option value=sp_helpserver>sp_helpserver</option>
<option value=sp_linkedservers>sp_linkedservers</option>
<option value=sp_monitor>sp_monitor</option>
<option value=sp_oledb_defdb>sp_oledb_defdb</option>
<option value=sp_readerrorlog>sp_readerrorlog</option>
<option value=sp_server_info>sp_server_info</option>
<option value=sp_who>sp_who</option>
<option value=sp_who2>sp_who2</option>
<option value=sp_MSgetversion>sp_MSgetversion</option>
<option>--- БАЗА ДАННЫХ ---</option>
<option value=InfSchemaTables>Таблицы пользователя</option>
<option value=InfSchemaViews>Представления пользователя</option>
<option value=SysDatabaseFiles>Файлы Базы Данных</option>
<option value=SysBackup_devices>Backup_devices</option>
<option value=sys.filegroups>Группы файлов</option>
<option value=sys.master_files>Master_files</option>
<option value=sys.foreign_keys>Первичные ключи</option>
<option value=sys.indexes>Индексы</option>
<option value=sys.remote_logins>Remote_logins </option>
<option value=sys.sql_logins>Sql_logins </option>
<option value=sys.syslogins>SysLogins </option>
</select>
<input id=SqlDmoButton onclick=SqlServer() type=button value=ок>
</P>
</TD>
<TD>
<P align=center><select id=mysqlchoise>
<option selected>MY SQL</option>
<option>--- ИНФОРМАЦИЯ ---</option>
<option value=showdatabases>Список баз данных</option>
<option value=showtables>Список таблиц базы данных</option>
<option value=showfields >Описание выбранной таблицы</option>
<option value=tablesstatus>Информация о всех таблицах БД</option>
<option value=processlist>Cписок выполняющихся запросов</option>
<option value=showversion>Версия сервера</option>
<option value=curruser>Уч. запись пользователя</option>
<option value=showvariables>Системные переменные сервера</option>
<option value=showstatus>Статус (статистика) сервера</option>
<option value=showcreatetable>Отскриптовать таблицу</option>
<option>--- ФУНКЦИИ ---</option>
<option value=checktable>Проверить таблицу</option>
<option value=optimizetable>Оптимизировать таблицу</option>
<option value=repairtable>Ремонт таблицы</option>
</select>
<input id=Button2 onclick=mysql() type=button value=ок name=mysql>
</P>
</TD>
</TR>
</TBODY>
</TABLE>
<p></p>
<center></center>
<TABLE width="95%" align=center border=1>
<TBODY>
<TR>
<TD>
<CENTER> <p>Выполнить SQL запрос</p></CENTER>
</TD>
<TD align=middle>Результат</TD>
</TR>
<TR>
<TD vAlign=top>
<center><textarea id=sqlqery name=sqlqery rows=10 cols=35></textarea> </center>
<p><center><input id=SendQuery onclick='ExecQuery("native")' type=button value="Выполнить запроc" name=SendQuery></center></p>
<hr width=95%>
<center>Выполнить запрос вернув данные в Excel (для более удобной работы с данными)<p><input id=Button3 onclick='ExecQuery("excel")' type=button value="Выполнить запроc (Excel)" name=SendQuery></p></center>
</TD>
<TD>
<center><textarea id=resultat name=resultat rows=25 cols=79></textarea></center>
</TD>
</TR>
</TBODY>
</TABLE>
<p></p>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD>
<P align=center><INPUT id=note type=button value='Заметки' onclick='notes()'></P></TD>
<TD>
<P align=center><INPUT id=Button1 onclick='openWin("%SystemRoot%\\system32\\odbcad32.exe")' type=button value='Источники данных'></P></TD>
<TD>
<P align=center><INPUT id=Button13 onclick='openWin("Notepad")' type=button value=Notepad></P></TD>
<TD>
<P align=center><INPUT id=Button16 onclick='openWin("Cmd")' type=button value=" Cmd "></P></TD>
<TD>
<P align=center><INPUT id=Button17 onclick='openWin("Msconfig")' type=button value=Msconfig></P></TD>
<TD>
<P align=center><INPUT id=Button18 onclick='openWin("taskmgr")' type=button value=TaskMgr></P></TD>
<TD>
<P align=center><INPUT id=Button15 onclick='openWin("regedit")' type=button value="Regedit"></P></TD>
<TD> <P align=center> </P></TD>
</TR>
</TBODY>
</TABLE>
<HR align=center width="95%">
</BODY>
</HTML>
<!--В следующих строках хранятся заметки, поэтому не удаляйте строку с текстом notes, остальные строки на ваше усмотрение-->
<!--notes-->
<!--Все существующие на MS SQLсервере Учетные записи - select * from master..syslogins-->Автор - null.
MoonRabbit Update:
Утилита требует установки клиента SQL Server Distributed Management Objects (SQL-DMO).
Данный клиент ставиться или с основными утилитами SQL Server, или отдельно:
INF: Enabling SQL DMO Clients Without Installing the Client Side Utilities
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.

