powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Считывание столбцов таблицы
5 сообщений из 5, страница 1 из 1
Считывание столбцов таблицы
    #32966472
Хочу через ADO получить названия всех столбцов заданной таблицы.

Написал такой код


std::vector<_bstr_t> coll;
long i = 0;
SAFEARRAY* psa = SafeArrayCreateVector(VT_VARIANT, 0, 4);

_variant_t vtNull, var;
vtNull.vt = VT_NULL;

i=0;
SafeArrayPutElement(psa, &i, &vtNull);
i=1;
SafeArrayPutElement(psa, &i, &vtNull);

i=2;
var.vt = VT_BSTR;
var.bstrVal = bsTable;
SafeArrayPutElement(psa, &i, &var);

i = 3;
SafeArrayPutElement(psa, &i, &vtNull);
_variant_t Arr;

Arr.vt = VT_ARRAY|VT_VARIANT;
Arr.parray = psa;

RecordsetPtr rs = conn->OpenSchema(adSchemaColumns, &Array);

while (rs->EndOfFile != VARIANT_TRUE) {
_bstr_t bs = rs->Fields->Item[(_bstr_t) "COLUMN_NAME"]->Value;
coll.push_back(bs);
rs->MoveNext();
}



Проблема в том что попробовал на одной базе MySQL — всё ок, а вот в на таблице Аксесса выдаёт рекордсет нулевой длины ! В чём засада ?
...
Рейтинг: 0 / 0
Считывание столбцов таблицы
    #32967558
Alex_VC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то как-то заморочено все выглядит.
Может лучше так:
Код: plaintext
1.
2.
3.
_RecordsetPtr rs;
if(rs->Open(_T("select * from t"),....)// вообщем, открываем таблицу (можно и по-другому)
 for(int i= 0 ;i<rs->GetFields()->GetCount();i++)
   coll.push_back(_bstr_t(rs->GetFields()->GetItem(_variant_t((long)i))->GetName());
У меня работало...
...
Рейтинг: 0 / 0
Считывание столбцов таблицы
    #32967637
Alex_VCЧто-то как-то заморочено все выглядит.
Может лучше так:
Код: plaintext
1.
2.
3.
_RecordsetPtr rs;
if(rs->Open(_T("select * from t"),....)// вообщем, открываем таблицу (можно и по-другому)
 for(int i= 0 ;i<rs->GetFields()->GetCount();i++)
   coll.push_back(_bstr_t(rs->GetFields()->GetItem(_variant_t((long)i))->GetName());
У меня работало...

Нашёл ошибку (странно правда почему тогда MySQL проглатывал) - надо везде

_variant_t vtEmpty.vt = VT_EMPTY;
i=0;
SafeArrayPutElement(psa, &i, &vtEmpty);
...
Рейтинг: 0 / 0
Считывание столбцов таблицы
    #32969290
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_VCif(rs->Open(_T("select * from t"),....)

лучше так : "select * from t WHERE 1=0"

а если в таблицу много записей открываться долго будет
...
Рейтинг: 0 / 0
Считывание столбцов таблицы
    #32969617
Alex_VC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lepsik Alex_VCif(rs->Open(_T("select * from t"),....)

лучше так : "select * from t WHERE 1=0"

а если в таблицу много записей открываться долго будет
Согласен, но это на усмотрение заказчика (я открывал всю таблицу- нужны были все записи и имена полей)
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Считывание столбцов таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]