|   |   | 
| 
 | v7: Чем удобнее напрямую работать с базой MSSQL | ☑ | ||
|---|---|---|---|---|
| 0
    
        mishaPH модератор 12.04.18✎ 08:08 | 
        Коллеги. 
 Чем во вашему удобней залезть в базу MSSQL не 1с для чтения данных из табличек и записи туда же. для постгри использую какой-то драйвер plsql который в 1с создает Conn = СоздатьОбъект("ADODB.Connection"); ААА = Conn.Open(ConnectionString); Cmd = СоздатьОбъект("ADODB.Command"); ну и работаем с базой посредством уже постгри запросов. в MSSQL напрямую не лазил. 1с++, есть toysql. | |||
| 1
    
        shuhard 12.04.18✎ 08:13 | 
        (0)[не 1с для чтения данных из табличек и записи туда же.]
 под виндой adodb доступно из скриптовых языков, например php, проще некуда и компиляция не нужна | |||
| 2
    
        План счетов 12.04.18✎ 08:15 | 
        v7mysql.dll - нормально работает
 база mуsql в локальной сети | |||
| 3
    
        mishaPH модератор 12.04.18✎ 08:16 | 
        (1) в (0) не к нему ли обращение?
 только коннект к постгри идет. | |||
| 4
    
        План счетов 12.04.18✎ 08:16 | 
        )) Глаза еще не открыл, прочитал mysql вместо mssql     | |||
| 5
    
        mishaPH модератор 12.04.18✎ 08:16 | 
        (2) майкрософт у меня. Комп в принципе в домене     | |||
| 6
    
        shuhard 12.04.18✎ 08:17 | 
        (3) сформулируй ещё раз проблему, ибо я понял, что тебе нужна вызывался ADODB не из среды 1С     | |||
| 7
    
        shuhard 12.04.18✎ 08:18 | 
        (6) +1 
 или речь о строке подключения к mssql & | |||
| 8
    
        mishaPH модератор 12.04.18✎ 08:19 | 
        (6) (7) надо из 1с 7.7 законнектиться к базе MS SQL и получить из нужных табличек данные. также в нужные записать     | |||
| 9
    
        mishaPH модератор 12.04.18✎ 08:20 | 
        я написать что подключится надо НЕ К 1совской базе скуля     | |||
| 10
    
        shuhard 12.04.18✎ 08:29 | 
        (9) создаёшь файлик с расширением udl, выбираешь провайдера, тестируешь соединение, копируешь в код строку соединения     | |||
| 11
    
        План счетов 12.04.18✎ 08:30 | 
        (9) Тоже делал, все работало на ура, все запросы select, insert
 Делал так: Соединение = СоздатьОбъект("ADODB.Connection"); ConnectionString = "Provider=SQLOLEDB.1;Password=******;Persist Security Info=True;User ID=SA;Initial Catalog=***;Data Source=SRV;"; | |||
| 12
    
        mishaPH модератор 12.04.18✎ 08:31 | 
        (10) в запуске внешних шняг есть одно неудобство - мельтешащие черные окна сбивающие позиционирование на текущем окне 1с.  самое удобное какой-то компонентой из 1с напрямую.     | |||
| 13
    
        shuhard 12.04.18✎ 08:33 | 
        (12) мы тебя не понимаем, в (10) утилита для построения строки соединения для использования в 1С     | |||
| 14
    
        mishaPH модератор 12.04.18✎ 08:34 | 
        (11) а т.е. как я к постгри подключаюсь указывая 
 DRIVER={PostgreSQL Unicode};DATABASE= ***** указать только данные к мс скл.. вся остальная работа по сути тажже. запрос - обработка ответа | |||
| 15
    
        mishaPH модератор 12.04.18✎ 08:34 | 
        (13) я понял кажется     | |||
| 16
    
        toypaul гуру 12.04.18✎ 08:35 | 
        чем привычнее тем и делай. можно АДО, можно ТойСКЛ, можно 1С++ (наверное)     | |||
| 17
    
        shuhard 12.04.18✎ 08:37 | 
        (14) всё верно
 Provider=SQLOLEDB протестировать можно через файлик udl | |||
| 18
    
        Dotoshin 12.04.18✎ 09:11 | 
        (0) На VBA можно запрос написать и выполнить.
 Вот тут посмотри как сделать http://info-comp.ru/obucheniest/380-vba-access-query.html Там пример для access, но никто не мешает сделать то же самое в экселе, если access-а под рукой нет. | |||
| 19
    
        mishaPH модератор 12.04.18✎ 09:13 | 
        (18) а зачем мне из екселя лезть когда надо данные в 1с     | |||
| 20
    
        Dotoshin 12.04.18✎ 09:24 | 
        (19) Ты же в в (0) сказал, что над не в 1с.
 Если все же надо из 1с, но читать/писать в другую базу, то ответ в (10) и (11). Если проблема с написанием строки подключения, создай пустой файл с расширением udl, как советует shuhard, сохрани его и кликни мышкой, должен открыться мастер настройки подключения. Далее заполняешь параметры и с последней вкладки копируешь строку подключения. | |||
| 21
    
        ADirks 12.04.18✎ 09:24 | 
        Если из 1С, то через 1С++::ODBCRecordSet телодвижений меньше, чем с ADO.
 И не вижу принципиальной разницы, 1С это база, или какая-то другая. | |||
| 23
    
        Z1 15.04.18✎ 19:05 | 
        + к 21  и типизацию можно получить (если в той базе есть типизированые id). 
 (0) так что используй 1с++ | |||
| 24
    
        trdm 15.04.18✎ 19:19 | 
        (12) > самое удобное какой-то компонентой из 1с напрямую.
 1c++ конечно же. + QA.ert. Только запросы удобнее писать в конфигураторе с опенконфом + SQLIntellisence.vbs | |||
| 25
    
        trdm 15.04.18✎ 19:21 | 
        +(24) Хотя если БД не 1С-ная, то прийдется поизвращаться.     | |||
| 26
    
        mishaPH модератор 15.04.18✎ 20:07 | 
        (24) (25) все перечисленное тобой есть. но база не 1с ная внешняя     | |||
| 27
    
        trdm 15.04.18✎ 20:37 | 
        (26) Ваще не проблема. 
 1С++ может подсоединяться и к другим БД, не 1С-ным. | |||
| 28
    
        trdm 15.04.18✎ 20:39 | 
        //***************************************************************
 Процедура Выполнить(Режим = 0) Перем Тип,Длина,Точность; Если Режим = 2 Тогда вВопрос = "Обычно 1С вылетает на этой опции! |Отменить операцию?"; Если Вопрос(вВопрос,"Да+Нет") = "Да" Тогда Возврат; КонецЕсли; КонецЕсли; Запрос = СоздатьОбъект("ODBCRecordset"); Если MetaInfoClasses.ЭтоSQL_Версия() = 0 Тогда Если Режим <> 0 Тогда Возврат; КонецЕсли; DB=СоздатьОбъект("ODBCDatabase"); Если DB.Соединение("DRIVER={Microsoft Visual FoxPro Driver};Deleted=Yes;Null=Yes;Collate=RUSSIAN;Exclusive=No;SourceType=DBF;SourceDB="+КаталогИБ())=0 Тогда глСообщитьОбОшибке(DB.ПолучитьОписаниеОшибки()+" [20150113-1518]"); Возврат; КонецЕсли; Запрос.УстБД(DB); КонецЕсли; | |||
| 29
    
        Z1 16.04.18✎ 10:28 | 
        (26)и что что внешняя.
 sql сервер вообще не знает ничего об 1с Есть таблица есть запрос - все select * from NameTabl | |||
| 30
    
        mishaPH модератор 16.04.18✎ 10:29 | 
        (29) да это понятно. я пояснил к вопросу     | |||
| 31
    
        trdm 16.04.18✎ 11:06 | 
        Ну дык в чем проблема-то?
 Модифицируешь 1CQA.ert в плане подключения к другой БД Процедура Выполнить(Режим = 0) код где пропатчить я в (28) написал и фигачишь себе запросы. | |||
| 32
    
        mishaPH модератор 16.04.18✎ 11:07 | 
        (31) да мерси. все сделаем.     | |||
| 33
    
        trdm 16.04.18✎ 11:18 | 
        Вот и не вижу проблем. Единственно стремно писать запросы без подсказки по полям, но и тут можно придумать ченить. 
 Методы разные есть. | |||
| 34
    
        mishaPH модератор 16.04.18✎ 11:34 | 
        (33) что подразумевается под подсказкой? 
 известна структура таблиц и читать / писать туда надо не в слепую. все делаю в посгри таблички. в МС скл просто не делал | |||
| 35
    
        trdm 16.04.18✎ 11:45 | 
        (34) > что подразумевается под подсказкой? 
 Вот это: https://github.com/trdm/hlam/blob/master/img/1Сsqlhelp.gif | |||
| 36
    
        Mihenius 16.04.18✎ 11:51 | 
        Через 1с++ 
 БазаДанных = СоздатьОбъект("ODBCDataBase"); СтрокаСоединения = "Driver={SQL Server};Server=srv;Database=" + "name" + ";Uid=" + Логин + ";Pwd=" + Пароль + ";"; БазаДанных.Соединение(СтрокаСоединения); Обработчик = СоздатьОбъект("ODBCRecordset"); Обработчик.УстБД(БазаДанных); ТекстЗапроса = " |SELECT * |FROM [table1] |where field1_id = :field1_id |"; Обработчик.УстановитьТекстовыйПараметр("field1_id ", field1_id ); Обработчик.Отладка(1); Результат = Обработчик.ВыполнитьИнструкцию(ТекстЗапроса); ТекстЗапроса = " |INSERT INTO [table1] | | VALUES | |(0,NULL,1,:ИдПоля1) |"; Обработчик.УстановитьТекстовыйПараметр("ИдПоля1", ИдПоля1); Обработчик.Отладка(1); Результат = Обработчик.ВыполнитьИнструкцию(ТекстЗапроса); | |||
