Имя: Пароль:
1C
 
Как программно узнать имя SQL-сервера?
0 Смит
 
06.04.07
06:40
Не сервера предприятия.
1 Смит
 
06.04.07
07:46
Ап.
2 Смит
 
06.04.07
08:56
Ап.
3 megalodon
 
06.04.07
08:59
3-х звенка на то и создана в числе прочего, шобы имя сервера было затруднительно узнать.
4 coder1cv8
 
06.04.07
09:04
(0) А на фига?
5 Ferz
 
06.04.07
09:06
(0)а для чего?

   Попытка
       Структура = Новый Структура("Тип, Сервер, База, SQlсервер, SQlБаза, Файл, Пользователь, Пароль, SQLOLEDB,ADODB");
       СтрокаСоединения = СтрокаСоединенияИнформационнойБазы();
       СтрокаСоединения = СтрЗаменить(СтрокаСоединения, ";", Символы.ПС);
       Стр1 = СтрПолучитьСтроку(СтрокаСоединения, 1);
       Стр2 = СтрПолучитьСтроку(СтрокаСоединения, 2);
       Если Лев(Стр1, 4) = "Srvr" Тогда
           Структура.Тип = "Сервер";
           Структура.Сервер = Сред(Стр1, 7, СтрДлина(Стр1) - 7);
           Структура.База = Сред(СтрПолучитьСтроку(СтрокаСоединения, 2), 6, СтрДлина(Стр2) - 6);
           //подсоединяемся к базе на сервере для определения пароля и пользователя
           COMConnector = Новый COMОбъект("V8.COMConnector");
           Server = COMConnector.ConnectServer(Структура.Сервер);
           Server.AddAuthentication(СокрЛП(Пользователь),Пароль);
           ArrayIB = Server.GetInfoBASes();
           Для Каждого IB Из ArrayIB Цикл
               Если ВРег(IB.Name)<> ВРег(Структура.База) Тогда
                   Продолжить;
               Иначе
                   Структура.SQlсервер=ib.DBServerName;
                   Структура.SQlБаза=ib.DBName;
                   Структура.Пользователь=ib.DBUser;
                   Структура.Пароль=ib.DBPASsword;
                   Структура.SQLOLEDB="Provider=SQLOLEDB;Password="+ib.DBPASsword+";Persist Security Info=True;User ID="+ib.DBUser+";Initial Catalog="+ib.DBName+";Data Source="+ib.DBServerName;
                   Структура.ADODB="Driver={SQL Server};Server=" + ib.DBServerName + ";Uid=" + ib.DBUser + ";Pwd=" + ib.DBPASsword + ";DataBASe=" + ib.DBName + ";" + "Pwd=" + ib.DBPASsword +";";    
                   Прервать;
               КонецЕсли;    
           КонецЦикла;        
           Если ib.DBName="" Тогда
               ВызватьИсключение(" - не удалось получить доступ к серверу 1с");
           КонецЕсли;
       Иначе
           Структура.Тип = "Файл";
           Структура.Файл = Сред(Стр1, 6, СтрДлина(Стр1) - 6);
       КонецЕсли;    
       Возврат Структура;
   Исключение
        Сообщить("Ошибка получения параметров ИБ на сервере приложения 1с
       |"+ОписаниеОшибки(),СтатусСообщения.ОченьВажное);
       Соединение_ОткрытьНастройки();
       Возврат False
   КонецПопытки;
6 coder1cv8
 
06.04.07
09:09
(5) Не, ну если изнутри SQL-ной базы, то и кода столько не надо, понятно что сервер в СтрокеСоединения имеется...
7 Ferz
 
06.04.07
09:20
(6) не ну это понятно, ну не просто же ему имя сервера нужно. Скорее всего он хочет к нему подключится.:)) И что то там натворить....8))
8 Смит
 
06.04.07
09:51
(4), (5) Спасибо. Для прямого запроса.
9 Ferz
 
06.04.07
09:53
(8) велосипед изобретен смотри Enterprise Integrator
10 Смит
 
06.04.07
09:54
(9) Это что?
11 coder1cv8
 
06.04.07
09:59
(9) хорош, пиарить свой интегратор )
12 Ferz
 
06.04.07
10:15
(11) почему он тебе не понравился?, он не подходит для прямых запросов?
13 Ferz
 
06.04.07
10:17
14 coder1cv8
 
06.04.07
10:19
(12) да я шучу, нормальная штука... Хотя то же в некотором роде велосипед... )
15 Ferz
 
06.04.07
10:35
(14) вот так бы сразу.... :))
16 Смит
 
06.04.07
10:50
(13) Спасибо.
17 Vozhd
 
06.04.07
10:53
(5) У этого кода есть одна маленькая проблемка. Может быть ситуация, когда 1С-ая база открывается, а с сервером соединиться не получается...
18 Ferz
 
06.04.07
11:31
(17) правильно... если ты не знаешь админского пароля
19 Vozhd
 
06.04.07
11:40
(18) Даже зная пароль можно не найти сервера
20 Ferz
 
06.04.07
11:44
(19) и в каких же это случаях?
21 Vozhd
 
06.04.07
11:47
(20) Например, когда SQL сервер стоит в другой сети...
22 Ferz
 
06.04.07
12:04
ты про SQL что ли? или про 1с сервак?
23 Vozhd
 
06.04.07
12:36
(22) Я про то, что Ваш код в (5) может получать имена серверов, к которым нельзя соединиться, даже если знаешь правильные логины.
24 Ferz
 
06.04.07
13:01
(23) а кокой код тогда будет правильным?
25 Vozhd
 
06.04.07
13:15
(24) подключение к базе должно осуществляться только на сервере предприятия. а значит и все обращения у базе должны выполняться только из кода, который выполняется на сервере, а не на клиенте.