|
Код в студию
#34052962
Ссылка:
Ссылка на сообщение:
Ссылка с названием темы:
Ссылка на профиль пользователя:
|
|
|
|
Visual C++ 6.0
ODBC, связывания по строкам
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100.
void CUsingBlockCursor::OnTheCodeIntoStudio()
{
// код взят из Лекция №7 Блочная выборка данных.files
// Интернет университет
// В самом исходнике 4 errors
// {CTRL - ALT - DEL} использую для завершения работы с приложением
// таблица содержит 20 строк, т.е. 20 / 10 = 2 блока
// ПО ТЕОРИИ ВСЁ ХОРОШО: прочитал блок из 10 строк
// таблицы, поместил в массив структур,
// ДРАЙВЕР поддерживает чтение поблочно, в другой таблице
// 3200 строк, то количество чтений = 320,
// вследствие чего получается 320 строк, а не 3200
// Тогда зачем блочно читать - БЫСТРЕЕ..
// #define and struct находятся в ".h'-файле
CString m_sTemp;
%af_src_comm_0
// Определяем размер структуры, используя атрибут
// оператора SQL_ATTR_ROW_BIND_TYPE, и одновременно
// устанавливаем тип связывания по строкам
//- SQLSetStmtAttr(hstmt, SQL_ATTR_ROW_BIND_TYPE,
// sizeof(TBL_INFO), 0); error C2664: 'SQLSetStmtAttr' :
// cannot convert parameter 3 from 'unsigned int' to 'void *'
SQLSetStmtAttr(hstmt2, SQL_ATTR_ROW_BIND_TYPE, (void*)sizeof(TBL_INFO2), 0);
// Используя атрибут оператора SQL_ATTR_ROW_ARRAY_SIZE
// устанавливаем количество строк в извлекаемом наборе
// строк
SQLSetStmtAttr(hstmt2, SQL_ATTR_ROW_ARRAY_SIZE,
(void*)ROW_ARRAY_SIZE2, 0);
// ROW_ARRAY_SIZE, 0); - error C2664: 'SQLSetStmtAttr' :
// cannot convert parameter 3 from 'const int' to 'void *'
// Используя атрибут оператора SQL_ATTR_ROW_STATUS_PTR
// определяем массив состояния строк
SQLSetStmtAttr(hstmt2, SQL_ATTR_ROW_STATUS_PTR,
RowStatusArray2, 0);
// Устанавливаем атрибут оператора
// SQL_ATTR_ROWS_FETCHED_PTR для указания на
// NumRowsFetched
SQLSetStmtAttr(hstmt2, SQL_ATTR_ROWS_FETCHED_PTR,
&NumRowsFetched2, 0);
// Связываем поля структуры первого элемента массива
// со столбцом num_docum
SQLBindCol(hstmt2, 1, SQL_C_DOUBLE,
&TBL_Array2[0].num_docum, 0, &TBL_Array2[0].num_docum_len);
// Выполняем SQL-оператор SELECT для формирования
// результирующего набора
// эта строка из лекции SQLExecDirect(hstmt,
// "SELECT ID1, Sal, Status FROM TBL1", SQL_NTS);
// SQLExecDirect(hstmt, "SELECT Num_docum, "
// cannot convert parameter 2 from 'char [115]' to 'unsigned char *'
SQLExecDirect(hstmt2, (UCHAR*)"SELECT Num_docum "
"FROM POSTVYDPOKACI_WORK5_15RECORDS ", // имя таблицы
SQL_NTS);
SQLNumResultCols(hstmt2,(short*)i); // определено 6848 - я ж то только 1 столбец выбираю
m_sTemp.Format("количестве столбцов в сформированном\n"
"результирующем наборе = %d",i);
MessageBox(m_sTemp);
// Используя блочный курсор, извлекаем установленное
//число строк
while ((rc2 = SQLFetchScroll(hstmt2,SQL_FETCH_NEXT,0))
!= SQL_NO_DATA)
{
// Переменная NumRowsFetched содержит число
// в действительности извлеченных строк
m_sTemp.Format("67.NumRowsFetched2 = %ld",NumRowsFetched2);
MessageBox(m_sTemp); // выводит 2 010 331 723, а должно быть 10
// и такое определено - 3 679 576 , словом - разные значения выводит
for (i = 0; i < NumRowsFetched2; i++)
{
if (RowStatusArray2[i] == SQL_ROW_SUCCESS|| RowStatusArray2[i] ==
SQL_ROW_SUCCESS_WITH_INFO) {
if (TBL_Array2[i].num_docum == SQL_NULL_DATA)
{
MessageBox("NULL");
}
else
{
m_sTemp.Format("2.(тип поля num_docum - double) = %4.0f",
TBL_Array2[i].num_docum);
MessageBox(m_sTemp); // выводит 181012656317298400000000000000
// 00000000000000000000000000000000000000000000000000000000000
// 00000000000000000000000000000000000000000000000000000000
}
}
}
}
// сюда пока на 05.10.2006 г. не доходит
// {CTRL - ALT - DEL} использую для завершения работы с приложением
// освобождения дескриптора оператора
// Закрываем курсор
SQLCloseCursor(hstmt2);
}
СПАСИБО
|
|
|