Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

создание объекта COM

284
30 июня 2006 года
michael_is_98
587 / / 25.02.2005
Здравствуйте!
На практике столкнулся с такой задачей. Нужно из 1С получить данные с SQL сервера. Так, чтобы отправлялся серверу запрос, содержащий ФИО, дат. рождения, а сервер давал ответ в виде строки - адрес регистрации.
На VS2003 попытался сделать новый проект MFC ActiveX Control. Но что делать далее - не знаю. Может кто-то подскажет? Я новичок в создании ActiveX Control.
350
30 июня 2006 года
cheburator
589 / / 01.06.2006
[QUOTE=michael_is_98]Здравствуйте!
На практике столкнулся с такой задачей. Нужно из 1С получить данные с SQL сервера. Так, чтобы отправлялся серверу запрос, содержащий ФИО, дат. рождения, а сервер давал ответ в виде строки - адрес регистрации.
На VS2003 попытался сделать новый проект MFC ActiveX Control. Но что делать далее - не знаю. Может кто-то подскажет? Я новичок в создании ActiveX Control.[/QUOTE]
Причем тут MFC и ActiveX?
В 1С и из 1С данные общепринято выгружать через DBF, XML или в крайнем случае текстовые файлы (хотя, есть варианты и непосредственного обращения к COM-серверу).
Предлагаю варианты.
1) Построй запрос прямо на SQL сервере (Query Analyser) и выгрузи в DBF. Затем на 1С напиши обработку, загружающую данные из этой DBF. (Можно через XML, но сложнее).
2) Непосредственное обращение к серверу. Работает быстро и без всяких DBF-посредников. Заходишь в панель управления/Администрирование/Источники данных ODBC и добавляешь источник данных SQL Server. Затем в 1С пишешь обработку, которая будет обращаться непосредственно к SQL серверу через этот источник данных. Вот отрывок из кода, который я писал когда-то давно:
Код:
Соединение = СоздатьОбъект ("ADODB.Connection");
  Соединение.Open ("Data source = Моя база;", , , -1);
  Команда = СоздатьОбъект ("ADODB.Command");
  Команда.ActiveConnection = Соединение;
  Команда.CommandText = "INSERT INTO CLAIMS (S_POL, N_Pol, DU_S, DU_Z, ""Fam"", ""Imya"", ""Otch"", ""Dr"", ""W"", R_BM,
ну и так далее. Т. е. пишешь непосредственно текст запроса.
  Попытка
    Команда.Execute (, "", 1);
  Исключение
    Сообщить (ОписаниеОшибки (), "!");
    Возврат;
  КонецПопытки;

Как видим, метод достаточно простой, нетрудоемкий и работает с SQL Server, Excel, Access, FoxPro...
...
Кстати, надо было уточнить, 1С какой версии. Приведенный выше код будет работать в 7.7.
284
02 июля 2006 года
michael_is_98
587 / / 25.02.2005
[QUOTE=cheburator]Причем тут MFC и ActiveX?
В 1С и из 1С данные общепринято выгружать через DBF, XML или в крайнем случае текстовые файлы (хотя, есть варианты и непосредственного обращения к COM-серверу).
Предлагаю варианты.
1) Построй запрос прямо на SQL сервере (Query Analyser) и выгрузи в DBF. Затем на 1С напиши обработку, загружающую данные из этой DBF. (Можно через XML, но сложнее).[/QUOTE]
Через Query Analyzer по-моему нельзя напрямую в DBF выгрузить. Здесь нужно использовать компоненты. Какие, подскажите, пожалуйста.
Цитата:

2) Непосредственное обращение к серверу. Работает быстро и без всяких DBF-посредников. Заходишь в панель управления/Администрирование/Источники данных ODBC и добавляешь источник данных SQL Server. Затем в 1С пишешь обработку, которая будет обращаться непосредственно к SQL серверу через этот источник данных. Вот отрывок из кода, который я писал когда-то давно:
Код:
Соединение = СоздатьОбъект ("ADODB.Connection");
  Соединение.Open ("Data source = Моя база;", , , -1);
  Команда = СоздатьОбъект ("ADODB.Command");
  Команда.ActiveConnection = Соединение;
  Команда.CommandText = "INSERT INTO CLAIMS (S_POL, N_Pol, DU_S, DU_Z, ""Fam"", ""Imya"", ""Otch"", ""Dr"", ""W"", R_BM,
ну и так далее. Т. е. пишешь непосредственно текст запроса.
  Попытка
    Команда.Execute (, "", 1);
  Исключение
    Сообщить (ОписаниеОшибки (), "!");
    Возврат;
  КонецПопытки;

Как видим, метод достаточно простой, нетрудоемкий и работает с SQL Server, Excel, Access, FoxPro...
...
Кстати, надо было уточнить, 1С какой версии. Приведенный выше код будет работать в 7.7.


1С 7.7. использую.
Динамический вариант лучше, потому что БД Населения может обновляться.
С источником данных примерно понятно - т.е. имя БД, пароль доступа к БД, текст запроса будет записан в конфигурацию (хотя наверное лучше объевить через константы встроенные в конфигурацию 1С)
Единственно как затем из запроса получить кол-во записей, сами записи,значения полей?
Думаю, это должно быть описано в документации к компонентам доступа к данным.

А с COM-объектами это вроде то же самое получается, просто несколько иным путем.

284
03 июля 2006 года
michael_is_98
587 / / 25.02.2005
Не получается обработать результат запроса. После создания экземпляра Команда делаю так:
НаборЗаписей=СоздатьОбъект("ADODB.Recordset");
Попытка
НаборЗаписей=Команда.Execute (, "", 1);
Исключение
Сообщить (ОписаниеОшибки (), "!");
Возврат;
КонецПопытки;
Но как определить сколько записей в экземпляре НаборЗаписей? И как к ним обратиться из 1С?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог