| Подключение приложения C++ Builder к базе данных Excel через ADO |
Подключение приложения C++ Builder к базе данных Excel через ADO.
Пример подключения приложения C++ Builder к базе данных Excel через ADO используя OLE интерфейсы:
#include "utilcls.h"
#include "sysvari.h"
#include "ComObj.hpp"
AnsiString sql = "SELECT [справочник отделений$].* From [справочник отделений$] ";
Variant cnn = CreateOleObject("ADODB.Connection");
Variant rst = CreateOleObject("ADODB.Recordset");
cnn.OlePropertySet("Provider","MSDASQL.1");
cnn.OlePropertySet("Open","Driver={Microsoft Excel Driver (*.xls)};
DBQ=D:\\ADO\\справочники.xls; ReadOnly=False;");
rst.OleProcedure("Open" ,sql.c_str(), cnn, 1, 3, 1);
Variant Fields = rst.OlePropertyGet("Fields","Otd");
ListBox1->Clear();
while(rst.OlePropertyGet("EOF")== 0)
{
ListBox1->Items->Add(Fields.OlePropertyGet("OriginalValue"));
}
rst.OleProcedure("MoveNext");
if(rst.OlePropertyGet("EOF")== 1) break;
}
Формирование SQL запросов в книге Excell:
Строка AnsiString sql = "SELECT [справочник отделений$].* From [справочник отделений$] "; формирует запрос к данным, находящимся на листе «справочник отделений».
Вы меня спросите: «Как же они формируются ?»
На что я вам отвечу: «Очень просто!»
Чтобы определить в запросе рабочий лист как таблицу базы данных, используйте имя рабочего листа, сопровождаемое знаком «$», окруженных квадратными скобками или символом кавычки` (под тильдой) .
Например:
strSQL = "SELECT * FROM [справочник отделений $]"
или
strSQL = "SELECT * FROM ` справочник отделений $`"
Можно также определить именованный диапазон ячеек базой данных, для этого следует использовать имя диапазона в запросе.
Например:
strQuery = "SELECT * FROM MyRange"
Чтобы определить неименованный диапазон ячеек базой данных, добавьте после знака $ стандартную систему обозначения диапазона Excel.
Например:
strQuery = "SELECT * FROM [справочник отделений $A1:B16]"
Все ячейки с данными, не входящие в диапазон, а также пустые строки в самом диапазоне не будут входить в базу данных.
Предостережение определения рабочих листов:
Поставщик данных (провайдер) по-умолчанию считает, что таблица данных начинается с верхней, крайней левой непустой ячейки, на выбранном рабочем листе. Другими словами, ваша таблица данных может начаться с ячеек С3 или D5, однако нельзя, например, напечатать worksheet заголовок выше и левее от данных в ячейке A1, то бишь данные не должны начинаться с ячейки А1, т.к. верхняя ячейка в заданном диапазоне содержит имя таблицы. См. Рис. 1.

Рис.1.

Рис.2.
На рисунке 2.показано, что данные не должны начинаться с ячейки А1. В приведённом примере Провайдер определит БД как таблицу из 2-х полей с названиями: «01» и «Биохимическая лаборатория». Вобщем, если диапазон не определён, то имена полей таблиц хранит первая непустая верхняя строка, ну а если определён, то самая верхняя.
Версия для печати |
|