Технологии
Преобразование алгоритма программы с линейной структурой в классы - вопрос №2387351
Имеется код на С++ (консольное приложение CLR в MSVS2015C++ ) требуется помощь в преобразовании этого кода в классы
#define HYCFG_WIN32#include «hscli.h»#include <iostream>#include <memory>using namespace std;int main() {setlocale(LC_ALL, «RUS»); // рус локальhcERR err = 0; // Для кода ошибкиhcHDB pdb = 0; // Адрес памяти, куда будет записан идентификатор соединения.double bufAttr = 0; // буфер Атрибутовunsigned cntAttr = 0; // и сколько байтов записали в этот буферhcHSTMT pOper = 0; // Адрес памяти, куда будет записан идентификатор оператора.int pCol = 0; // кол-во колонокhcRECNO pStr = 0; // кол-во строкunsigned cntOp = 0; // Размер считанной информации в байтах.unsigned pRecSize = 0; // Размер читаемой записи в байтах.unsigned cnt = 0; // количество байтов данных, помещённых в буфер пользователя. Если это количество разделить на длину записи, то получим количество считанных записей.Неполные записи не присылаются. char bufOut[1024] ;unsigned cntOut = 0 ;hcSqlParmT Init = { sizeof(Init) }; // Адрес структуры с параметрами инициализацииerr = hcSqlInit(&Init); // Инициализация клиентской частиerr = hcSqlCheckInit(); // Проверка завершения инициализацииerr = hcSqlAllocConnect(&pdb); // Создать соединениеerr = hcSqlGetConnectAttr(pdb, HSCLI_CONN_SRV_VERS, 0, &bufAttr, sizeof(bufAttr), &cntAttr); // Получить информацию о соединенииerr = hcSqlConnect(pdb, «tcpip:/localhost:13000», «HTADMIN», «PASSWORD»); //Установить связь с СУБДerr = hcSqlAllocStmt(pdb, &pOper); // Создать операторerr = hcSqlExecDirect(pOper, «fix all; select * from GROUP;»); // Выполняем SQLзапросerr = hcSqlNumResultCols(pOper, &pCol); // Получить кол-во колонок результатаerr = hcSqlRowCount(pOper, &pStr); // Получить кол-во строк результатаhcSqlDstInfoT *Kol = new hcSqlDstInfoT[pCol]; // Структура Информация о колонке результатаerr = hcSqlGetStmtAttr(pOper, HSCLI_STMT_DST_INFO, 0, Kol, 4 * sizeof(hcSqlAliasInfoT), &cntOp);// Получить информацию об оператореerr = hcSqlOpenResults(pOper, &pRecSize); // Открытие результатов для чтенияunique_ptr<char[]> buf(new char[pRecSize]);err = hcSqlGetStmtAttr(pOper, HSCLI_STMT_DST_INFO, 0, Kol, pCol * 4 * sizeof(hcSqlAliasInfoT), &cntOp);// Получить информацию об оператореfor (long i = 0; i < pStr; i++)//идем по строкам{const auto err = hcSqlReadResults(pOper, i, bufOut, sizeof(bufOut), &cntOut);// Чтение результатовchar *p = bufOut;for (size_t j = 0; j < cntOut / sizeof(hcSqlAliasInfoT); ++j)// идем по колонкам{switch (Kol[j].type)// в зависимости от типа колонки преобразовываем в соответствующий тип{case HSCLI_ET_CHAR: // 0 Массив символов длиной не более заданной{std::string s(p, Kol[j].len) ;std::cout << s.c_str() << " " ;}break;case HSCLI_ET_ARRA: // 1 Массив байтов заданной длиныstd::cout << *reinterpret_cast<unsigned char *>(p) << " ";break;case HSCLI_ET_BYTE: // 2 Элемент — unsigned char (короткое целое) short{std::cout << *reinterpret_cast<unsigned char *>(p) << " ";}break;case HSCLI_ET_INTR: // 3 Элемент — signed shortstd::cout << *reinterpret_cast<signed short *>(p) << " " ;break;case HSCLI_ET_WORD: // 4 Элемент — unsigned shortstd::cout << *reinterpret_cast<unsigned short *>(p) << " " ;break;case HSCLI_ET_DATE: // 5 Дата — unsigned shortstd::cout << *reinterpret_cast<unsigned short *>(p) << " " ;break;case HSCLI_ET_NMBR: //6 Номер — 3-х байтовое целое без знака// std::cout << *reinterpret_cast< *>(p);break;case HSCLI_ET_LONG: //7 Элемент — long intstd::cout << *reinterpret_cast<long int *>(p) << " " ;break;case HSCLI_ET_DWRD: // 8 Элемент — unsigned long int в БД это dwordstd::cout << *reinterpret_cast<unsigned long int *>(p) << " ";break;case HSCLI_ET_FLOA: //9 Элемент — floatstd::cout << *reinterpret_cast<float *>(p) << " ";break;case HSCLI_ET_CURR: //10 Деньги (double)std::cout << *reinterpret_cast<double *>(p) << " ";break;case HSCLI_ET_DFLT: // 11 Элемент — doublestd::cout << *reinterpret_cast<double *>(p) << " ";break;case HSCLI_ET_QINT: //12 Элемент — signed __int64std::cout << *reinterpret_cast<signed __int64 *>(p) << " ";break;case HSCLI_ET_QWRD: //13 Элемент — unsigned __int64std::cout << *reinterpret_cast<unsigned __int64 *>(p) << " ";break;}p += Kol[j].len;}std::cout << std::endl ;}hcSqlCloseResults(pOper); // Закрытие доступа к результатамhcSqlFreeConnect(pdb); // Освободить соединениеhcSqlDone(); // Завершение работыstd::system(«pause»);}
март 27, 2017 г.
-
Всего ответов: 1
-
Здравствуйте.
На платной основе сделаю.