Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.222.86.149] |
|
Сообщ.
#1
,
|
|
|
Привет всем!
Очень-очень хочется быстро выбирать данные из ODBC драйвера для dbf (прога перекачивает данные из одной базы в другую). На моей машине (celeron 633) получается не быстрее чем 2000 записей в секунду, а хочется хотя бы тысячи 3-4. Код примерно такой: <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> |
Сообщ.
#2
,
|
|
|
На мой взгляд, единстаенный вариант - это открывать dbf как бинарный файл
и тупо читать его. У dbf довольно примитивный заголовок, а записи фиксированного размера. Единственно надо не забывать смотреть на флажок-индикатор удаления записи. |