|
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) а да, УстБД еще ))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |