Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Чем удобнее напрямую работать с базой MSSQL

v7: Чем удобнее напрямую работать с базой MSSQL
Я
   mishaPH
 
Модератор
12.04.18 - 08:08
Коллеги.
Чем во вашему удобней залезть в базу MSSQL не 1с для чтения данных из табличек и записи туда же.

для постгри использую какой-то драйвер plsql
который в 1с создает 
Conn = СоздатьОбъект("ADODB.Connection");
ААА = Conn.Open(ConnectionString);
Cmd = СоздатьОбъект("ADODB.Command");

ну и работаем с базой посредством уже постгри запросов. 

в MSSQL  напрямую не лазил. 1с++, есть toysql.
 
 
   shuhard
 
1 - 12.04.18 - 08:13
(0)[не 1с для чтения данных из табличек и записи туда же.]
под виндой adodb доступно из скриптовых языков, например php,
проще некуда и компиляция не нужна
   План счетов
 
2 - 12.04.18 - 08:15
v7mysql.dll - нормально работает
база mуsql в локальной сети
   mishaPH
 
Модератор
3 - 12.04.18 - 08:16
(1) в (0) не к нему ли обращение?
только коннект к постгри идет.
   План счетов
 
4 - 12.04.18 - 08:16
)) Глаза еще не открыл, прочитал mysql вместо mssql
   mishaPH
 
Модератор
5 - 12.04.18 - 08:16
(2) майкрософт у меня. Комп в принципе в домене
   shuhard
 
6 - 12.04.18 - 08:17
(3) сформулируй ещё раз проблему, ибо я понял, что тебе нужна вызывался ADODB не из среды 1С
   shuhard
 
7 - 12.04.18 - 08:18
(6) +1 
или речь о строке подключения к mssql &
   mishaPH
 
Модератор
8 - 12.04.18 - 08:19
(6) (7) надо из 1с 7.7 законнектиться к базе MS SQL и получить из нужных табличек данные. также в нужные записать
   mishaPH
 
Модератор
9 - 12.04.18 - 08:20
я написать что подключится надо НЕ К 1совской базе скуля
   shuhard
 
10 - 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;";
   mishaPH
 
Модератор
12 - 12.04.18 - 08:31
(10) в запуске внешних шняг есть одно неудобство - мельтешащие черные окна сбивающие позиционирование на текущем окне 1с.  самое удобное какой-то компонентой из 1с напрямую.
   shuhard
 
13 - 12.04.18 - 08:33
(12) мы тебя не понимаем, в (10) утилита для построения строки соединения для использования в 1С
   mishaPH
 
Модератор
14 - 12.04.18 - 08:34
(11) а т.е. как я к постгри подключаюсь указывая 
DRIVER={PostgreSQL Unicode};DATABASE= *****

указать только данные к мс скл.. вся остальная работа по сути тажже. запрос - обработка ответа
   mishaPH
 
Модератор
15 - 12.04.18 - 08:34
(13) я понял кажется
   toypaul
 
16 - 12.04.18 - 08:35
чем привычнее тем и делай. можно АДО, можно ТойСКЛ, можно 1С++ (наверное)
   shuhard
 
17 - 12.04.18 - 08:37
(14) всё верно
Provider=SQLOLEDB
протестировать можно через файлик udl
   Dotoshin
 
18 - 12.04.18 - 09:11
(0) На VBA можно запрос написать и выполнить.
Вот тут посмотри как сделать http://info-comp.ru/obucheniest/380-vba-access-query.html

Там пример для access, но никто не мешает сделать то же самое в экселе, если access-а под рукой нет.
   mishaPH
 
Модератор
19 - 12.04.18 - 09:13
(18) а зачем мне из екселя лезть когда надо данные в 1с
   Dotoshin
 
20 - 12.04.18 - 09:24
(19) Ты же в в (0) сказал, что над не в 1с.
Если все же надо из 1с, но читать/писать в другую базу, то ответ в (10) и (11).
Если проблема с написанием строки подключения, создай пустой файл с расширением udl, как советует shuhard, сохрани его и кликни мышкой, должен открыться мастер настройки подключения. Далее заполняешь параметры и с последней вкладки копируешь строку подключения.
   ADirks
 
21 - 12.04.18 - 09:24
Если из 1С, то через 1С++::ODBCRecordSet телодвижений меньше, чем с ADO.

И не вижу принципиальной разницы, 1С это база, или какая-то другая.
   Z1
 
23 - 15.04.18 - 19:05
+ к 21  и типизацию можно получить (если в той базе есть типизированые id).
(0) так что используй 1с++
   trdm
 
24 - 15.04.18 - 19:19
(12) > самое удобное какой-то компонентой из 1с напрямую.

1c++ конечно же. + QA.ert.
Только запросы удобнее писать в конфигураторе с опенконфом + SQLIntellisence.vbs
   trdm
 
25 - 15.04.18 - 19:21
+(24) Хотя если БД не 1С-ная, то прийдется поизвращаться.
   mishaPH
 
Модератор
26 - 15.04.18 - 20:07
(24) (25) все перечисленное тобой есть. но база не 1с ная внешняя
   trdm
 
27 - 15.04.18 - 20:37
(26) Ваще не проблема.
1С++ может подсоединяться и к другим БД, не 1С-ным.
   trdm
 
28 - 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);
    КонецЕсли;
   Z1
 
29 - 16.04.18 - 10:28
(26)и что что внешняя.
sql сервер вообще не знает ничего об 1с
Есть таблица есть запрос - все
select * from NameTabl
   mishaPH
 