| 37
    
        Mihenius 16.04.18✎ 11:52 | 
        Сами запросы хоть в репортинге рисовать можно...     | |||
| 38
    
        Mihenius 16.04.18✎ 11:57 | 
        только проблема будет с блокировками и грязным чтением.
 т.к. другая твоя программа ничего не знает про твои чтение/запись из 1с и это нужно как то продумать и согласовать, хоть nolock для начала поставить. | |||
| 39
    
        mishaPH модератор 16.04.18✎ 12:00 | 
        (35) аа. ну да это не обязательно. помошники и конструктор     | |||
| 40
    
        mishaPH модератор 16.04.18✎ 12:01 | 
        (38) тут решаемо.     | |||
| 41
    
        Mihenius 16.04.18✎ 12:03 | 
        Единственное вроде прописать базу нужно в odbcad32
 На 64 битных системах она хранится в C:\Windows\SysWOW64\odbcad32.exe | |||
| 42
    
        mishaPH модератор 04.05.18✎ 14:42 | 
        Продолжаем
 законнектился через. CmdА = СоздатьОбъект("ADODB.Command"); выборка селект идет нормально. в общем все также и тот же код как будто подключился к постгри, только коннект строка взял из (36) мерси всем | |||
| 43
    
        Ёпрст гуру 04.05.18✎ 14:46 | 
        (42) нафик адо ?
 писать проще через ODBCRecordset | |||
| 44
    
        Ёпрст гуру 04.05.18✎ 14:46 | 
        раз у тебя есть 1cpp     | |||
| 45
    
        mishaPH модератор 04.05.18✎ 14:46 | 
        (43) а чем? чего проще через то что я делаю     | |||
| 46
    
        mishaPH модератор 04.05.18✎ 14:47 | 
        (44) да она есть конечно.. но чесно говоря не использую. да и чего там писать. селекты да инсерты в трансферные базы     | |||
| 47
    
        mishaPH модератор 04.05.18✎ 14:48 | 
        тем более запросы всё равно руками делаю. там же нет сложного чего то с соединениями и вложенными запросами. почти.     | |||
| 48
    
        Вафель 04.05.18✎ 14:49 | 
        (45) в ТЗ можно выгружать одной строчкой     | |||
| 49
    
        mishaPH модератор 04.05.18✎ 14:56 | 
        (48) гм. ну да. ест + не надо перебирать все.     | |||
| 50
    
        Вафель 04.05.18✎ 14:57 | 
        установка параметров а ля список значений     | |||
| 51
    
        Ёпрст гуру 04.05.18✎ 15:03 | 
        (45) делать подготовленные запросы с изменяемыми параметрами, устанавливать значения параметров ну и т.д.     | |||
| 52
    
        trad 04.05.18✎ 15:18 | 
        (49) попробуй получи значение типа numeric или decimal или int через ado в семерку     | |||
| 53
    
        mishaPH модератор 04.05.18✎ 15:24 | 
        (52) будет ругаться плохой тип? в постгри к переменной ставлю ::text и все.
 Кстати а как в мс скл сразу чтобы переменная была типа текст | |||
| 54
    
        trad 04.05.18✎ 15:36 | 
        (53) на стороне сервера конвертируешь число в строку, на стороне семерки получаешь вместо числа получаешь строку.
 оно тебе надо? а 1С++::ODBCRecordSet передает число как надо | |||
| 55
    
        trad 04.05.18✎ 15:38 | 
        >Кстати а как в мс скл сразу чтобы переменная была типа текст
 не совсем понял вопрос, но cast(Поле as varchar) | |||
| 56
    
        mishaPH модератор 04.05.18✎ 15:39 | 
        (54) а что такого в конвертации. по сути оно что строка что число
 дело в том, что 1с++ ну нет времени сейчас осваивать. попробую 1 день посвятить. если взлетит сразу - то перейду. если нет - то придется по уже наработанной технологии | |||
| 57
    
        trad 04.05.18✎ 15:40 | 
        кроме всего, ado - это com-обертка всех данных
 ODBCRecordSet - передача "прямее" на больших объемах это может быть важно | |||
| 58
    
        mishaPH модератор 04.05.18✎ 15:42 | 
        (57) ну ты почти уговорил ;) попробую. 
 но честно говоря нет времени. | |||
| 59
    
        Ёпрст гуру 04.05.18✎ 15:42 | 
        (56) там всего-то пару методов     | |||
| 60
    
        trad 04.05.18✎ 15:42 | 
        (56) затраты на конвертацию     | |||
| 61
    
        trad 04.05.18✎ 15:43 | 
        (59) я бы даже сказал - один     | |||
| 62
    
        trad 04.05.18✎ 15:46 | 
        (61) а да, УстБД еще ))     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |