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

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

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

  • OLEDBData - класс предназначен для осуществления подключения к источнику данных и создания команд в контексте данного под- ключения.
  • OLEDBCommand - класс предназначен для выполнения команд через oledb-провайдер и манипулирования данными.
  • OLEDBData
  • OLEDBCommand
  • Приложение #1 OLEDB: Преобразование типов OLE DB к типам 1С
  • Приложение #2 OLEDB: Преобразование типов 1С к типам OLE DB


OLEDBData

1C++ :: Прямой доступ через OLE DB | Ранее: Прямой доступ через OLE DB | Далее: Соединение / Connect
OLEDBData

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

Методы

Соединение / Connect | позволяет сконфигурировать соединение с указанным источником данных.
СоздатьКоманду / CreateCommand | возвращает основной объект, в контексте которого осуществляется работа с данными (выполнение запросов, манипу- лирование данными).
Закрыть / Close | закрывает текущее подключение.
ПрисоединитьИБ / AttachIB | позволяет загрузить метаданные из указанного каталога ИБ и сконфигурировать соединение с указанным источником данных. В дальнейшем, при выполнении запросов через OLEDBCommand, парсер будет разрешать метаимена по подключенным метаданным.


OLEDBData::Соединение / Connect

1C++ :: Прямой доступ через OLE DB | Ранее: OLEDBData | Далее: СоздатьКоманду / CreateCommand
OLEDBData :: Соединение / Connect

Синтаксис: Соединение(СтрокаСоединения)

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

Параметры:
  • СтрокаСоединения - тип: Строка.

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

Пример:

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


OLEDBData::СоздатьКоманду / CreateCommand

1C++ :: Прямой доступ через OLE DB | Ранее: Соединение / Connect | Далее: Закрыть / Close
OLEDBData :: СоздатьКоманду / CreateCommand

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

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

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


OLEDBData::Закрыть / Close

1C++ :: Прямой доступ через OLE DB | Ранее: СоздатьКоманду / CreateCommand | Далее: ПрисоединитьИБ / AttachIB
OLEDBData :: Закрыть / Close

Синтаксис: Закрыть()

Описание: закрывает текущее подключение.


OLEDBData::ПрисоединитьИБ / AttachIB

1C++ :: Прямой доступ через OLE DB | Ранее: Закрыть / Close | Далее: OLEDBCommand
OLEDBData :: ПрисоединитьИБ / AttachIB

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

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

Описание: позволяет загрузить метаданные из указанного каталога ИБ и сконфигурировать соединение с указанным источником данных. В дальнейшем, при выполнении запросов через OLEDBCommand, парсер будет разрешать метаимена по подключенным метаданным.


OLEDBCommand

1C++ :: Прямой доступ через OLE DB | Ранее: ПрисоединитьИБ / AttachIB | Далее: Формат типизирующего псевдонима
OLEDBCommand

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

  • реальные имена таблиц;
  • реальные имена полей таблиц;

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

  • Формат типизирующего псевдонима

Методы