Модератор
30 - 16.04.18 - 10:29
(29) да это понятно. я пояснил к вопросу
   trdm
 
31 - 16.04.18 - 11:06
Ну дык в чем проблема-то?
Модифицируешь 1CQA.ert в плане подключения к другой БД 
Процедура Выполнить(Режим = 0)
код где пропатчить я в (28) написал и фигачишь себе запросы.
   mishaPH
 
Модератор
32 - 16.04.18 - 11:07
(31) да мерси. все сделаем.
   trdm
 
33 - 16.04.18 - 11:18
Вот и не вижу проблем. Единственно стремно писать запросы без подсказки по полям, но и тут можно придумать ченить.
Методы разные есть.
 
 
   mishaPH
 
Модератор
34 - 16.04.18 - 11:34
(33) что подразумевается под подсказкой?
известна структура таблиц и читать / писать туда надо не в слепую.

все делаю в посгри таблички. в МС скл просто не делал
   trdm
 
35 - 16.04.18 - 11:45
(34) > что подразумевается под подсказкой?
Вот это: https://github.com/trdm/hlam/blob/master/img/1Сsqlhelp.gif
   Mihenius
 
36 - 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);
Результат = Обработчик.ВыполнитьИнструкцию(ТекстЗапроса);
   Mihenius
 
37 - 16.04.18 - 11:52
Сами запросы хоть в репортинге рисовать можно...
   Mihenius
 
38 - 16.04.18 - 11:57
только проблема будет с блокировками и грязным чтением.

т.к. другая твоя программа ничего не знает про твои чтение/запись из 1с

и это нужно как то продумать и согласовать, хоть nolock для начала поставить.
   mishaPH
 
Модератор
39 - 16.04.18 - 12:00
(35) аа. ну да это не обязательно. помошники и конструктор
   mishaPH
 
Модератор
40 - 16.04.18 - 12:01
(38) тут решаемо.
   Mihenius
 
41 - 16.04.18 - 12:03
Единственное вроде прописать базу нужно в odbcad32

На 64 битных системах она хранится в
C:\Windows\SysWOW64\odbcad32.exe
   mishaPH
 
Модератор
42 - 04.05.18 - 14:42
Продолжаем
законнектился через.
    CmdА = СоздатьОбъект("ADODB.Command");

выборка селект идет нормально. 


в общем все также и тот же код как будто подключился к постгри, только коннект строка взял из (36)
мерси всем
   Ёпрст
 
43 - 04.05.18 - 14:46
(42) нафик адо ?
писать проще через ODBCRecordset
   Ёпрст
 
44 - 04.05.18 - 14:46
раз у тебя есть 1cpp
   mishaPH
 
Модератор
45 - 04.05.18 - 14:46
(43) а чем? чего проще через то что я делаю
   mishaPH
 
Модератор
46 - 04.05.18 - 14:47
(44) да она есть конечно.. но чесно говоря не использую. да и чего там писать. селекты да инсерты в трансферные базы
   mishaPH
 
Модератор
47 - 04.05.18 - 14:48
тем более запросы всё равно руками делаю. там же нет сложного чего то с соединениями и вложенными запросами. почти.
   Вафель
 
48 - 04.05.18 - 14:49
(45) в ТЗ можно выгружать одной строчкой
   mishaPH
 
Модератор
49 - 04.05.18 - 14:56
(48) гм. ну да. ест + не надо перебирать все.
 
 Рекламное место пустует
   Вафель
 
50 - 04.05.18 - 14:57
установка параметров а ля список значений
   Ёпрст
 
51 - 04.05.18 - 15:03
(45) делать подготовленные запросы с изменяемыми параметрами, устанавливать значения параметров ну и т.д.
   trad
 
52 - 04.05.18 - 15:18
(49) попробуй получи значение типа numeric или decimal или int через ado в семерку
   mishaPH
 
Модератор
53 - 04.05.18 - 15:24
(52) будет ругаться плохой тип? в постгри к переменной ставлю ::text и все.
Кстати а как в мс скл сразу чтобы переменная была типа текст
   trad
 
54 - 04.05.18 - 15:36
(53) на стороне сервера конвертируешь число в строку, на стороне семерки получаешь вместо числа получаешь строку.
оно тебе надо?
а 1С++::ODBCRecordSet передает число как надо
   trad
 
55 - 04.05.18 - 15:38
>Кстати а как в мс скл сразу чтобы переменная была типа текст

не совсем понял вопрос, но
cast(Поле as varchar)
   mishaPH
 
Модератор
56 - 04.05.18 - 15:39
(54) а что такого в конвертации. по сути оно что строка что число

дело в том, что 1с++ ну нет времени сейчас осваивать. попробую 1 день посвятить. если взлетит сразу - то перейду. если нет - то придется по уже наработанной технологии
   trad
 
57 - 04.05.18 - 15:40
кроме всего, ado - это com-обертка всех данных
ODBCRecordSet - передача "прямее"
на больших объемах это может быть важно
   mishaPH
 
Модератор
58 - 04.05.18 - 15:42
(57) ну ты почти уговорил ;) попробую.

но честно говоря нет времени.
   Ёпрст
 
59 - 04.05.18 - 15:42
(56) там всего-то пару методов
   trad
 
60 - 04.05.18 - 15:42
(56) затраты на конвертацию
   trad
 
61 - 04.05.18 - 15:43
(59) я бы даже сказал - один
   trad
 
62 - 04.05.18 - 15:46
(61) а да, УстБД еще ))


Список тем форума
Рекламное место пустует  Рекламное место пустует
Здесь во втором сообщении вам дадут решение, а в двадцатом дадут правильное решение. Ymryn
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует