Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.141.100.120] |
|
Страницы: (19) 1 2 [3] 4 5 ... 18 19 все ( Перейти к последнему сообщению ) |
Сообщ.
#31
,
|
|
|
858993460 вот это число которое вывелось с pValueOp, я так понимаю адрес ??? или нет
|
Сообщ.
#32
,
|
|
|
Цитата kms @ 858993460 вот это число которое вывелось с pValueOp, я так понимаю адрес ??? или нет Это какой-то мусор |
Сообщ.
#33
,
|
|
|
Цитата Олег М @ А как у тебя получилось одинаковое количество колонок и строк, ты там точно ничего не перепутал? я поставил в запросе другую таблицу на 10 колонок и 10 строк Добавлено Цитата Олег М @ Это какой-то мусор ага понял щас пробую как ты написал |
Сообщ.
#34
,
|
|
|
Цитата kms @ я поставил в запросе другую таблицу на 10 колонок и 10 строк Поставь лучше разные, чтоб не перепутать. А то ты можешь. |
Сообщ.
#35
,
|
|
|
hcSqlDstInfoT cols[pCol] = { 0 }; hcSqlGetStmtAttr(pdb, HSCLI_STMT_DST_INFO, 0, cols /*spCols.get()*/, pCol * sizeof(hcSqlDstInfoT), &cntOp); hcSqlDstInfoT cols[pCol] = { 0 }; ругается "Выражение должно иметь константное значение" показывает на pCol Добавлено Цитата Олег М @ Поставь лучше разные, чтоб не перепутать. А то ты можешь. ага понял щас |
Сообщ.
#36
,
|
|
|
Цитата kms @ угается "Выражение должно иметь константное значение" показывает на pCol Какой у тебя компилятор? И как объявлена pCol? |
Сообщ.
#37
,
|
|
|
Эти префиксы - p, n, sp и т.д. не просто так ставятся, от фонаря. Это т.н. венгерская нотация, почитай. В твоём случае переменную лучше назвать nCols
|
Сообщ.
#38
,
|
|
|
MSVC 2015 Express
hcHSTMT pOper;// Адрес памяти, куда будет записан идентификатор оператора. hcSqlAllocStmt(pdb, &pOper); // Создать оператор hcSqlExecDirect(pOper, "fix all; select * from AVER;");//Выполнение SQL в указанном операторе int pCol = 0; // Место для количества колонок hcRECNO pStr = 0; // Место для количества строк hcSqlNumResultCols(pOper, &pCol); // Получить количество колонок результата hcSqlRowCount(pOper, &pStr); // Получить количество строк результата cout << "Кол-во колонок " << pCol << endl; cout << "Кол-во строк " << pStr << endl; unsigned optionOp = 107;// Режим int posOp = 1 ; // Позиция void *pValueOp; // Буфер для значения unsigned sizeOp = 1024; // и его размер unsigned cntOp ; // сколько байтов записали в буфер hcSqlDstInfoT cols[] = { 0 }; hcSqlGetStmtAttr(pdb, HSCLI_STMT_DST_INFO, 0, cols /*spCols.get()*/, pCol * sizeof(hcSqlDstInfoT), &cntOp); да вот сделал так cols[] нашел щас в старом справочнике Если мы явно указываем список значений, то можем не указывать размер массива: компилятор сам подсчитает количество элементов: Добавлено по крайней мере сейчас компилируется без ошибок |
Сообщ.
#39
,
|
|
|
Цитата kms @ да вот сделал так cols[] Вообще неправильно. Даже не знаю, что это получилось. Сделай через unique_ptr. |
Сообщ.
#40
,
|
|
|
к предыдущему коду (в посте#38) добавил
for (int i = 0; i < cntOp / sizeof(hcSqlDstInfoT); ++i) { const auto &col = cols[i]; //printf(" %ld ", cols[i] ); //Здесь разобрать буфер в зависимости от содержимого col } а hcSqlDstInfoT cols[2] = { 0 }; поставил для эксперимента cols[2] принудительно "2", чтобы посмотреть че будет. Срабатывает, даже если раскаментирую printf(" %ld ", cols[i] ); тоже срабатывает и даже успеваю увидеть мелькает консоль и выводится несколько строк цыфр двухзначных, и следом окно ошибка Необработанное исключение по адресу 0x009380D0 в AdmHyTech.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0x003B0000. |
Сообщ.
#41
,
|
|
|
Во-первых, если ты сделал cols[2] - то вместо pCol * sizeof(hcSqlDstInfoT) надо сделать sizeof(cols)
Во-вторых, посмотри, что возвращается в cntOp |
Сообщ.
#42
,
|
|
|
что возвращается в cntOp --- 3435973836
Цитата Олег М @ Во-первых, если ты сделал cols[2] - то вместо pCol * sizeof(hcSqlDstInfoT) надо сделать sizeof(cols) сделал , а теперь как правильно проконтролировать результат , вывести что там в cols[i] |
Сообщ.
#43
,
|
|
|
std::cout << "aliasno = " << cols[i].aliasno << std::endl;
std::cout << "fieldno = " << cols[i].fieldno << std::endl; //И так далее для всех полей hcSqlDstInfoT |
Сообщ.
#44
,
|
|
|
Сообщ.
#45
,
|
|
|
Цитата Олег М @ Во-вторых, посмотри, что возвращается в cntOp Что там? |