|
|
|
Почему хранимые процедуры вылетают по таймауту ? (Delphi --> ADO --> MS SQ
|
|||
|---|---|---|---|
|
#18+
Проблема такая. Через BDE хранимые процедуры, которые работают по 10-15 минут вызываются нормально. Через ADO-компоненты они через несколько минут вылетают по таймауту. Причём все мои попытки найти параметр, влияющий на это, не увенчались успехом. Вто что я нашёл : 1) Свойство CommandTimeout у компонента ADOConnect 2) Аналогичное свойство у компонента AdoCommand 3) У компонента AdoStoredProc такого свойства вообще нет. Вобщем, те свойства, которые я нашёл, увеличивал до 2000 секунд и больше - без толку. Всё равно минут через пять- семь вылетает по таймауту и всё. Кто знает, в каких недрах зарыт нужный параметр ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2002, 20:10:09 |
|
||
|
Почему хранимые процедуры вылетают по таймауту ? (Delphi --> ADO --> MS SQ
|
|||
|---|---|---|---|
|
#18+
Твои беды от того, что ты не следуешь настоятельным рекомендациям от производителя Delphi. Надо использовать TAdoDataSet вместо TAdoQuery и TAdoStoredProc. В TAdoDataSet свойство установки таймаута имеется. TAdoQuery и TAdoStoredProc служат только как временное решение для облегчения перехода от BDE к ADO. Но и там тоже есть свойство таймаута, только оно protected, и для использования его надо вытащить в public. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2002, 10:07:24 |
|
||
|
Почему хранимые процедуры вылетают по таймауту ? (Delphi --> ADO --> MS SQ
|
|||
|---|---|---|---|
|
#18+
Всё это замечательно, да вот только через TADODataSet невозможно вызвать хранимую процедуру командой execute, которая к тому же не возвращает набор данных. Ниже я привожу цитату из help-а Delphi на TADODataSet (в которой, кстати, даётся рекомендация использовать "TADOCommand or TADOQuery") Что касается свойства CommandTimeout в TAdoCommand, то оно не protected, а published. Иначе бы я не смог его менять с помощью Object Inspector. Use the TADODataSet component's CommandText property to retrieve the dataset, specifying either a table name or an SQL statement (SELECT only). TADODataSet is not capable of issuing Data Manipulation Language (DML) SQL statements that do not return result sets (like DELETE, INSERT, and UPDATE). For this use a component like TADOCommand or TADOQuery. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2002, 14:49:47 |
|
||
|
Почему хранимые процедуры вылетают по таймауту ? (Delphi --> ADO --> MS SQ
|
|||
|---|---|---|---|
|
#18+
Надо создать наследника от TADOQuery и обеспечить возможность установки CommandTimeout. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2002, 14:54:00 |
|
||
|
Почему хранимые процедуры вылетают по таймауту ? (Delphi --> ADO --> MS SQ
|
|||
|---|---|---|---|
|
#18+
Всё это замечательно, да вот только через TADODataSet невозможно вызвать хранимую процедуру командой execute, которая к тому же не возвращает набор данных. Для таких запросов необходимо конечно использовать TAdoCommand Что касается свойства CommandTimeout в TAdoCommand, то оно не protected, а published. Иначе бы я не смог его менять с помощью Object Inspector. Я знаю. Только речь шла об TAdoStoredProc и TAdoQurey. Если с TAdoCommand проблем нет и ты его используешь, то в чем тогда вообще проблема? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2002, 15:04:24 |
|
||
|
Почему хранимые процедуры вылетают по таймауту ? (Delphi --> ADO --> MS SQ
|
|||
|---|---|---|---|
|
#18+
Если Вы вызываете хранимую процедуру командой execute, и она не возвращает наборов данных - то пользуйтесь AdoConnection.Execute, установив прежде AdoConnection.CommandTimeout. Я, помниться, тоже мучался с таймаутами в AdoCommand. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2002, 15:11:59 |
|
||
|
Почему хранимые процедуры вылетают по таймауту ? (Delphi --> ADO --> MS SQ
|
|||
|---|---|---|---|
|
#18+
Если используется Delphi5, то CommandTimeout, для TADOQuery и т. д., не изменяется, это глюк. Для полного понимания проблемы, лучше всего посмотреть исходники. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2002, 15:16:50 |
|
||
|
Почему хранимые процедуры вылетают по таймауту ? (Delphi --> ADO --> MS SQ
|
|||
|---|---|---|---|
|
#18+
А еще бывают на свете таймауты блокировок и таймауты сокетов. Какой в данном случае таймаут исчерпался? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2002, 15:17:42 |
|
||
|
Почему хранимые процедуры вылетают по таймауту ? (Delphi --> ADO --> MS SQ
|
|||
|---|---|---|---|
|
#18+
Если с TAdoCommand проблем нет и ты его используешь, то в чем тогда вообще проблема? Как раз с TAdoCommand и проблема. Ему CommandTimeout по барабану, он его игнорирует и прерывает выполнение запроса через одному ему известное количество секунд. Но я решил свою проблему через AdoConnection. Экспериментальным путём выяснил, что в нём CommandTimeout работает! Поэтому использовал два оператора AdoConnection.CommandTimeOut := 1200; AdoConnection.Execute('execute MyProc'); Хотя лично мне выполнение хранимых процедур через компонент AdoConnection не очень нравится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2002, 17:53:23 |
|
||
|
Почему хранимые процедуры вылетают по таймауту ? (Delphi --> ADO --> MS SQ
|
|||
|---|---|---|---|
|
#18+
Ещё добавлю, что мне совершенно не ясно, почему вызов хранимой процедуры через ADO-компоненты Delphi выполняется в несколько раз медленнее, чем вызов той же самой процедуры чрез BDE или MS Query Analyzer. Может это из-за того, что в Delphi 5 какие-то глюки в реализации ADO-доступа к БД ? Надеюсь, если я перейду на Delphi 6, то они исчезнут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2002, 17:56:56 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32064196&tid=1819104]: |
0ms |
get settings: |
8ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
72ms |
get topic data: |
15ms |
get forum data: |
4ms |
get page messages: |
69ms |
get tp. blocked users: |
2ms |
| others: | 209ms |
| total: | 408ms |

| 0 / 0 |
