.. Автор: Кирилл Мирошниченко aka spock, mailto: spock@km.ru

.. include:: commonchm.txt

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

..	<chminfo>
		<insert nodes="//common/maininfo/*"/>
		<alinks>_1cpp_oledb_</alinks>
	</chminfo>

.. contents:: Содержание
	:backlinks: none

Используется для прямого доступа к базе данных через OLEDB-провайдер.
Для доступа используются классы:
	
	* OLEDBData_ - класс предназначен для осуществления подключения 
	  к источнику данных и создания команд в контексте данного под-
	  ключения.
	* OLEDBCommand_ - класс предназначен для выполнения команд через
	  oledb-провайдер и манипулирования данными.


#####################################################################
OLEDBData
#####################################################################

Данный класс предоставляет доступ для подкючения к источнику данных 
через oledb-провайдер. Класс используется совместно с 
классом OLEDBCommand_.

Методы
=====================================================================
..	<chminfo split="0" splitchild="1">
		<insert nodes="//common/propsmethods/*"/>
	</chminfo>

Соединение / Connect
---------------------------------------------------------------------
	**Синтаксис:**  Соединение(СтрокаСоединения)

	**Возвращает:** тип: Число. 1 - удачное установление соединения, 0 - не удачное.

	**Параметры:**
		- СтрокаСоединения - тип: Строка.
	
	**Описание:** позволяет сконфигурировать соединение 
	с указанным источником данных.

