Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
odbc, SQLRowCount
|
|||
|---|---|---|---|
|
#18+
В задаче участвуют драйвер FreeTDS v.0.91-3, Linux Mint 64bit, unixODBC Делаю запрос в утилите isql из комплекта unixODBC: SQL> declare @t table (id int); insert into @t select 1; insert into @t select 2; Результат: SQLRowCount returns 1 SQLRowCount returns 1 Беру исходники утилиты, отлаживаю выполнение запроса, получаю (лишнее убрано, чтобы была отчетливо видна последовательность вызовов функций ODBC API): Код: plaintext 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. При выполнении этого запроса первый вызов SQLMoreResults успешен, что приводит к вызову SQLRowCount дважды. А теперь, собственно, проблема: как на одном и том же компьютере, операционке и ODBC-драйвере такая же последовательность вызова функций приводит к иному результату? У меня SQLMoreResults возвращает SQL_NO_DATA, и SQLRowCount срабатывает лишь один раз. И могут ли вообще сообщения от сервера о количестве обработанных строк инструкциями DDL генерировать своего рода очередную выборку, на которую переходит SQLMoreResults? Мой код: Код: plaintext 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. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2013, 15:40 |
|
||
|
odbc, SQLRowCount
|
|||
|---|---|---|---|
|
#18+
Причина такого поведения обнаружена. Драйвер FreeTDS по-умолчанию использует версию 4.2 протокола TDS (Sybase before System 10, Microsoft SQL Server 6.x) Для всех последующих версий протокола (включающих поддержку нового полезного функционала) SQLRowCount возвращает значение только для последней инструкции. Если кто-то знает, как получать промежуточные сообщения выполняемого пакета команд через ODBC - буду благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2013, 16:52 |
|
||
|
odbc, SQLRowCount
|
|||
|---|---|---|---|
|
#18+
Встречался с подобным, правда на основе сообщений об ошибках. Сервер кидал несколько за время работы пакета, а я получал их все скопом по окончании всего пакета. Да еще и в обратном порядке. Не знаю как именно обрабатываются количество строк, но возможно что так же. Попробуй звать SQLRowCount() несколько раз (пока оно ошибку не даст). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2013, 18:48 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38361148&tid=2020047]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
68ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 16ms |
| total: | 167ms |

| 0 / 0 |
