]> Прямой доступ через OLE DB

Прямой доступ через OLE DB

1C++ :: </a> </em> </td> <td style="text-align: right;"> <!-- Во второй ячейке пропишем ссылки на следующий/предыдущий топики и оставим возможность в каждом топике добавить свои линки, разместив их в otherlinks. По умолчанию otherlinks отсутствует. --> <subst nodes="chminfo/otherlinks/node()"/> | Ранее: <a href="prev" title="Перейти к предыдущей статье"><title to="prev"/></a> | Далее: <a href="next" title="Перейти к следующей статье"><title to="next"/></a> </td> </tr> <tr> <!-- Вторая строка таблицы будет заголовок топика. Чтобы каждый топик мог при необходимости изменить правило составления заголовка, сделаем здесь subst, а само правило пропишем ниже. Будем брать его из <topictitle> --> <td colspan="2" style="font-size:11pt;font-weight:bold"> <subst nodes="chminfo/topictitle/node()"/> </td> </tr> </table> <!-- А сюда собственно, вставим топик --> <topic/> </decoration> <!-- Основной стиль формирования ссылок на вынесенные топики --> <href> <a href="self"><title to="self"/></a> </href> <!-- Основной принцип объединения ссылок на вынесенные топики --> <hrefcombine> <ul> <foreach> <li><item/></li> </foreach> </ul> </hrefcombine> <!-- Содержимое данного тега подставляется в основной decoration через subst в каждом топике, для формирования заголовка топика. Его можно переопредеделить в топике, для задания другого правила составления заголовка. По умолчанию просто вставляется текст заголовка топика, а сам заголовок удаляется --> <topictitle> <title to="selfremove"/> </topictitle> </maininfo> <!-- Основная разметка для секций "Свойства", "Методы", "События" Задаем другие правила формирования ссылок на вынесенные топики, и объединения ссылок, а также формирования заголовка в дочерних секциях. --> <propsmethods> <!-- Ссылки на вынесенные топики объединим в таблицу --> <hrefcombine> <table border="1" cellspacing="0" cellpadding="3"> <foreach> <tr><item/></tr> </foreach> </table> </hrefcombine> <!-- Зададим разметку потомков, чтобы не писать ее в каждом топике --> <childs> <!-- Формирование ссылки на себя в родительском топике. Сформируем строку таблицы, где первая ячейка - ссылка на топик, а вторая - копия абзаца, в котором есть жирное слово "Описание", но без самого слова "Описание" --> <href> <td style="vertical-align:top"><a class="toc-backref" href="self"><title to="self"/></a></td> <td><subst nodes=".//p[strong='Описание:'][1]/node()[not(name()='strong' and .='Описание:')]"/></td> </href> <!-- Зададим другое правило составления заголовка. Пусть будет "Ссылка на описание объекта::ИмяМетода/Свойства" --> <topictitle> <a class="toc-backref" href="parent[1]" title="Перейти к описанию объекта"><title to="parent[1]"/></a> :: <title to="selfremove"/> </topictitle> <!-- Зададим другой способ задания <html><title> в формируемом файле. Он будет появлятся как имя топика во всех "founded topics" --> <chmtitle> <title to="parent[1]"/>::<title to="self"/> </chmtitle> <!-- Заставим дочерние секции добавлять слова из заголовка в индекс --> <autokw mode="2"/> <!-- На случай, если в описания метода есть еще подсекции, восстановим для них старые правила. --> <insert nodes="//common/maininfo/*[name()='hrefcombine']"/> <childs> <insert nodes="//common/maininfo/*[name()='href']"/> <insert nodes="//common/maininfo/*[name()='topictitle']"/> <chmtitle/> <autokw/> </childs> </childs> </propsmethods> </common></xml><chminfo> <insert nodes="//common/maininfo/*"/> <alinks>_1cpp_oledb_</alinks> </chminfo> <div class="contents topic"> <p class="topic-title first"><a id="id1" name="id1">Содержание</a></p> <ul class="simple"> <li><a class="reference" href="#oledbdata" id="id6" name="id6">OLEDBData</a><ul> <li><a class="reference" href="#id2" id="id7" name="id7">Методы</a><ul> <li><a class="reference" href="#connect" id="id8" name="id8">Соединение / Connect</a></li> <li><a class="reference" href="#createcommand" id="id9" name="id9">СоздатьКоманду / CreateCommand</a></li> <li><a class="reference" href="#close" id="id10" name="id10">Закрыть / Close</a></li> <li><a class="reference" href="#attachib" id="id11" name="id11">ПрисоединитьИБ / AttachIB</a></li> </ul> </li> </ul> </li> <li><a class="reference" href="#oledbcommand" id="id12" name="id12">OLEDBCommand</a><ul> <li><a class="reference" href="#id3" id="id13" name="id13">Формат типизирующего псевдонима</a></li> <li><a class="reference" href="#id4" id="id14" name="id14">Методы</a><ul> <li><a class="reference" href="#debug" id="id15" name="id15">Отладка / Debug</a></li> <li><a class="reference" href="#execute" id="id16" name="id16">Выполнить / Execute</a></li> <li><a class="reference" href="#executestatement" id="id17" name="id17">ВыполнитьИнструкцию / ExecuteStatement</a></li> <li><a class="reference" href="#id5" id="id18" name="id18">Закрыть / Close</a></li> <li><a class="reference" href="#settextparam" id="id19" name="id19">УстановитьТекстовыйПараметр / SetTextParam</a></li> <li><a class="reference" href="#settemptablesdir" id="id20" name="id20">УстановитьКаталогВремТаблиц / SetTempTablesDir</a></li> <li><a class="reference" href="#putobjectlist" id="id21" name="id21">УложитьСписокОбъектов / PutObjectList</a></li> </ul> </li> </ul> </li> <li><a class="reference" href="#oledb-ole-db-1" id="id22" name="id22">Приложение OLEDB: Преобразование типов данных OLE DB к типам 1С</a></li> </ul> </div> <p>Используется для прямого доступа к базе данных через OLEDB-провайдер. Для доступа используются классы:</p> <blockquote> <ul class="simple"> <li><a class="reference" href="#oledbdata">OLEDBData</a> - класс предназначен для осуществления подключения к источнику данных и создания команд в контексте данного под- ключения.</li> <li><a class="reference" href="#oledbcommand">OLEDBCommand</a> - класс предназначен для выполнения команд через oledb-провайдер и манипулирования данными.</li> </ul> </blockquote> <div class="section"> <h1><a id="oledbdata" name="oledbdata">OLEDBData</a></h1> <p>Данный класс предоставляет доступ для подкючения к источнику данных через oledb-провайдер. Класс используется совместно с классом <a class="reference" href="#oledbcommand">OLEDBCommand</a>.</p> <div class="section"> <h2><a id="id2" name="id2">Методы</a></h2> <chminfo split="0" splitchild="1"> <insert nodes="//common/propsmethods/*"/> </chminfo> <div class="section"> <h3><a id="connect" name="connect">Соединение / Connect</a></h3> <blockquote> <p><strong>Синтаксис:</strong> Соединение(СтрокаСоединения)</p> <dl class="docutils"> <dt><strong>Параметры:</strong></dt> <dd><ul class="first last simple"> <li>СтрокаСоединения - тип: Строка.</li> </ul> </dd> </dl> <p><strong>Описание:</strong> позволяет сконфигурировать соединение с указанным источником данных.</p> </blockquote> <p>Пример:</p> <pre class="literal-block"> oledb.Connect("Provider=VFPOLEDB.1;Deleted=Yes;Data Source=" + КаталогИБ() + ";Mode=ReadWrite;Extended Properties="";User ID=""; Password="";Mask Password=False;Collating Sequence=RUSSIAN;DSN="""); </pre> </div> <div class="section"> <h3><a id="createcommand" name="createcommand">СоздатьКоманду / CreateCommand</a></h3> <blockquote> <p><strong>Синтаксис:</strong> СоздатьКоманду()</p> <p><strong>Возвращает:</strong> тип: экземпляр класса OLEDBCommand.</p> <p><strong>Описание:</strong> возвращает основной объект, в контексте которого осуществляется работа с данными (выполнение запросов, манипу- лирование данными).</p> </blockquote> </div> <div class="section"> <h3><a id="close" name="close">Закрыть / Close</a></h3> <blockquote> <p><strong>Синтаксис:</strong> Закрыть()</p> <p><strong>Описание:</strong> закрывает текущее подключение.</p> </blockquote> </div> <div class="section"> <h3><a id="attachib" name="attachib">ПрисоединитьИБ / AttachIB</a></h3> <blockquote> <p><strong>Синтаксис:</strong> ПрисоединитьИБ(КаталогИБ, [СтрокаСоединения])</p> <p><strong>Параметры:</strong></p> <blockquote> <ul class="simple"> <li>КаталогИБ - тип: Строка. Путь к каталогу информационной базы. Должен заканчиваться "\".</li> <li>СтрокаСоединения - тип: Строка. Строка соединения указывающая источник данных. Значение по умолчанию - "Provider=VFPOLEDB.1;Deleted=Yes;Mode=ReadWrite;Collating Sequence=RUSSIAN;Data Source=%1", где %1 - переданный КаталогИБ.</li> </ul> </blockquote> <p><strong>Описание:</strong> позволяет загрузить метаданные из указанного каталога ИБ и сконфигурировать соединение с указанным источником данных. В дальнейшем, при выполнении запросов через OLEDBCommand, парсер будет разрешать метаимена по подключенным метаданным.</p> </blockquote> </div> </div> </div> <div class="section"> <h1><a id="oledbcommand" name="oledbcommand">OLEDBCommand</a></h1> <p>Данный класс предназначен для получения данных от провайдера и манипулирования данными. Экземпляр класса не может быть создан явно ( прим: <strong>СоздатьОбъект("OLEDBCommand")</strong> ). Создать экземпляр класса можно только при помощи метода СоздатьКоманду() класса <a class="reference" href="#oledbdata">OLEDBData</a>. В тексте sql-выражений допускается использование метаимен, которые транслируются в:</p> <blockquote> <ul class="simple"> <li>реальные имена таблиц;</li> <li>реальные имена полей таблиц;</li> </ul> </blockquote> <p>В тексте запроса позволено использование типизирующего псевдонима.</p> <div class="section"> <h2><a id="id3" name="id3">Формат типизирующего псевдонима</a></h2> <p>Квадратные скобки являются элементом формата:</p> <pre class="literal-block"> [<ИмяПоля> $<Тип1С>] <ИмяПоля> ::= <имя, которое будет доступно для обращения> <Тип1С> ::= <строка представляющая тип 1С> </pre> <p>Пример (<cite>запрос по справочнику Номенклатура с приведением результата к типу Справочник.Номенклатура</cite>):</p> <pre class="literal-block"> SELECT SPR.ID as [Элемент $Справочник.Номенклатура] FROM $Справочник.Номенклатура as SPR </pre> </div> <div class="section"> <h2><a id="id4" name="id4">Методы</a></h2> <chminfo split="0" splitchild="1"> <insert nodes="//common/propsmethods/*"/> </chminfo> <div class="section"> <h3><a id="debug" name="debug">Отладка / Debug</a></h3> <blockquote> <p><strong>Синтаксис:</strong> Отладка(Режим)</p> <dl class="docutils"> <dt><strong>Параметры:</strong></dt> <dd><ul class="first last simple"> <li>Режим - тип: Число. 1 - включить отладку, 0 - отключить отладку.</li> </ul> </dd> </dl> <p><strong>Примечание:</strong> По умолчанию отладка отключена.</p> <p><strong>Описание:</strong> включает/отключает режим отладки sql-выражения. При включенной отладке, sql-выражения, транслированные в реальные имена, будут выводиться в окно сообщений.</p> </blockquote> </div> <div class="section"> <h3><a id="execute" name="execute">Выполнить / Execute</a></h3> <blockquote> <p><strong>Синтаксис:</strong> Выполнить(ТекстSQL)</p> <dl class="docutils"> <dt><strong>Параметры:</strong></dt> <dd><ul class="first last simple"> <li>ТекстSQL - тип: Строка. SQL-выражение (вида INSERT, UPDATE, DELETE).</li> </ul> </dd> </dl> <p><strong>Возвращает:</strong> тип: Число. Количество обработанных строк.</p> <p><strong>Описание:</strong> выполняет SQL-выражение (DML, вида INSERT, UPDATE, DELETE) и возвращает количество обработанных строк. В случае возникновения ошибки, будет сгенерировано исключение с описанием ошибки.</p> </blockquote> </div> <div class="section"> <h3><a id="executestatement" name="executestatement">ВыполнитьИнструкцию / ExecuteStatement</a></h3> <blockquote> <p><strong>Синтаксис:</strong> ВыполнитьИнструкцию(ТекстSQL)</p> <dl class="docutils"> <dt><strong>Параметры:</strong></dt> <dd><ul class="first last simple"> <li>ТекстSQL - тип: Строка. SQL-выражение.</li> </ul> </dd> </dl> <p><strong>Возвращает:</strong> тип: ТаблицаЗначений. Результат запроса в виде таблицы значений. Колонки таблицы значений будут типизированы соответствующими значениями.</p> <p><strong>Описание:</strong> выполняет SQL-выражение и возвращает результат в виде таблицы значений. Если результат запроса пустой, то возвращается таблица значений с типизированными колонками. В случае возникновения ошибки, будет сгенерировано исключение с описанием ошибки.</p> </blockquote> </div> <div class="section"> <h3><a id="id5" name="id5">Закрыть / Close</a></h3> <blockquote> <p><strong>Синтаксис:</strong> Закрыть()</p> <p><strong>Описание:</strong> закрывает команду.</p> </blockquote> </div> <div class="section"> <h3><a id="settextparam" name="settextparam">УстановитьТекстовыйПараметр / SetTextParam</a></h3> <blockquote> <p><strong>Синтаксис:</strong> УстановитьТекстовыйПараметр(ИмяПараметра, ЗначениеПараметра)</p> <dl class="docutils"> <dt><strong>Параметры:</strong></dt> <dd><ul class="first last simple"> <li>ИмяПараметра - тип: Строка. Имя текстового параметра.</li> <li>ЗначениеПараметра - тип: Неопределенный. Значение текстового параметра.</li> </ul> </dd> </dl> <p><strong>Описание:</strong> устанавливает текстовый параметр, имя которого было описано в SQL-выражении. Метод необходимо вызывать до передачи текста запроса провайдеру.</p> </blockquote> </div> <div class="section"> <h3><a id="settemptablesdir" name="settemptablesdir">УстановитьКаталогВремТаблиц / SetTempTablesDir</a></h3> <blockquote> <p><strong>Синтаксис:</strong> УстановитьКаталогВремТаблиц(Директория)</p> <dl class="docutils"> <dt><strong>Параметры:</strong></dt> <dd><ul class="first last simple"> <li>Директория - тип: Строка. Каталог, в котором будут создаваться временные таблицы.</li> </ul> </dd> </dl> <p><strong>Описание:</strong> метод устанавливает каталог, в котором могут создаваться временные таблицы. Путь к каталогу временных таблиц не должен содержать пробелов. Проверка на правильность пути классом не производится.</p> <p><strong>Примечание:</strong> Использование метода не обязательно. В этом случае все временные таблицы будут создаваться в каталоге ИБ.</p> </blockquote> </div> <div class="section"> <h3><a id="putobjectlist" name="putobjectlist">УложитьСписокОбъектов / PutObjectList</a></h3> <blockquote> <p><strong>Синтаксис:</strong> УложитьСписокОбъектов(Объект, ИмяТабл, ВидСпр)</p> <dl class="docutils"> <dt><strong>Параметры:</strong></dt> <dd><ul class="first last simple"> <li>Объект - тип: Справочник/Документ/СписокЗначений (содержащий элементы типа Справочник, Документ). Объект, который необходимо уложить во временную таблицу.</li> <li>ИмяТабл - тип: Строка. Возвращаемое значение. Имя временной таблицы, которое будет сгенерировано методом и возвращено через этот параметр.</li> <li>ВидСпр - тип: Строка. Вид справочника для иерархического включения элементов.</li> </ul> </dd> </dl> <p><strong>Описание:</strong> сохраняет Объект (или список объектов, если передан список значений) во временную таблицу. Имя временной таблицы генерируется методом и возвращается через второй параметр (именем является GUID). Временная таблица имеет поле VAL CHAR(9) и служебное поле ISFOLDER NUMERIC(1,0).</p> <p>Если указан параметр ВидСпр (вид многоуровневого справочника), то таблица будет содержать элементы (без групп), иерархически принадлежащие группам (Подобно оператору "в" встроенного языка запросов 1С).</p> <p>Уничтожать временные таблицы явным образом не обязательно ( прим: DROP TABLE MyTmpTbl ) - все временные таблицы будут уничтожены в момент закрытия команды ( Закрыть() ) или при уничтожении объекта <a class="reference" href="#oledbcommand">OLEDBCommand</a>.</p> </blockquote> <p>Пример:</p> <pre class="literal-block"> ВрТабл = ""; cmd.УложитьСписокОбъектов(ТекГруппа, ВрТабл, "Номенклатура"); Сообщить("Что тут: " + ВрТабл); // Например, "Что тут: 858573b1-5a6f-459e-9c75-ec63e2a1d858" </pre> </div> </div> </div> <div class="section"> <h1><a id="oledb-ole-db-1" name="oledb-ole-db-1">Приложение OLEDB: Преобразование типов данных OLE DB к типам 1С</a></h1> <table border="1" class="docutils"> <colgroup> <col width="39%" /> <col width="26%" /> <col width="35%" /> </colgroup> <tbody valign="top"> <tr><td>Тип OLEDB</td> <td>Тип 1С</td> <td>Примечание</td> </tr> <tr><td>DBTYPE_NUMERIC</td> <td rowspan="14">Число</td> <td> </td> </tr> <tr><td>DBTYPE_I2</td> <td> </td> </tr> <tr><td>DBTYPE_I4</td> <td> </td> </tr> <tr><td>DBTYPE_R4</td> <td> </td> </tr> <tr><td>DBTYPE_R8</td> <td> </td> </tr> <tr><td>DBTYPE_CY</td> <td> </td> </tr> <tr><td>DBTYPE_DECIMAL</td> <td> </td> </tr> <tr><td>DBTYPE_UI1</td> <td> </td> </tr> <tr><td>DBTYPE_I1</td> <td> </td> </tr> <tr><td>DBTYPE_UI2</td> <td> </td> </tr> <tr><td>DBTYPE_UI4</td> <td> </td> </tr> <tr><td>DBTYPE_I8</td> <td> </td> </tr> <tr><td>DBTYPE_UI8</td> <td> </td> </tr> <tr><td>DBTYPE_BOOL</td> <td> </td> </tr> <tr><td>DBTYPE_DBDATE</td> <td rowspan="2">Дата</td> <td> </td> </tr> <tr><td>DBTYPE_DBTIMESTAMP</td> <td>С обрез. времени</td> </tr> <tr><td>DBTYPE_WSTR</td> <td rowspan="18">Строка</td> <td> </td> </tr> <tr><td>DBTYPE_EMPTY</td> <td> </td> </tr> <tr><td>DBTYPE_NULL</td> <td> </td> </tr> <tr><td>DBTYPE_DATE</td> <td> </td> </tr> <tr><td>DBTYPE_BSTR</td> <td> </td> </tr> <tr><td>DBTYPE_IDISPATCH</td> <td> </td> </tr> <tr><td>DBTYPE_ERROR</td> <td> </td> </tr> <tr><td>DBTYPE_VARIANT</td> <td> </td> </tr> <tr><td>DBTYPE_IUNKNOWN</td> <td> </td> </tr> <tr><td>DBTYPE_ARRAY</td> <td> </td> </tr> <tr><td>DBTYPE_BYREF</td> <td> </td> </tr> <tr><td>DBTYPE_GUID</td> <td> </td> </tr> <tr><td>DBTYPE_VECTOR</td> <td> </td> </tr> <tr><td>DBTYPE_RESERVED</td> <td> </td> </tr> <tr><td>DBTYPE_BYTES</td> <td> </td> </tr> <tr><td>DBTYPE_STR</td> <td> </td> </tr> <tr><td>DBTYPE_UDT</td> <td> </td> </tr> <tr><td>DBTYPE_DBTIME</td> <td> </td> </tr> </tbody> </table> </div> </div> </body> </html>