Отладка / Debug | включает/отключает режим отладки sql-выражения. При включенной отладке, sql-выражения, транслированные в реальные имена, будут выводиться в окно сообщений.
Выполнить / Execute | выполняет SQL-выражение (DML, вида INSERT, UPDATE, DELETE) и возвращает количество обработанных строк. В случае возникновения ошибки, будет сгенерировано исключение с описанием ошибки.
ВыполнитьИнструкцию / ExecuteStatement | выполняет SQL-выражение и возвращает результат в виде таблицы значений. Если результат запроса пустой, то возвращается таблица значений с типизированными колонками. В случае возникновения ошибки, будет сгенерировано исключение с описанием ошибки.
Закрыть / Close | закрывает команду.
УстановитьТекстовыйПараметр / SetTextParam | устанавливает текстовый параметр, имя которого было описано в SQL-выражении. Метод необходимо вызывать до передачи текста запроса провайдеру.
УстановитьКаталогВремТаблиц / SetTempTablesDir | метод устанавливает каталог, в котором могут создаваться временные таблицы. Путь к каталогу временных таблиц не должен содержать пробелов. Проверка на правильность пути классом не производится.
УложитьСписокОбъектов / PutObjectList | сохраняет Объект (или список объектов, если передан список значений) во временную таблицу. Имя временной таблицы генерируется методом и возвращается через второй параметр (именем является GUID). Временная таблица имеет поле VAL CHAR(9) и служебное поле ISFOLDER NUMERIC(1,0).
УстановитьТаймаутВыполнения / SetExecTimeOut | метод устанавливает количество секунд таймаута запроса. После истечения этого времени запрос прекращается с ошибкой. Значение параметра равное 0 - бесконечное выполнение запроса.
ДобПараметр / AddParam | добавляет описание параметра для параметризированного запроса.
УстановитьПараметр / SetParam | устанавливает значение параметра параметризированного запроса.
КолвоПараметров / ParamCnt | Возвращает количество добавленных параметров.
УдалитьПараметр / DeleteParam | удалаяет параметр.
УдалитьПараметры / DeleteParams | удалаяет параметры.
Подготовить / Prepare | позволяет подготовить SQL запрос. Примняется для параметризированных запросов. Параметризированный запрос может иметь параметры (скалярные значения некоторых констант в запросе заменяют символами подстановки "?" (SQL параметры)). В последствии предварительно изменяя значения параметров подготовленный запрос можно выполнить несколько раз. Так обеспечивается наиболее оптимальное выполнение нескольких запрсов отличающихся скалярными характеристиками.
ОтменитьПодготовку / Unprepare | сбросить подготовленный запрос.


Формат типизирующего псевдонима

1C++ :: Прямой доступ через OLE DB | Ранее: OLEDBCommand | Далее: Отладка / Debug
Формат типизирующего псевдонима

Квадратные скобки являются элементом формата:

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

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

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


OLEDBCommand::Отладка / Debug

1C++ :: Прямой доступ через OLE DB | Ранее: Формат типизирующего псевдонима | Далее: Выполнить / Execute
OLEDBCommand :: Отладка / Debug

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

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

Примечание: По умолчанию отладка отключена.

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


OLEDBCommand::Выполнить / Execute

1C++ :: Прямой доступ через OLE DB | Ранее: Отладка / Debug | Далее: ВыполнитьИнструкцию / ExecuteStatement
OLEDBCommand :: Выполнить / Execute

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

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

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

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


OLEDBCommand::ВыполнитьИнструкцию / ExecuteStatement

1C++ :: Прямой доступ через OLE DB | Ранее: Выполнить / Execute | Далее: Закрыть / Close
OLEDBCommand :: ВыполнитьИнструкцию / ExecuteStatement

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

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

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

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


OLEDBCommand::Закрыть / Close

1C++ :: Прямой доступ через OLE DB | Ранее: ВыполнитьИнструкцию / ExecuteStatement | Далее: УстановитьТекстовыйПараметр / SetTextParam
OLEDBCommand :: Закрыть / Close

Синтаксис: Закрыть()

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


OLEDBCommand::УстановитьТекстовыйПараметр / SetTextParam

1C++ :: Прямой доступ через OLE DB | Ранее: Закрыть / Close | Далее: УстановитьКаталогВремТаблиц / SetTempTablesDir
OLEDBCommand :: УстановитьТекстовыйПараметр / SetTextParam

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

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

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


OLEDBCommand::УстановитьКаталогВремТаблиц / SetTempTablesDir

1C++ :: Прямой доступ через OLE DB | Ранее: УстановитьТекстовыйПараметр / SetTextParam | Далее: УложитьСписокОбъектов / PutObjectList
OLEDBCommand :: УстановитьКаталогВремТаблиц / SetTempTablesDir

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

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

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

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


OLEDBCommand::УложитьСписокОбъектов / PutObjectList

1C++ :: Прямой доступ через OLE DB | Ранее: УстановитьКаталогВремТаблиц / SetTempTablesDir | Далее: УстановитьТаймаутВыполнения / SetExecTimeOut
OLEDBCommand :: УложитьСписокОбъектов / PutObjectList

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

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

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

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