Пример::
	
	oledb.Connect("Provider=VFPOLEDB.1;Deleted=Yes;Data Source=" + 
	КаталогИБ() + ";Mode=ReadWrite;Mask Password=False;
	Collating Sequence=MACHINE;");

СоздатьКоманду / CreateCommand
---------------------------------------------------------------------
	**Синтаксис:** СоздатьКоманду()

	**Возвращает:** тип: экземпляр класса OLEDBCommand.

	**Описание:** возвращает основной объект, в контексте которого
	осуществляется работа с данными (выполнение запросов, манипу-
	лирование данными).

Закрыть / Close
---------------------------------------------------------------------
	**Синтаксис:** Закрыть()
	
	**Описание:** закрывает текущее подключение.

ПрисоединитьИБ / AttachIB
---------------------------------------------------------------------
	**Синтаксис:**  ПрисоединитьИБ(КаталогИБ, [СтрокаСоединения])

	**Параметры:**
		- КаталогИБ - тип: Строка. Путь к каталогу информационной базы. Должен заканчиваться "\\".
		- СтрокаСоединения - тип: Строка. Строка соединения указывающая источник данных. Значение по умолчанию - "Provider=VFPOLEDB.1;Deleted=Yes;Mode=ReadWrite;Collating Sequence=MACHINE;Data Source=%1", где %1 - переданный КаталогИБ.
	
	**Описание:** позволяет загрузить метаданные из указанного каталога ИБ
	и сконфигурировать соединение с указанным источником данных.
	В дальнейшем, при выполнении запросов через OLEDBCommand, парсер будет
	разрешать метаимена по подключенным метаданным.

#####################################################################
OLEDBCommand
#####################################################################

Данный класс предназначен для получения данных от провайдера и 
манипулирования данными. Экземпляр класса не может быть создан явно 
( прим: **СоздатьОбъект("OLEDBCommand")** ). Создать экземпляр класса 
можно только при помощи метода СоздатьКоманду() класса OLEDBData_.
В тексте sql-выражений допускается использование метаимен, которые 
транслируются в:
	
	+ реальные имена таблиц;
	+ реальные имена полей таблиц;

В тексте запроса позволено использование типизирующего псевдонима.

Формат типизирующего псевдонима
=====================================================================
Квадратные скобки являются элементом формата::

	[<ИмяПоля> $<Тип1С>]
	<ИмяПоля> ::= <имя, которое будет доступно для обращения>
	<Тип1С> ::= <строка представляющая тип 1С>

Пример (`запрос по справочнику Номенклатура с приведением результата к типу Справочник.Номенклатура`)::

	SELECT 
		SPR.ID as [Элемент $Справочник.Номенклатура] 
	FROM 
		$Справочник.Номенклатура as SPR

Методы
=====================================================================
..	<chminfo split="0" splitchild="1">
		<insert nodes="//common/propsmethods/*"/>
	</chminfo>

Отладка / Debug
---------------------------------------------------------------------
	**Синтаксис:** Отладка(Режим)

	**Параметры:**
		- Режим - тип: Число. 1 - включить отладку, 0 - отключить отладку.
			
	**Примечание:** По умолчанию отладка отключена.

	**Описание:** включает/отключает режим отладки sql-выражения. 
	При включенной отладке, sql-выражения, транслированные в реальные имена, 
	будут выводиться в окно сообщений.

Выполнить / Execute
---------------------------------------------------------------------
	**Синтаксис:** Выполнить([ТекстSQL])

	**Параметры:**
		- ТекстSQL - тип: Строка. SQL-выражение (вида INSERT, UPDATE, DELETE). Для подготовленного запроса параметр должен быть опущен.

	**Возвращает:** тип: Число. Количество обработанных строк.

	**Описание:** выполняет SQL-выражение (DML, вида INSERT, UPDATE, DELETE) 
	и возвращает количество обработанных строк. В случае возникновения 
	ошибки, будет сгенерировано исключение с описанием ошибки.

ВыполнитьИнструкцию / ExecuteStatement
---------------------------------------------------------------------
	**Синтаксис:** ВыполнитьИнструкцию([ТекстSQL], [ТаблицаРезультатов], [флОчищать=1])

	**Параметры:**
		- ТекстSQL - тип: Строка. SQL-выражение. Для подготовленного запроса параметр должен быть опущен.
		- ТаблицаРезультатов - тип: ТаблицаЗначений. Объект, в который будет выгружен результат запроса. Не обязателен.
		- флОчищать - тип: Число. 1 - очищать переданную таблицу результатов (ТаблицаРезультатов), 0 - не очищать. Параметр не обязателен, по умлочанию - 1.

	**Возвращает:** тип: ТаблицаЗначений. Результат запроса в виде 
	таблицы значений. Колонки таблицы значений будут типизированы 
	соответствующими значениями.

	**Описание:** выполняет SQL-выражение и возвращает результат в виде 
	таблицы значений. Если результат запроса пустой, то возвращается 
	таблица значений с типизированными колонками. В случае возникновения 
	ошибки, будет сгенерировано исключение с описанием ошибки.

Закрыть / Close
---------------------------------------------------------------------
	**Синтаксис:** Закрыть()

	**Описание:** закрывает команду.

УстановитьТекстовыйПараметр / SetTextParam
---------------------------------------------------------------------
	**Синтаксис:** УстановитьТекстовыйПараметр(ИмяПараметра, ЗначениеПараметра)

	**Параметры:**
		- ИмяПараметра - тип: Строка. Имя текстового параметра.
		- ЗначениеПараметра - тип: Неопределенный. Значение текстового параметра.

	**Описание:** устанавливает текстовый параметр, имя которого 
	было описано в SQL-выражении. Метод необходимо вызывать до передачи 
	текста запроса провайдеру.

УстановитьКаталогВремТаблиц / SetTempTablesDir
---------------------------------------------------------------------
	**Синтаксис:** УстановитьКаталогВремТаблиц(Директория)

	**Параметры:**
		- Директория - тип: Строка. Каталог, в котором будут создаваться временные таблицы.

	**Описание:** метод устанавливает каталог, в котором могут создаваться 
	временные таблицы. Путь к каталогу временных таблиц не должен содержать 
	пробелов. Проверка на правильность пути классом не производится.

	**Примечание:** Использование метода не обязательно. В этом случае 
	все временные таблицы будут создаваться в каталоге ИБ.

УложитьСписокОбъектов / PutObjectList
---------------------------------------------------------------------
	**Синтаксис:** УложитьСписокОбъектов(Объект, ИмяТабл, ВидСпр)

	**Параметры:**
		- Объект - тип: Справочник/Документ/СписокЗначений (содержащий элементы типа Справочник, Документ). Объект, который необходимо уложить во временную таблицу.
		- ИмяТабл - тип: Строка. Возвращаемое значение. Имя временной таблицы, которое будет сгенерировано методом и возвращено через этот параметр.
		- ВидСпр - тип: Строка. Вид справочника для иерархического включения элементов.

	**Описание:** сохраняет Объект (или список объектов, если передан список значений) 
	во временную таблицу. Имя временной таблицы генерируется методом и 
	возвращается через второй параметр (именем является GUID). Временная таблица имеет 
	поле VAL CHAR(9) и служебное поле ISFOLDER NUMERIC(1,0).

	Если указан параметр ВидСпр (вид многоуровневого справочника), то таблица будет содержать элементы (без групп), иерархически принадлежащие группам (Подобно оператору "в" встроенного языка запросов 1С).
	
	Уничтожать временные таблицы явным образом не обязательно ( прим: DROP TABLE MyTmpTbl ) - все временные таблицы
	будут уничтожены в момент закрытия команды ( Закрыть() ) или при уничтожении объекта OLEDBCommand_.

Пример::

	ВрТабл = "";
	cmd.УложитьСписокОбъектов(ТекГруппа, ВрТабл, "Номенклатура");
	Сообщить("Что тут: " + ВрТабл); // Например, "Что тут: 858573b1-5a6f-459e-9c75-ec63e2a1d858"

УстановитьТаймаутВыполнения / SetExecTimeOut
---------------------------------------------------------------------
	**Синтаксис:** УстановитьТаймаутВыполнения(Таймаут)

	**Параметры:**
		- Таймаут - тип: Число. Количество секунд таймаута запроса.
		
	**Описание:** метод устанавливает количество секунд таймаута запроса. 
	После истечения этого времени запрос прекращается с ошибкой.
	Значение параметра равное 0 - бесконечное выполнение запроса.

ДобПараметр / AddParam
---------------------------------------------------------------------
	**Синтаксис:** ДобПараметр(IOType, DBType, Len, Prec)

	**Параметры:**
		- IOType - тип: Число. Направления параметра:

			* 1 - DBPARAMIO_INPUT;
			* 2 - DBPARAMIO_OUTPUT;
			* 3 - DBPARAMIO_INPUT | DBPARAMIO_OUTPUT.

		- DBType - тип: Число. DBTYPE-тип параметра.
		
		- Len - тип: Число. Длина параметра.
		
		- Prec - тип: Число. Точность параметра.
		
	**Описание:** добавляет описание параметра для параметризированного запроса.

УстановитьПараметр / SetParam
---------------------------------------------------------------------
	**Синтаксис:** УстановитьПараметр(НомерПараметра, Значение)

	**Параметры:**
		- НомерПараметра - тип: Число. Номер параметра, отсчет идет от 1.
		
		- Значение - тип: Любой. Значение параметра.
		
	**Описание:** устанавливает значение параметра параметризированного запроса.

КолвоПараметров / ParamCnt
---------------------------------------------------------------------
	**Синтаксис:** КолвоПараметров()

	**Возвращает:** тип: Число. Количество добавленных параметров.

	**Описание:** Возвращает количество добавленных параметров.

УдалитьПараметр / DeleteParam
---------------------------------------------------------------------
	**Синтаксис:** УдалитьПараметр(НомерПараметра)

	**Параметры:**
		- НомерПараметра - тип: Число. Номер параметра, отсчет идет от 1.
		
	**Описание:** удалаяет параметр.

УдалитьПараметры / DeleteParams
---------------------------------------------------------------------
	**Синтаксис:** УдалитьПараметры()
	
	**Описание:** удалаяет параметры.

Подготовить / Prepare
---------------------------------------------------------------------
	**Синтаксис:** Подготовить(ТекстSQL)

	**Параметры:**
		- ТекстSQL - тип: Строка. SQL-выражение.

	**Описание:** позволяет *подготовить* SQL запрос. Примняется для параметризированных запросов.
	Параметризированный запрос может иметь параметры (скалярные значения некоторых констант в запросе заменяют
	символами подстановки "?" (*SQL параметры*)). В последствии предварительно изменяя значения параметров
	подготовленный запрос можно выполнить несколько раз. Так обеспечивается наиболее оптимальное выполнение
	нескольких запрсов отличающихся скалярными характеристиками.
	
ОтменитьПодготовку / Unprepare
---------------------------------------------------------------------
	**Синтаксис:** ОтменитьПодготовку()

	**Описание:** сбросить подготовленный запрос.
	
#####################################################################
Приложение #1 OLEDB: Преобразование типов OLE DB к типам 1С
#####################################################################

+-------+------------------+------------+----------------+
|  Код  |     Тип OLEDB    |   Тип 1С   | Примечание     |
+-------+------------------+------------+----------------+
|131    |DBTYPE_NUMERIC    | Число      |                |
+-------+------------------+            +----------------+
|2      |DBTYPE_I2         |            |                |
+-------+------------------+            +----------------+
|3      |DBTYPE_I4         |            |                |
+-------+------------------+            +----------------+
|4      |DBTYPE_R4         |            |                |
+-------+------------------+            +----------------+
|5      |DBTYPE_R8         |            |                |
+-------+------------------+            +----------------+
|6      |DBTYPE_CY         |            |                |
+-------+------------------+            +----------------+
|14     |DBTYPE_DECIMAL    |            |                |
+-------+------------------+            +----------------+
|17     |DBTYPE_UI1        |            |                |
+-------+------------------+            +----------------+
|16     |DBTYPE_I1         |            |                |
+-------+------------------+            +----------------+
|18     |DBTYPE_UI2        |            |                |
+-------+------------------+            +----------------+
|19     |DBTYPE_UI4        |            |                |
+-------+------------------+            +----------------+
|20     |DBTYPE_I8         |            |                |
+-------+------------------+            +----------------+
|21     |DBTYPE_UI8        |            |                |
+-------+------------------+            +----------------+
|11     |DBTYPE_BOOL       |            |                |
+-------+------------------+------------+----------------+
|133    |DBTYPE_DBDATE     |            |                |
+-------+------------------+ Дата       +----------------+
|135    |DBTYPE_DBTIMESTAMP|            |С обрез. времени|
+-------+------------------+------------+----------------+
|130    |DBTYPE_WSTR       | Строка     |                |
+-------+------------------+            +----------------+
|1      |DBTYPE_NULL       |            |                |
+-------+------------------+            +----------------+
|7      |DBTYPE_DATE       |            |                |
+-------+------------------+            +----------------+
|8      |DBTYPE_BSTR       |            |не поддерж.     |
+-------+------------------+            +----------------+
|10     |DBTYPE_ERROR      |            |не поддерж.     |
+-------+------------------+            +----------------+
|12     |DBTYPE_VARIANT    |            |не поддерж.     |
+-------+------------------+            +----------------+
|13     |DBTYPE_IUNKNOWN   |            |не поддерж.     |
+-------+------------------+            +----------------+
|72     |DBTYPE_GUID       |            |                |
+-------+------------------+            +----------------+
|128    |DBTYPE_BYTES      |            |не поддерж.     |
+-------+------------------+            +----------------+
|129    |DBTYPE_STR        |            |                |
+-------+------------------+            +----------------+
|132    |DBTYPE_UDT        |            |не поддерж.     |
+-------+------------------+            +----------------+
|134    |DBTYPE_DBTIME     |            |                |
+-------+------------------+------------+----------------+


#####################################################################
Приложение #2 OLEDB: Преобразование типов 1С к типам OLE DB
#####################################################################

+------------------+------------+----------------+--------------------+------------------+
|     Тип OLEDB    |   Тип 1С   | Примечание     |     SQLOLEDB       |     VFPOLEDB     |
+------------------+------------+----------------+--------------------+------------------+
|DBTYPE_I2         |Число       |                |smallint            |                  |
+------------------+            +----------------+--------------------+------------------+
|DBTYPE_I4         |            |                |int                 |integer           |
+------------------+            +----------------+--------------------+------------------+
|DBTYPE_R4         |            |                |float               |                  |
+------------------+            +----------------+--------------------+------------------+
|DBTYPE_R8         |            |                |real                |double            |
+------------------+            +----------------+--------------------+------------------+
|DBTYPE_CY         |            |                |money               |currency          |
+------------------+            +----------------+--------------------+------------------+
|DBTYPE_BOOL       |            |0-ложь, 1-истина|bit                 |logical           |
+------------------+            +----------------+--------------------+------------------+
|DBTYPE_DECIMAL    |            |                |decimal             |numeric, float    |
+------------------+            +----------------+--------------------+------------------+
|DBTYPE_UI1        |            |                |tinyint             |                  |
+------------------+            +----------------+--------------------+------------------+
|DBTYPE_I1         |            |                |numeric(3,0)        |                  |
+------------------+            +----------------+--------------------+------------------+
|DBTYPE_UI2        |            |                |numeric(5,0)        |                  |
+------------------+            +----------------+--------------------+------------------+
|DBTYPE_UI4        |            |                |numeric(10,0)       |                  |
+------------------+            +----------------+--------------------+------------------+
|DBTYPE_I8         |            |                |bigint              |                  |
+------------------+            +----------------+--------------------+------------------+
|DBTYPE_UI8        |            |                |numeric(20,0)       |                  |
+------------------+            +----------------+--------------------+------------------+
|DBTYPE_NUMERIC    |            |                |numeric             |                  |
+------------------+------------+----------------+--------------------+------------------+
|DBTYPE_GUID       |Строка      |                |uniqueidentifier    |                  |
+------------------+------------+----------------+--------------------+------------------+
|DBTYPE_STR        |Строка      |                |char, varchar, text |character         |
+                  +------------+----------------+                    +                  +
|                  |Число       |                |                    |                  |
+                  +------------+----------------+                    +                  +
|                  |Дата        |                |                    |                  |
+                  +------------+----------------+                    +                  +
|                  |Перечисление|                |                    |                  |
+                  +------------+----------------+                    +                  +
|                  |Справочник  |                |                    |                  |
+                  +------------+----------------+                    +                  +
|                  |Документ    |                |                    |                  |
+                  +------------+----------------+                    +                  +
|                  |Календарь   |                |                    |                  |
+                  +------------+----------------+                    +                  +
|                  |ВидРасчета  |                |                    |                  |
+                  +------------+----------------+                    +                  +
|                  |Счет        |                |                    |                  |
+                  +------------+----------------+                    +                  +
|                  |ВидСубконто |                |                    |                  |
+                  +------------+----------------+                    +                  +
|                  |ПланСчетов  |                |                    |                  |
+------------------+------------+----------------+--------------------+------------------+
|DBTYPE_DATE       |Дата        |                |datetime            |date              |
+------------------+            +----------------+--------------------+------------------+
|DBTYPE_DBDATE     |            |                |                    |date              |
+------------------+------------+----------------+--------------------+------------------+
|DBTYPE_DBTIMESTAMP|Дата        |                |datetime            |datetime          |
+                  +------------+----------------+                    +                  +
|                  |Строка      |                |                    |                  |
+------------------+------------+----------------+--------------------+------------------+
|DBTYPE_DBTIME     |Число       |                |                    |                  |
+                  +------------+----------------+                    +                  +
|                  |Строка      |                |                    |                  |
+------------------+------------+----------------+--------------------+------------------+