На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела C/C++: Базы данных
Модераторы: B.V.
  
    > howto boost ODBC fetch performance
      Привет всем!
      Очень-очень хочется быстро выбирать данные из ODBC драйвера для dbf (прога перекачивает данные из одной базы в другую). На моей машине (celeron 633) получается не быстрее чем 2000 записей в секунду, а хочется хотя бы тысячи 3-4.
      Код примерно такой:

      ExpandedWrap disabled
        <br>const MAX_TABLE_ROWS = 500;<br>rc = SQLAllocHandle ( SQL_HANDLE_STMT, g_hDbc, &hStmt );<br>rc = SQLSetStmtOption ( hStmt,SQL_ROWSET_SIZE, MAX_TABLE_ROWS );<br>rc = SQLSetStmtOption ( hStmt, SQL_ATTR_ROW_ARRAY_SIZE, MAX_TABLE_ROWS );<br>rc = SQLSetStmtAttr ( hStmt, SQL_ATTR_ROWS_FETCHED_PTR, &rowsFetched, 0 );<br>strcpy ( g_tmpBuf, "SELECT * FROM some_table" );<br>rc = SQLExecDirect ( hStmt,(SQLCHAR*)g_tmpBuf, SQL_NTS );<br><br>// Тут всякие       SQLBindCol ( hStmt, ...<br><br>while ( SQLFetch ( hStmt ) != SQL_NO_DATA );  // Просто выбираем все строки в массив<br>
        На мой взгляд, единстаенный вариант - это открывать dbf как бинарный файл
        и тупо читать его.
        У dbf довольно примитивный заголовок, а записи фиксированного размера.
        Единственно надо не забывать смотреть на флажок-индикатор удаления записи.
        1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0153 ]   [ 15 queries used ]   [ Generated: 20.05.24, 05:07 GMT ]