Как привязать данные к SQLBindCol с помощью ODBC Driver API с помощью C++

Я пытаюсь создать собственный драйвер ODBC с помощью C++ для среды Windows (например, PostgreSQL, Simba, Firebird и т. д.), поскольку API ODBC имеет несколько API ODBC по умолчанию.

Я установил соединения с помощью DSN и могу выполнить запрос SQL, используя SQLExecuteDirect.

Однако при подключении Excel с нашим драйвером ODBC я не могу привязать список таблиц к мастеру запросов Microsoft. введите описание изображения здесь

SQLTables(), SQLBindColumn() и SQLFetch() используются для получения списка имен таблиц здесь. Данные связываются с помощью метода SQLBindColumn.

Но я не понимаю, как получить имена таблиц и привязать их к Excel?


person ǨÅVËĔŊ RĀǞĴĄŅ    schedule 23.03.2016    source источник
comment
Почему вы создаете свой собственный драйвер ODBC?! И для какого источника данных вы пишете этот драйвер?   -  person MikeC    schedule 03.04.2016
comment
Спасибо за ответ @MikeC. У меня есть собственная эконом-служба. Я хочу подключить и привязать эти базовые данные бережливости к MS-Excel или другим инструментам... Аналогично этому Hive-ODBC. Но я хочу построить это с визуальной студией.   -  person ǨÅVËĔŊ RĀǞĴĄŅ    schedule 04.04.2016
comment
Рассматривали ли вы возможность использования SimbaEngine SDK (simba.com/drivers/simba-engine-sdk?) в качестве основы для вашего драйвера? Все драйверы Simba основаны на этом пакете SDK, и вы сможете установить и запустить их в течение недели.   -  person KylePorter    schedule 13.04.2016
comment
@KylePorter Мое требование - создать собственный драйвер ODBC без использования стороннего программного обеспечения.   -  person ǨÅVËĔŊ RĀǞĴĄŅ    schedule 14.04.2016
comment
Я немного смущен здесь. Вы спрашиваете, как правильно реализовать SQLTables(), чтобы он возвращал таблицы в правильной форме?   -  person isapego    schedule 16.04.2016


Ответы (2)


После вызова SQLExecDirect() или SQLPrepare() можно вызвать SQLDescribeCol(). SQLDescribeCol() вернет всю необходимую информацию о столбцах.

Вы можете посетить веб-сайт Microsoft здесь: https://docs.microsoft.com/en-gb/sql/odbc/reference/syntax/sqldescribecol-function

Хотя это полезно, только если вы делаете

select top 1 * from (table name **SQLTables** found)

Или если вы хотите найти имена столбцов из общего SQL.


Другой способ найти все столбцы — использовать функцию SQLColumns(). Это похоже на SQLTables() (тот же принцип поиска) и возвращает набор результатов с результатами. Найдено здесь: https://docs.microsoft.com/en-gb/sql/odbc/reference/syntax/sqlcolumns-function

person Nat    schedule 19.04.2017

Приложение Excel загрузит всю информацию о схеме перед выполнением любого запроса.

В этом случае метод SQLTables будет вызываться с такими атрибутами, как каталог, схема и имена таблиц. На основе атрибута, называемого схемой, информация должна быть возвращена в методе SQLFetch.

Для справки: https://docs.microsoft.com/en-us/sql/odbc/reference/syntax/sqltables-function

Если метод SQLTables был вызван с атрибутом имени каталога, то имя каталога должно быть привязано в методе SQLFetch с использованием адреса данных, возвращенного в методе SQLBindCol.

Точно так же имена схем и таблиц также должны были быть возвращены для метода SQLTables.

Для получения дополнительной информации о том, как связать информацию о схеме столбца, обратитесь к разделу комментариев по приведенной выше ссылке.

person Karthik Sridhar    schedule 19.04.2017