На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
Страницы: (8) « Первая ... 4 5 [6] 7 8  все  ( Перейти к последнему сообщению )  
> Класс-обертка на чистом С++ , Для использования Ф-ий DLL
    Цитата kms @
    Олег М вот только все равно не могу понять зачем так дописывать переменные если они все равно объявленны и к ним доступ есть и оно работает , или я какой то момент не догоняю , объясни пожалуйста


    Чтоб присвоить им значения. Если ты этого не сделаешь, там будет мусор, случайные числа.
    Цитата kms @
    а можно ли эту обработку данных спрятать в класс ,
    что бы в main оставить только " Подключился - Запрос - выводРезультата - закрытиеЗапроса - Отключение "

    Сделай пока так, дальше посмотрим
      Цитата Олег М @
      Ну ещё бы, это ж массив символов. Здесь у тебя должен быть цикл по обработке данных

      теперь затык на
      ExpandedWrap disabled
        switch ( Query1.GetColumnsInfo(j)->type  )// в зависимости от типа колонки преобразовываем в соответствующий тип
                         {
                        //  case HSCLI_ET_CHAR: // 0 Массив символов длиной не более заданной
                        //  {
                        //      std::string s(p, Query1.GetColumnsInfo(j)->len );
                        //      std::cout << s.c_str() << "  ";
                        //  }
                        //  break;
                         }


      дебаг останавливается на строке Query1.GetColumnsInfo(j)->type
      GetColumnsInfo(0)
      ExpandedWrap disabled
        -       _Myval2 0x00000000 <NULL>   hcSqlDstInfoT *
                aliasno <Чтение памяти невозможно>
                fieldno <Чтение памяти невозможно>
                type    <Чтение памяти невозможно>
                len <Чтение памяти невозможно>
                off <Чтение памяти невозможно>
        +       coder   0x00000014 <Ошибка при чтении символов строки.>char[32]
        +       fname   0x00000034 <Ошибка при чтении символов строки.>char[32]
                func    <Чтение памяти невозможно>
        +       asname  0x00000058 <Ошибка при чтении символов строки.>char[32]
                key <Чтение памяти невозможно>
                resno   <Чтение памяти невозможно>


      Добавлено
      Цитата Олег М @
      Чтоб присвоить им значения. Если ты этого не сделаешь, там будет мусор, случайные числа.

      ОК сделал так

      Statement.cpp
      Скрытый текст

      ExpandedWrap disabled
        #define HYCFG_WIN32
         
        #include "HyTech.h"
         
         
        CStatement::CStatement(CConnection  & idConnect, const char *strSqlQuery) : idOperator(0)
                                                                                   , sumColumns(0)
                                                                                   , sumRows(0)
                                                                                   , pRecSize(0)
                                                                                     // Конструктор
        {
            if (hcSqlAllocStmt(idConnect, &idOperator) != 0) // ф-ция hscli.dll "Создать оператор"
                throw std::runtime_error("hcSqlAllocStmt     failed");
         
            if (hcSqlSetStmtAttr(idOperator, HSCLI_ATTR_FLD_VERBOSE, (void*)1, 0) != 0) // ф-ция hscli.dll "Изменение параметров оператора" получаем расширенную инф.о полях
                throw std::runtime_error("hcSqlSetStmtAttr     failed");
         
            if (hcSqlExecDirect(idOperator, strSqlQuery) != 0)           //ф-ция hscli.dll Выполняем SQLзапрос
                throw std::runtime_error("hcSqlExecDirect     failed");
         
            if (hcSqlNumResultCols(idOperator, &sumColumns) != 0)       //ф-ция hscli.dll Получить кол-во колонок результата
                throw std::runtime_error("hcSqlNumResultCols   failed");
         
            if (hcSqlRowCount(idOperator, &sumRows) != 0)               //ф-ция hscli.dll Получить кол-во строк   результата
                throw std::runtime_error("hcSqlRowCount        failed");
         
            if (hcSqlOpenResults(idOperator, &pRecSize) != 0)         //ф-ция hscli.dll Открытие результатов для чтения
                throw std::runtime_error("hcSqlOpenResults     failed");
         
            //std::unique_ptr<hcSqlDstInfoT[]> infoColumns(new hcSqlDstInfoT[sumColumns]); // Структура "Информация о колонках результата"
            hcSqlDstInfoT *infoColumns = new hcSqlDstInfoT[sumColumns];
            
            if (hcSqlGetStmtAttr(idOperator, HSCLI_STMT_DST_INFO, 0, infoColumns , sumColumns * SIZE_HCSQLDSTINFOT, &cntOp) != 0)
                throw std::runtime_error("hcSqlGetStmtAttr      failed");                 // Получить информацию об операторе
         
            //std::cout << infoColumns[0].fname << std::endl;
         
        }
         
        CStatement::~CStatement()
        {
            hcSqlCloseResults(idOperator) ; // ф-ция hscli.dll "Закрытие доступа к результатам"
            hcSqlFreeStmt(idOperator)     ; // ф-ция hscli.dll "Закрыть оператор"
        }
         
        int      CStatement::GetColumns() // Возвращает кол-во колонок
        {
            return sumColumns;
        }
         
        long     CStatement::GetRows() // Возвращает кол-во строк
        {
            return  sumRows;
        }
         
        unsigned CStatement::GetRowSize() // Возвращает размер строки в байтах (сумма всех размеров полей)
        {
            return pRecSize;
        }
         
        std::vector<char> CStatement::ReadResults(long start, size_t n)
        {
            unsigned    cnt;
         
            if (!sumRows || !pRecSize || start > sumRows || !n)
                return std::vector<char>();
         
            std::vector<char>   masResult(n *pRecSize);
            
            hcSqlReadResults(idOperator, start,  masResult.data(), masResult.size(), &n);// Чтение результатов
            
            if (  n != masResult.size()  )
                masResult.resize(n);
         
              return masResult; // return std::vector<char>(masResult);   //
        }
         
        hcSqlDstInfoT  *CStatement::GetColumnsInfo(int idx)
        {
            if (idx < sumColumns)
                return  &infoColumns[idx];
            else
                return  nullptr;
        }



      Добавлено
      Statement.h
      Скрытый текст

      ExpandedWrap disabled
        #pragma once
         
        #define HYCFG_WIN32
         
        #include "HyTech.h"
         
        class CStatement
        {
        public:
         
            CStatement(CConnection  & idConnect, const char *strSqlQuery)  ; // Конструктор  
         
            ~CStatement();
            
            int      GetColumns() ; // Возвращает кол-во колонок
            long     GetRows()    ; // Возвращает кол-во строк
            unsigned GetRowSize() ; // Возвращает размер строки в байтах (сумма всех размеров полей)
            
            std::vector<char> ReadResults(long start, size_t n) ; // Чтение результата
         
             hcSqlDstInfoT  *GetColumnsInfo(int idx)  ;
         
        protected:
         
            hcHSTMT  idOperator; // Адрес памяти, куда будет записан идентификатор созданного оператора.
         
            int      sumColumns; // кол-во колонок  результата
            long     sumRows;    // кол-во строк    результата
            unsigned pRecSize;   // Размер читаемой записи в байтах, в ф-ции  "Открытие результатов для чтения" .
            unsigned cntOp;      // Размер считанной информации в байтах, в ф-ции "Получить информацию об операторе".  Если это кол-во разделить на размер значения, то можно получить кол-во считанных значений(для параметров, которые имеют массив значений).
         
             std::unique_ptr<hcSqlDstInfoT[]> infoColumns; // Структура "Информация о колонках результата"
            //hcSqlDstInfoT *infoColumns  ;
        };



      Добавлено
      main.cpp
      Скрытый текст

      ExpandedWrap disabled
        #include "HyTech.h"
         
        void main()
        {
                setlocale(LC_ALL, "");
                
                CConnection Conect1 ;
                
                Conect1.Connect("tcpip:/localhost:13000" , "HTADMIN" , "PASSWORD");
         
                CStatement  Query1(Conect1, "fix all; select * from TAB4;")  ;
         
                std::cout << "Кол-во столбцов          = "  << Query1.GetColumns() << std::endl;
                std::cout << "Кол-во строк             = "  << Query1.GetRows()    << std::endl ;
                std::cout << "Размер одной строки      = "  << Query1.GetRowSize() << std::endl;
                
                auto masResult = Query1.ReadResults(0, Query1.GetRows());
         
                unsigned   n   = Query1.GetRows() ;
                  
                size_t    rows = Query1.GetRows() ;
                
                char        *p = masResult.data() ;
                
                for (size_t i = 0; i < rows; ++i)//идем по строкам
                {
                    for (size_t j = 0; j < Query1.GetColumns(); ++j)// идем по колонкам
                    {
         
                         switch ( Query1.GetColumnsInfo(j)->type  )// в зависимости от типа колонки преобразовываем в соответствующий тип
                         {
                        //  case HSCLI_ET_CHAR: // 0 Массив символов длиной не более заданной
                        //  {
                        //      std::string s(p, Query1.GetColumnsInfo(j)->len );
                        //      std::cout << s.c_str() << "  ";
                        //  }
                        //  break;
                         }
                    }
                }
         
         
                
                std::system("pause") ;
        }

        Цитата kms @
        дебаг останавливается на строке Query1.GetColumnsInfo(j)->type
        GetColumnsInfo(0)


        А GetColumns() какое число возвращает?
          что то я намудрил с
          ExpandedWrap disabled
            hcSqlDstInfoT  *CStatement::GetColumnsInfo(int idx)
            {
                if (idx < sumColumns)
                    return  &infoColumns[idx];
                else
                    return  nullptr;
            }


          в одну строку как ты написал
          ExpandedWrap disabled
            const hcSqlDstInfoT *CStatement::GetColumnsInfo(int idx) const
            {
                return idx < sumColumns ? infoColumns[idx] :  nullptr;
            }

          не хочет брать кричит на nullptr
          ExpandedWrap disabled
             
            Ошибка (активно) несовместимые типы операндов ("hcSqlDstInfoT" и "std::nullptr_t")HyTech \Statement.cpp87
            ОшибкаC2446:: нет преобразования "nullptr" в "hcSqlDstInfoT"HyTech \statement.cpp87


          Добавлено
          Цитата Олег М @
          А GetColumns() какое число возвращает?

          возвращает 9

          Добавлено
          это соответствует действительности , в этой таблице реально 9 столбиков
            Цитата kms @
            return idx < sumColumns ? infoColumns[idx] :  nullptr;

            Сделай return idx < sumColumns ? infoColumns.get() + idx:  nullptr;
              может что то не правильно в прототипе std::unique_ptr<hcSqlDstInfoT[]> infoColumns; // Структура ....
              ExpandedWrap disabled
                class CStatement
                {
                public:
                 
                    CStatement(CConnection  & idConnect, const char *strSqlQuery)  ; // Конструктор  
                 
                    ~CStatement();
                    
                    int      GetColumns() ; // Возвращает кол-во колонок
                    long     GetRows()    ; // Возвращает кол-во строк
                    unsigned GetRowSize() ; // Возвращает размер строки в байтах (сумма всех размеров полей)
                    
                    std::vector<char> ReadResults(long start, size_t n) ; // Чтение результата
                 
                    const hcSqlDstInfoT  *GetColumnsInfo(int idx)const;
                 
                protected:
                 
                    hcHSTMT  idOperator; // Адрес памяти, куда будет записан идентификатор созданного оператора.
                 
                    int      sumColumns; // кол-во колонок  результата
                    long     sumRows;    // кол-во строк    результата
                    unsigned pRecSize;   // Размер читаемой записи в байтах, в ф-ции  "Открытие результатов для чтения" .
                    unsigned cntOp;      // Размер считанной информации в байтах, в ф-ции "Получить информацию об операторе".  Если это кол-во разделить на размер значения, то можно получить кол-во считанных значений(для параметров, которые имеют массив значений).
                 
                     std::unique_ptr<hcSqlDstInfoT[]> infoColumns; // Структура "Информация о колонках результата"
                    //hcSqlDstInfoT *infoColumns  ;
                };


              а потом объявление в теле идет
              ExpandedWrap disabled
                const hcSqlDstInfoT  *CStatement::GetColumnsInfo(int idx)const
                {
                    if (idx < sumColumns)
                        return  &infoColumns[idx];
                    else
                        return  nullptr;
                }


              и вот это return &infoColumns[idx];
              наверно что то не то я изобразил чувствую
                Покажи код, CStatement
                  Цитата Олег М @
                  Сделай return idx < sumColumns ? infoColumns.get() + idx:  nullptr;

                  ага сделал , это пропустила , но потом все равно во время выполнения вываливается настрочке
                  switch ( Query1.GetColumnsInfo(j)->type )// в зависимости от типа колонки преобра........

                  Добавлено
                  Цитата Олег М @
                  Покажи код, CStatement


                  Statement.h
                  ExpandedWrap disabled
                    #pragma once
                     
                    #define HYCFG_WIN32
                     
                    #include "HyTech.h"
                     
                    class CStatement
                    {
                    public:
                     
                        CStatement(CConnection  & idConnect, const char *strSqlQuery)  ; // Конструктор  
                     
                        ~CStatement();
                        
                        int      GetColumns() ; // Возвращает кол-во колонок
                        long     GetRows()    ; // Возвращает кол-во строк
                        unsigned GetRowSize() ; // Возвращает размер строки в байтах (сумма всех размеров полей)
                        
                        std::vector<char> ReadResults(long start, size_t n) ; // Чтение результата
                     
                        const hcSqlDstInfoT  *GetColumnsInfo(int idx)const;
                     
                    protected:
                     
                        hcHSTMT  idOperator; // Адрес памяти, куда будет записан идентификатор созданного оператора.
                     
                        int      sumColumns; // кол-во колонок  результата
                        long     sumRows;    // кол-во строк    результата
                        unsigned pRecSize;   // Размер читаемой записи в байтах, в ф-ции  "Открытие результатов для чтения" .
                        unsigned cntOp;      // Размер считанной информации в байтах, в ф-ции "Получить информацию об операторе".  Если это кол-во разделить на размер значения, то можно получить кол-во считанных значений(для параметров, которые имеют массив значений).
                     
                         std::unique_ptr<hcSqlDstInfoT[]> infoColumns; // Структура "Информация о колонках результата"
                        //hcSqlDstInfoT *infoColumns  ;
                    };



                  Statement.cpp
                  ExpandedWrap disabled
                    #define HYCFG_WIN32
                     
                    #include "HyTech.h"
                     
                     
                    CStatement::CStatement(CConnection  & idConnect, const char *strSqlQuery) : idOperator(0)
                                                                                               , sumColumns(0)
                                                                                               , sumRows(0)
                                                                                               , pRecSize(0)
                                                                                                 // Конструктор
                    {
                        if (hcSqlAllocStmt(idConnect, &idOperator) != 0) // ф-ция hscli.dll "Создать оператор"
                            throw std::runtime_error("hcSqlAllocStmt     failed");
                     
                        if (hcSqlSetStmtAttr(idOperator, HSCLI_ATTR_FLD_VERBOSE, (void*)1, 0) != 0) // ф-ция hscli.dll "Изменение параметров оператора" получаем расширенную инф.о полях
                            throw std::runtime_error("hcSqlSetStmtAttr     failed");
                     
                        if (hcSqlExecDirect(idOperator, strSqlQuery) != 0)           //ф-ция hscli.dll Выполняем SQLзапрос
                            throw std::runtime_error("hcSqlExecDirect     failed");
                     
                        if (hcSqlNumResultCols(idOperator, &sumColumns) != 0)       //ф-ция hscli.dll Получить кол-во колонок результата
                            throw std::runtime_error("hcSqlNumResultCols   failed");
                     
                        if (hcSqlRowCount(idOperator, &sumRows) != 0)               //ф-ция hscli.dll Получить кол-во строк   результата
                            throw std::runtime_error("hcSqlRowCount        failed");
                     
                        if (hcSqlOpenResults(idOperator, &pRecSize) != 0)         //ф-ция hscli.dll Открытие результатов для чтения
                            throw std::runtime_error("hcSqlOpenResults     failed");
                     
                        //std::unique_ptr<hcSqlDstInfoT[]> infoColumns(new hcSqlDstInfoT[sumColumns]); // Структура "Информация о колонках результата"
                        hcSqlDstInfoT *infoColumns = new hcSqlDstInfoT[sumColumns];
                        
                        if (hcSqlGetStmtAttr(idOperator, HSCLI_STMT_DST_INFO, 0, infoColumns , sumColumns * SIZE_HCSQLDSTINFOT, &cntOp) != 0)
                            throw std::runtime_error("hcSqlGetStmtAttr      failed");                 // Получить информацию об операторе
                     
                        //std::cout << infoColumns[0].fname << std::endl;
                     
                    }
                     
                    CStatement::~CStatement()
                    {
                        hcSqlCloseResults(idOperator) ; // ф-ция hscli.dll "Закрытие доступа к результатам"
                        hcSqlFreeStmt(idOperator)     ; // ф-ция hscli.dll "Закрыть оператор"
                    }
                     
                    int      CStatement::GetColumns() // Возвращает кол-во колонок
                    {
                        return sumColumns;
                    }
                     
                    long     CStatement::GetRows() // Возвращает кол-во строк
                    {
                        return  sumRows;
                    }
                     
                    unsigned CStatement::GetRowSize() // Возвращает размер строки в байтах (сумма всех размеров полей)
                    {
                        return pRecSize;
                    }
                     
                    std::vector<char> CStatement::ReadResults(long start, size_t n)
                    {
                        unsigned    cnt;
                     
                        if (!sumRows || !pRecSize || start > sumRows || !n)
                            return std::vector<char>();
                     
                        std::vector<char>   masResult(n *pRecSize);
                        
                        hcSqlReadResults(idOperator, start,  masResult.data(), masResult.size(), &n);// Чтение результатов
                        
                        if (  n != masResult.size()  )
                            masResult.resize(n);
                     
                          return masResult; // return std::vector<char>(masResult);   //
                    }
                     
                    const hcSqlDstInfoT *CStatement::GetColumnsInfo(int idx) const
                    {
                        return idx < sumColumns ? infoColumns.get() + idx : nullptr;
                    }
                    Цитата kms @
                      //std::unique_ptr<hcSqlDstInfoT[]> infoColumns(new hcSqlDstInfoT[sumColumns]); // Структура "Информация о колонках результата"
                        hcSqlDstInfoT *infoColumns = new hcSqlDstInfoT[sumColumns];

                    Ещё бы у тебя там что-то возвращалось. Ты сохраняешь всё в локальную переменную.
                    Как ты думаешь, зачем у меня переменные класса начинаются с m_? Чтоб не путать с локальными.

                    Сделай
                    infoColumn.reset(new hcSqlDstInfoT[sumColumns]); // Структура "Информация о колонках результата"

                    Это убери - hcSqlDstInfoT *infoColumns = new hcSq.........................................

                    Добавлено
                    Цитата kms @
                    if (hcSqlGetStmtAttr(idOperator, HSCLI_STMT_DST_INFO, 0, infoColumns , sumColumns * SIZE_HCSQLDSTINFOT, &cntOp) != 0)

                    Сделай if (hcSqlGetStmtAttr(idOperator, HSCLI_STMT_DST_INFO, 0, infoColumns.get(), sumColumns * SIZE_HCSQLDSTINFOT, &cntOp) != 0)
                      Цитата Олег М @
                      Как ты думаешь, зачем у меня переменные класса начинаются с m_? Чтоб не путать с локальными.

                      теперь понятно ,
                      а вот это
                      Цитата Олег М @

                      Сделай
                      infoColumn.reset(new hcSqlDstInfoT[sumColumns]); // Структура "Информация о колонках результата"

                      Это убери - hcSqlDstInfoT *infoColumns = new hcSq.........................................

                      Добавлено 9 минут назад
                      Цитата kms @ 38 минут назад
                      if (hcSqlGetStmtAttr(idOperator, HSCLI_STMT_DST_INFO, 0, infoColumns , sumColumns * SIZE_HCSQLDSTINFOT, &cntOp) != 0)

                      Сделай if (hcSqlGetStmtAttr(idOperator, HSCLI_STMT_DST_INFO, 0, infoColumns.get(), sumColumns * SIZE_HCSQLDSTINFOT, &cntOp) != 0)

                      сделал


                      она вертится
                      Прикреплённая картинка
                      Прикреплённая картинка


                      Добавлено
                      добавил
                      ExpandedWrap disabled
                        switch ( Query1.GetColumnsInfo(j)->type  ){}
                        p += Query1.GetColumnsInfo(j)->len;
                        пошло
                        Прикреплённая картинка
                        Прикреплённая картинка
                          вот еще немного подрихтовал
                          Прикреплённая картинка
                          Прикреплённая картинка
                            ну вот как то так , неправельно преобразовывает второй столбец у него тип ДАТА
                            ExpandedWrap disabled
                              void main()
                              {
                                      //setlocale(LC_ALL, "");
                                      
                                      CConnection Conect1 ;
                                      
                                      Conect1.Connect("tcpip:/localhost:13000" , "HTADMIN" , "PASSWORD");
                               
                                      CStatement  Query1(Conect1, "fix all; select * from TAB4;")  ;
                                
                                      auto masResult = Query1.ReadResults(0, Query1.GetRows());
                               
                                      unsigned   n   = Query1.GetRows() ;
                                        
                                      size_t    rows = Query1.GetRows() ;
                                      
                                      char        *p = masResult.data() ;
                                      
                                      for (size_t i = 0; i < rows; ++i)//идем по строкам
                                      {
                                          for (size_t j = 0; j < Query1.GetColumns(); ++j)// идем по колонкам
                                          {
                               
                                               switch ( Query1.GetColumnsInfo(j)->type  )// в зависимости от типа колонки преобразовываем в соответствующий тип
                                               {
                                                  case HSCLI_ET_CHAR: // 0 Массив символов длиной не более заданной
                                                  {
                                                      std::string s(p, Query1.GetColumnsInfo(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 short  
                                                      std::cout << *reinterpret_cast<signed short *>(p) << "  " ;
                                                                  break;
                               
                                                  case HSCLI_ET_WORD:  // 4 Элемент - unsigned short  
                                                        std::cout << *reinterpret_cast<unsigned short *>(p) << "  " ;
                                                                  break;
                               
                                                  case HSCLI_ET_DATE:   // 5 Дата    - unsigned short  
                                                      std::cout << *reinterpret_cast<unsigned short *>(p) << "  " ;
                                                          break;
                               
                                                  case HSCLI_ET_NMBR: {//6  Номер   - 3-х байтовое целое без знака  
                                                                       // std::cout << *reinterpret_cast<  *>(p);
                                                                       //dR[j] = ;
                                                  }
                                                                      break;
                               
                                                  case HSCLI_ET_LONG:  //7 Элемент - long int
                                                      std::cout << *reinterpret_cast<long int *>(p) << "  ";
                                                                  break;
                               
                                                  case  HSCLI_ET_DWRD:   // 8 Элемент - unsigned long int  в БД это dword          
                                                      std::cout << *reinterpret_cast<unsigned long int *>(p) << "  ";
                                                                       break;
                               
                                                  case HSCLI_ET_FLOA:  // 9  Элемент - float
                                                                        //textBox1->AppendText(" " + *reinterpret_cast<float *>(p) + " ");
                                                      std::cout << *reinterpret_cast<float *>(p) << "  ";
                                                                      break;
                               
                                                  case HSCLI_ET_CURR:   //    10 Деньги (double)  
                                                      std::cout << *reinterpret_cast<double *>(p) << "  ";
                                                                      break;
                               
                                                  case HSCLI_ET_DFLT:   // 11 Элемент - double  
                                                        std::cout << *reinterpret_cast<double *>(p) << "  ";
                                                                      break;
                               
                                                  case HSCLI_ET_QINT:   //    12 Элемент - signed __int64
                                                      std::cout << *reinterpret_cast<signed __int64 *>(p) << "  ";
                                                                      break;
                               
                                                  case HSCLI_ET_QWRD:   //    13 Элемент - unsigned __int64
                                                       std::cout << *reinterpret_cast<unsigned __int64 *>(p) << "  ";
                                                                      break;
                                               }
                                              
                                               p += Query1.GetColumnsInfo(j)->len;// сдвигаем указатель на длину поля, чтобы указывал на начало следующего поля
                               
                                          }
                                          std::cout << std::endl;
                                      }
                               
                               
                                      
                                      std::system("pause") ;
                              }

                            Прикреплённая картинка
                            Прикреплённая картинка
                              Цитата kms @
                                                  case HSCLI_ET_ARRA: // 1 Массив байтов заданной длины
                                                      std::cout << *reinterpret_cast<unsigned char *>(p) << "  ";
                                                      break;

                              Это неправильно, это байтовый массив его нельзя так распечатывать

                              Добавлено
                              Цитата kms @
                              ну вот как то так , неправельно преобразовывает второй столбец у него тип ДАТА

                              Там у них есть какие-то функции для преобразования HSCLI_ET_DATE

                              Добавлено
                              hcSqlUnpackDate
                                работает конечно очень медленно порядка 5сек

                                Добавлено
                                Цитата Олег М @
                                Это неправильно, это байтовый массив его нельзя так распечатывать

                                да я понял еще в самом начале , просто не знаю как правельно и хотел это на последок оставить

                                Цитата Олег М @
                                Там у них есть какие-то функции для преобразования HSCLI_ET_DATE

                                Добавлено 1 минуту назад
                                hcSqlUnpackDate

                                во точно сейчас буду смотреть делать

                                Добавлено
                                ну вот как то так на быструю руку
                                ExpandedWrap disabled
                                  ........
                                  case HSCLI_ET_DATE: {  // 5 Дата    - unsigned short  
                                      unsigned     day=0, month = 0, year = 0;
                                                              
                                      hcSqlUnpackDate(*reinterpret_cast<unsigned short *>(p), &day, &month, &year);
                                      std::cout << day  << "-" << month << "-" << year << "  ";
                                   }
                                   break;
                                  ...........

                                работает

                                теперь бы остальные типы данных по правельному распознать
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (8) « Первая ... 4 5 [6] 7 8  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,1222 ]   [ 24 queries used ]   [ Generated: 5.05.24, 03:54 GMT ]