Уничтожать временные таблицы явным образом не обязательно ( прим: DROP TABLE MyTmpTbl ) - все временные таблицы будут уничтожены в момент закрытия команды ( Закрыть() ) или при уничтожении объекта OLEDBCommand.

Пример:

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


OLEDBCommand::УстановитьТаймаутВыполнения / SetExecTimeOut

1C++ :: Прямой доступ через OLE DB | Ранее: УложитьСписокОбъектов / PutObjectList | Далее: ДобПараметр / AddParam
OLEDBCommand :: УстановитьТаймаутВыполнения / SetExecTimeOut

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

Параметры:
  • Таймаут - тип: Число. Количество секунд таймаута запроса.

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


OLEDBCommand::ДобПараметр / AddParam

1C++ :: Прямой доступ через OLE DB | Ранее: УстановитьТаймаутВыполнения / SetExecTimeOut | Далее: УстановитьПараметр / SetParam
OLEDBCommand :: ДобПараметр / AddParam

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

Параметры:

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

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

  • DBType - тип: Число. DBTYPE-тип параметра.

  • Len - тип: Число. Длина параметра.

  • Prec - тип: Число. Точность параметра.

Описание: добавляет описание параметра для параметризированного запроса.


OLEDBCommand::УстановитьПараметр / SetParam

1C++ :: Прямой доступ через OLE DB | Ранее: ДобПараметр / AddParam | Далее: КолвоПараметров / ParamCnt
OLEDBCommand :: УстановитьПараметр / SetParam

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

Параметры:
  • НомерПараметра - тип: Число. Номер параметра, отсчет идет от 1.
  • Значение - тип: Любой. Значение параметра.

Описание: устанавливает значение параметра параметризированного запроса.


OLEDBCommand::КолвоПараметров / ParamCnt

1C++ :: Прямой доступ через OLE DB | Ранее: УстановитьПараметр / SetParam | Далее: УдалитьПараметр / DeleteParam
OLEDBCommand :: КолвоПараметров / ParamCnt

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

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

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


OLEDBCommand::УдалитьПараметр / DeleteParam

1C++ :: Прямой доступ через OLE DB | Ранее: КолвоПараметров / ParamCnt | Далее: УдалитьПараметры / DeleteParams
OLEDBCommand :: УдалитьПараметр / DeleteParam

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

Параметры:
  • НомерПараметра - тип: Число. Номер параметра, отсчет идет от 1.

Описание: удалаяет параметр.


OLEDBCommand::УдалитьПараметры / DeleteParams

1C++ :: Прямой доступ через OLE DB | Ранее: УдалитьПараметр / DeleteParam | Далее: Подготовить / Prepare
OLEDBCommand :: УдалитьПараметры / DeleteParams

Синтаксис: УдалитьПараметры()

Описание: удалаяет параметры.


OLEDBCommand::Подготовить / Prepare

1C++ :: Прямой доступ через OLE DB | Ранее: УдалитьПараметры / DeleteParams | Далее: ОтменитьПодготовку / Unprepare
OLEDBCommand :: Подготовить / Prepare

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

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

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


OLEDBCommand::ОтменитьПодготовку / Unprepare

1C++ :: Прямой доступ через OLE DB | Ранее: Подготовить / Prepare | Далее: Приложение #1 OLEDB: Преобразование типов OLE DB к типам 1С
OLEDBCommand :: ОтменитьПодготовку / Unprepare

Синтаксис: ОтменитьПодготовку()

Описание: сбросить подготовленный запрос.


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

1C++ :: Прямой доступ через OLE DB | Ранее: ОтменитьПодготовку / Unprepare | Далее: Приложение #2 OLEDB: Преобразование типов 1С к типам OLE DB
Приложение #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

1C++ :: Прямой доступ через OLE DB | Ранее: Приложение #1 OLEDB: Преобразование типов OLE DB к типам 1С | Далее:
Приложение #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 | Число |  |  |
 | Строка |