Соединение = СоздатьОбъект ("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);
Исключение
Сообщить (ОписаниеОшибки (), "!");
Возврат;
КонецПопытки;
создание объекта COM
На практике столкнулся с такой задачей. Нужно из 1С получить данные с SQL сервера. Так, чтобы отправлялся серверу запрос, содержащий ФИО, дат. рождения, а сервер давал ответ в виде строки - адрес регистрации.
На VS2003 попытался сделать новый проект MFC ActiveX Control. Но что делать далее - не знаю. Может кто-то подскажет? Я новичок в создании ActiveX Control.
На практике столкнулся с такой задачей. Нужно из 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 серверу через этот источник данных. Вот отрывок из кода, который я писал когда-то давно:
Код:
Как видим, метод достаточно простой, нетрудоемкий и работает с SQL Server, Excel, Access, FoxPro...
...
Кстати, надо было уточнить, 1С какой версии. Приведенный выше код будет работать в 7.7.
В 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);
Исключение
Сообщить (ОписаниеОшибки (), "!");
Возврат;
КонецПопытки;
Соединение.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-объектами это вроде то же самое получается, просто несколько иным путем.
НаборЗаписей=СоздатьОбъект("ADODB.Recordset");
Попытка
НаборЗаписей=Команда.Execute (, "", 1);
Исключение
Сообщить (ОписаниеОшибки (), "!");
Возврат;
КонецПопытки;
Но как определить сколько записей в экземпляре НаборЗаписей? И как к ним обратиться из 1С?