Имя: Пароль:
1C
1C 7.7
v7: Подключиться к SQL базе
,
0 Slypower
 
26.03.20
15:30
Доброго дня.
Есть сторонняя база скуля, 1с. Лежит в папке расшаренной по сети. На компах установлен sql 2008. Нужно вытягивать данные оттуда в 1с. Пытаюсь способами как описано здесь: https://helpf.pro/faq7/view/348.html,

DB = СоздатьОбъект("ODBCDatabase");
DB.Соединение("DRIVER={MySQL ODBC 5.1 Driver}; SERVER=IP_Супер_мега_сервера; DATABASE=Мега_база; USER=Супер_юзер; PASSWORD=пароль_супер_мега_юзера; OPTION=3;");

RS = СоздатьОбъект("ODBCRecordSet");
RS.SetDatabase(DB);

Если RS.Выполнить("set names cp1251") = 0 Тогда
    Сообщить("Ошибка подключения к MySQL" + РазделительСтрок + RS.ПолучитьОписаниеОшибки());
    СтатусВозврата(0);
    Возврат;
КонецЕсли;


но выдает ошибку: "[Диспетчер драйверов ODBC] Источник данных не найден и не указан драйвер, используемый по умолчанию"
Вопрос. правильно ли я делаю? Что имеется: путь к базе, сама база, логин и пароль к пользователя виндовс компа.
Какие параметры мне еще нужны? Спасибо.
1 Djelf
 
26.03.20
15:43
(0) Оригинальная попытка решения... "установлен sql 2008", а подключение через драйвер "MySQL"?
MSSQL <> MySQL
2 Slypower
 
26.03.20
15:52
Так, полагаю,: DRIVER={SQL Server}? А версию нужно указывать?
3 Slypower
 
26.03.20
15:54
А с другой стороны, вот пример, как у меня: https://forum.infostart.ru/forum9/topic158940/
Тема: Подключение MS SQL базе из 1С и запрос данных.
Решение такое же:


    Соединение = Новый COMОбъект("ADODB.Connection");  
    Драйвер="{SQL Server}";//
    Сервер="ip";//"DRIVER={MySQL ODBC 3.51 Driver};SERVER=ip;UID=УИД;pwd=пароль;DATABASE=имяБД;TABLE=имяТаблицы;"
        Юзер="Пользователь";
        Пароль="";
        БД="ИмяБД";
        Таблица="ИмяТаблицы1";
        ТаблицаРасширенная="ИмяТаблицы2";
    //Новый Драйвер важно чтобы был на 32-битах
    ConnectionString="DRIVER={MySQL ODBC 3.51 Driver};SERVER=ip;UID=УИД;pwd=пароль;DATABASE=имяБД;TABLE=имяТаблицы;"; //"DRIVER="+Драйвер+";SERVER="+Сервер+";UID="+Юзер+";pwd="+Пароль+";DATABASE="+БД+";";//
    Соединение.CursorLocation=3;
4 Djelf
 
26.03.20
17:44
Пример, это всего лишь пример. Он не должен и не обязан работать ;)
Тут: https://www.connectionstrings.com есть все варианты подключений.
5 HawkEye
 
26.03.20
18:02
(0) лови кусок из продакшена

    ТекстЗапроса = "Select InformationBaseName,
                |      MetadataName,
                |      convert(varchar, [Time], 112) AS Date,
                |      Cast (Max(Speed)/1000.0 as char(10)) as ""MAX"",
                |      Cast (MIN(Speed)/1000.0 as char(10)) as ""MIN"",
                |      COUNT(Speed) as ""Cnt"",
                |      Cast (AVG(Speed)/1000.0 as char(10)) as ""AVG"",
                |      SUM(case when Speed > 5000 and Speed <10000 then 1 else 0 end) as cnt5_10,
                |      SUM(case when Speed > 10000 then 1 else 0 end) as cnt10
                |    From [Alpha_Auto_FileStore].[dbo].[Monitoring_Proizvoditelnosti]
                |    Where Time >= '" + НачалоПериода + "' AND Time <= '" + КонецПериода + "'
                |          and Speed >= 0
                |          and Speed < 60000
                |    group by InformationBaseName, MetadataName, convert(varchar, [Time], 112)
                |    ORDER BY InformationBaseName, avg desc";
    
    
    Connection = СоздатьОбъект("ADODB.Connection");
    ConnectionString = "Provider=SQLOLEDB;Driver={SQL Server}; Deleted=No; Data Source = sql6chelny.tts.org;Trusted_Connection=yes;";
    Connection.ConnectionTimeOut = 50;
    Connection.Open(ConnectionString);  
    
    ADODBCommand = СоздатьОбъект("ADODB.Command");
    ADODBCommand.ActiveConnection = Connection;
    ADODBCommand.CommandText      = ТекстЗапроса;
        
    Рекордсет = СоздатьОбъект("ADODB.RecordSet");
    Попытка
      Состояние("Выполнение запроса...");
      Рекордсет = ADODBCommand.Execute;
    Исключение
       Сообщить(ОписаниеОшибки());
       Возврат;
    КонецПопытки;
    
    //Для Инд = 0 по Рекордсет.Fields.Count - 1 Цикл
    //    Сообщить(Рекордсет.Fields.Item(Инд).Name);  итог
    //КонецЦикла;  
    Попытка
        Рекордсет.MoveFirst();
    Исключение
       Сообщить("Нет записей на дату: " + НачалоПериода);
       Возврат;
    КонецПопытки;
        
    //Рекордсет.Open();  
    Пока Рекордсет.EOF()=0  цикл  
        ИмяДокумента = Рекордсет.Fields("MetadataName").Value;
        ИмяБазы   = Рекордсет.Fields("InformationBaseName").Value;
6 Slypower
 
30.03.20
08:37
(5) а есть где прочитать про ADODB.Connection? Хотелось бы по параметрам понять
7 ДенисЧ
 
30.03.20
08:38
(6) НА MSDN, разумеется.
8 Slypower
 
30.03.20
12:56
Почему тогда отличается строка подключения на MSDN и в примере?

"Provider='SQLOLEDB';Data Source='MySqlServer'; Initial Catalog='Northwind';Integrated Security='SSPI';"

против

"Provider=SQLOLEDB;Driver={SQL Server}; Deleted=No; Data Source = sql6chelny.tts.org;Trusted_Connection=yes;";
9 ДенисЧ
 
30.03.20
13:03
Data Source='MySqlServer'
против
Driver={SQL Server}

Ничего, что это подключения к разным серверам? Первый - к мусклю, второй к мсскл
10 ДенисЧ
 
30.03.20
13:03
https://www.connectionstrings.com/

Воспользуйся
11 Sserj
 
30.03.20
13:32
(0) Вообще то правильнее использовать ПрисоединитьИБ(), в таком случае при выполнении запросов парсер будет работать с метаданными
этой сторонней базы:
DB = СоздатьОбъект("ODBCDataBase");
DB.ПрисоединитьИБ("\\server\КаталогИБ\", Пользователь1С, Проль1С);
RS= СоздатьОбъект("ODBCRecordset");
RS.УстБД(DB);
Результат = RS.ВыполнитьИнструкцию(ТекстЗапроса);
12 Slypower
 
30.03.20
15:47
(11) вторая база не 1с-овская, я понимаю, ее не присоединить так
13 Slypower
 
30.03.20
16:17
(10) тогда вопрос, чем лучше подключаться к файлу .mdf? И нужно еще какие доп драйвера устанавливать, например, Драйвер Microsoft ODBC, и ставить его в по умолчанию?
14 acht
 
30.03.20
16:27
(13) Без MSSQL сервера ты этот файл не прочитаешь. Делегируй задачу тому, кто разбирается.
15 Slypower
 
30.03.20
17:09
(14) так у меня интерес есть разобраться. Скуль стоит и с компа, с которого идет запрос, и там, где хочу прочитать данные, 2008. На дальнем компе нет sql managementa, но он и не нужен. Есть база, мне нужно прочитать данные.
16 Djelf
 
30.03.20
18:17
(15) И что? До сих пор не смог подключится? За 4 дня? оО
Ну... это только для Оракла такое возможно, у него долбанутые провайдеры, но для MSSQL, как то чудно...

Элементарные же строки подключения, вот тебе 3, через разные провайдеры к MSSQL (выдернутые из http://devtool1c.ucoz.ru).

Provider=SQLOLEDB; Data Source="!БазаСервер!"; Initial Catalog="!БазаИмя!"; User Id="!Пользователь!"; Password="!Пароль!";
Driver={SQL Server}; Server=!БазаСервер!; DataBase=!БазаИмя!; UID="!Пользователь!"; PWD="!Пароль!";
Provider=SQLNCLI10; Server=!БазаСервер!; DataBase=!БазаИмя!; UID="!Пользователь!"; PWD="!Пароль!";

Кавычки "могут" быть значимы!!!
17 Slypower
 
30.03.20
19:08
(16) я за эти 4 дня пробовал только в сумме 30 минут и плюс 30 на чтение. Это я пока на досуге иногда пробую))
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой