|
|
|
Линтер, зависание запроса в ADO
|
|||
|---|---|---|---|
|
#18+
После создания таблицы и занесения в неё одной записи, при выполнении запроса происходит зависание. Загрузка процессора 100% из них 10% наше приложение, остальное делят процессы dbc_wnt.exe, linternt.exe. Линтер Стандарт 6.0.14. Подключение через ADO OLEDB Provider – LinOleDB. Библиотека linoledb.dll пропатченная от предыдущих ошибок. Запрос выполняется с клиентским курсором, однонаправленным (adOpenForwardOnly), только на чтение (adLockReadOnly). Причем, выполнение того же запроса из рабочего стола ЛИНТЕР выполняется нормально. Метаданные: Код: 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. Код: plaintext 1. Код: plaintext 1. 2. 3. 4. Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 17:07 |
|
||
|
Линтер, зависание запроса в ADO
|
|||
|---|---|---|---|
|
#18+
В случае выполнения этого запроса с серверным курсором, зависание происходит после открытия при обращении к методу Get_EOF ADO-объекта Recordset. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 18:36 |
|
||
|
Линтер, зависание запроса в ADO
|
|||
|---|---|---|---|
|
#18+
Действительно, была такая проблема. Исправленный модуль выслан Вам на E-mail, указанный в контактной информации на этом форуме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2009, 14:38 |
|
||
|
Линтер, зависание запроса в ADO
|
|||
|---|---|---|---|
|
#18+
xuser, Получил и установил новый модуль. Теперь на том же запросе на методе RecordSet.Open ошибка: Код: plaintext 1. 2. Код: plaintext 1. 2. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2009, 16:59 |
|
||
|
Линтер, зависание запроса в ADO
|
|||
|---|---|---|---|
|
#18+
После вставки записи: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2009, 17:06 |
|
||
|
Линтер, зависание запроса в ADO
|
|||
|---|---|---|---|
|
#18+
Добрый день! С этим вопросом пока разбираемся. Проблему у провайдера LinOleDB вызвал следующий код: vCommand := CreateADOObject(CLASS_Command) as _Command; vCommand.CommandType := adCmdText; vCommand.CommandTimeout := FTimeout; vCommand.CommandText := FSQLText vCommand.Set_ActiveConnection( FOwner.FConnection ); { Падает на следующей строчке } FRecordset.Open(vCommand, EmptyParam, adOpenForwardOnly, adLockReadOnly, adCmdText); Мы в основном работаем (и проверяем примеры), используя Microsoft Visual Studio, а не Delphi. Там прототип для функции Recordset::Open выглядит так : HRESULT Recordset15::Open ( const _variant_t & Source, const _variant_t & ActiveConnection, enum CursorTypeEnum CursorType, enum LockTypeEnum LockType, long Options ) В первом аргументе передаём не объект _Command, а собственно текст запроса. В таком варианте метод Open у нас отрабатывает без ошибок (код, для краткости и наглядности, приведён без проверок возвращаемых значений): _ConnectionPtr pConnection = NULL; _RecordsetPtr pRst = NULL; HRESULT hr; _variant_t vttarray, result; long cFields, lUbound = 0, rgIndices[2], lRecords, lFields; TCHAR *tszQuery = _T("SELECT \"A1\".\"DocID\",\"A1\".\"ExtID\",\"A1\".\"Deleted\",\"A1\".\"ModifyDate\",\"A1\".\"GroupDoc\",\"A1\".\"isGroup\",\"A1\".\"CreateDate\",\"A1\".\"CreateUser\",\"A1\".\"UpdateDate\",\"A1\".\"UpdateUser\",\"A1\".\"CreateCode\",\"A1\".\"GroupPath\",\"A1\".\"Version\",\"A1\".\"Name\",\"A1\".\"SID\",\"A1\".\"FullName\",\"A1\".\"Description\",\"A1\".\"FullAccess\",\"A1\".\"Disabled\",\"A1\".\"КодФилиала\",\"A1\".\"УровеньКонфиденциальности\",\"A1\".\"ЭлементСБ\",\"A1\".\"ЗамокЭлементаСБ\",\"A1\".\"КодПодсистемы\",\"A1\".\"КодМодуля\",\"A1\".\"КодУчастника\",\"A1\".\"НапоминанияВыключены\",\"A1\".\"ВариантЗапускаСессии\",\"A1\".\"ПанельУправления\",\"A1\".\"ИнтерфейснаяПанель\",\"A1\".\"ИнтерфейснаяСхема\",\"A1\".\"КлассКартотеки\",\"A1\".\"КлассБланка\",\"A1\".\"ПерекрытьВышестоящиеНастр\",\"A1\".\"ВходитьПодВсеПредприятия\",\"A1\".\"Субъект\",\"A1\".\"Подразделение\",\"A1\".\"ВидПлатежа\",\"A1\".\"РаботатьБезВыбораПредприя\",\"A1\".\"МаксимальнаяВажность\",\"A1\".\"ТипичнаяВажность\",\"A1\".\"СрокРезервирования\",\"A1\".\"ТипЦеныПоУмолчанию\",\"A1\".\"ПокупательПоУмолчанию\",\"A1\".\"СкладПоУмолчанию\",\"A1\".\"СотрудникПоУмолчанию\",\"A1\".\"ВалютаДокументаПоУмолчани\",\"A1\".\"МетодРазбросаСуммыОплаты\",\"A1\".\"НДСВключенВЦену\",\"A1\".\"СтатусПоУмолчанию\",\"A1\".\"ЕдиницаИзмерения\",\"A1\".\"Страна\",\"A1\".\"СтавкаНДСПоУмолчанию\",\"A1\".\"ТипРесурсаПоУмолчанию\",\"A1\".\"УстанавливатьЛимитКредита\",\"A1\".\"СуммаЛимитаКредита\",\"A1\".\"ВалютаЛимитаКредита\",\"A1\".\"УстанавливатьСрокВозврата\",\"A1\".\"СрокКредита\" FROM "User" A1 WHERE \"A1\".\"DocID\" =1 ORDER BY \"A1\".\"DocID\""); hr = pConnection.CreateInstance(__uuidof(Connection)); hr = pConnection->Open(_T("Provider=LinOleDB;Prompt=1;"), _T("SYSTEM"), _T("MANAGER"), -1); hr = pRst.CreateInstance(__uuidof(Recordset)); hr = pRst->Open(tszQuery, _variant_t((IDispatch*)pConnection, true), adOpenForwardOnly, adLockReadOnly, adCmdText); cFields = pRst->Fields->Count; vttarray = pRst->GetRows(10000); hr = SafeArrayGetUBound(vttarray.parray, 2, &lUbound); for (lRecords = 0; lRecords < lUbound + 1; lRecords++) { result.vt = VT_BSTR; for (lFields = 0; lFields < cFields; lFields++) { rgIndices[0] = lFields; rgIndices[1] = lRecords; hr = SafeArrayGetElement(vttarray.parray, rgIndices, &result); ... } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2009, 21:07 |
|
||
|
Линтер, зависание запроса в ADO
|
|||
|---|---|---|---|
|
#18+
xuser, Попробовал, как в Вашем примере - без объекта команды с передачей на прямую строки запроса и конекшена. Та же ошибка... :( Причём, другие запросы к другим таблицам с однотипными полями выполняются без ошибок. К сожалению, без объекта команды обойтись не получится, т.к. активно используются передача значений через параметры, например, в фильтрах... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2009, 12:17 |
|
||
|
Линтер, зависание запроса в ADO
|
|||
|---|---|---|---|
|
#18+
Ответ отправил вчера в личку. Если можно, пришлите маленький тестовый проект на Delphi с работающим у Вас запросом, (или два - с работающим и с неработающим). И еще сообщите Вашу версию Delphi. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2009, 14:21 |
|
||
|
Линтер, зависание запроса в ADO
|
|||
|---|---|---|---|
|
#18+
xuser, Пример подготовлю и вышлю после новогодних праздников. Delphi 5 Enterprise Build 6.18 update pack 1, лицензионная... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2009, 14:18 |
|
||
|
Линтер, зависание запроса в ADO
|
|||
|---|---|---|---|
|
#18+
Отправил Вам пример для воспроизведения ошибки... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 14:13 |
|
||
|
Линтер, зависание запроса в ADO
|
|||
|---|---|---|---|
|
#18+
Пример получил, проблема воспроизвелась, разбираемся, завтра ответим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 17:19 |
|
||
|
|

start [/forum/topic.php?fid=56&msg=36387419&tid=2015652]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 13ms |
| total: | 126ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...