|
|
|
BDE Client and deadlocks???
|
|||
|---|---|---|---|
|
#18+
Вообщем есть следущая проблема: Написан BDE клиент, работает все нормально, когда он работает один, а если еще парочку клиентов запустить, то капец deadlock-и достают. Мое видение проблемы: Дело в том что используется компонент TQuery которые просто используются для отображения таблиц, все операции выполняются с помощью хранимых процедур, и врядли возникают deadlock-и там, дело в том что есть основание полагать что TQuery использует курсор на сервере, причем курсор видимо read only, который блокирует записи и не дает выполнятся хранимым процедурам, а почему я так решил что он использует курсор на сервере, то потому что при движении по таблице он каждый раз дергает сервер для зачитки даных. Когда то я использовал ADO там можно указывать тип курсора клиентский или серверный, и когда указываешь клиентский все работает класно, а серверный это аналог работы TQuery притармаживает по понятным причинам... Внимание вопрос: Можна ли в TQuery установить клиентский курсор, если да то как, или другие предложения которые позволят развязать конфликт BDE Client-ов... Жду ваши предложения... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2002, 10:07:53 |
|
||
|
BDE Client and deadlocks???
|
|||
|---|---|---|---|
|
#18+
для отображения данных можно использовать не TQuery, а как у меня, например, TStoredProcedure, это должно помочь. у меня тоже все через БДЕ, порядка 20-30 юзверей + удаленный доступ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2002, 10:40:12 |
|
||
|
BDE Client and deadlocks???
|
|||
|---|---|---|---|
|
#18+
Подробнее пожалуйста... А как через Stored Procs??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2002, 10:48:34 |
|
||
|
BDE Client and deadlocks???
|
|||
|---|---|---|---|
|
#18+
Привет насколько я понял разговор идет о Delphi or Cbuilder Там же где и TQuery находиться и TStoredProc... Просто перетащи его на DataModule и юзай на здоровье ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2002, 10:56:13 |
|
||
|
BDE Client and deadlocks???
|
|||
|---|---|---|---|
|
#18+
Это я знаю, меня интересует как отображать данные через Stored Procs, как это делает TQuery через DataSource когда его цепляешь к Grid-у ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2002, 11:01:59 |
|
||
|
BDE Client and deadlocks???
|
|||
|---|---|---|---|
|
#18+
на серваке создаешь хранимую процедуру что-то типа Код: plaintext 1. 2. связываешь TStoredProcedure c хранимой процедурой, описываешь параметры, делаешь Open ( не Exec ! ) на выходе получишь TDataSet далее TDataSource, TDBGrid ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2002, 11:34:37 |
|
||
|
BDE Client and deadlocks???
|
|||
|---|---|---|---|
|
#18+
А если нужно отображать связанные таблицы??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2002, 18:10:04 |
|
||
|
BDE Client and deadlocks???
|
|||
|---|---|---|---|
|
#18+
делай запрос, который связывает эти таблицы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2002, 18:25:18 |
|
||
|
BDE Client and deadlocks???
|
|||
|---|---|---|---|
|
#18+
Че-то глючит пишет: ... raised exception class EDBEngineError with message General SQL error ct_send(): user api layer: external error: this routine cannot be called because another command structure has results pending. Process stopped .... Вообщем это вызов еще одной процедуры которая имеет параметры из основной таблицы и по идее должна возвращать подчиненную таблицу которая отвечает параметрам... Наверно уже перетрудился... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2002, 18:50:55 |
|
||
|
BDE Client and deadlocks???
|
|||
|---|---|---|---|
|
#18+
нельзя внутри процедуры, кот. возвращает набор данных вызывать другую процедуру, кот. возвращает набор данных ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2002, 19:03:30 |
|
||
|
BDE Client and deadlocks???
|
|||
|---|---|---|---|
|
#18+
Да нет же вложенного вызова там нету... Схема работы такая: 1. Вызывается хранимая процедура, которая вовращает главную таблицу 2. Есть DBEdit который привязан к Grid-у в котором отображается главная таблица 3. Потом DBEdit->Text передается как параметр в следущую хранимую процедуру, которая возвращает подчиненную таблицу в другой Grid в соответствии с параметром 4. Error при открытии второй хранимой процедуры ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2002, 19:14:24 |
|
||
|
BDE Client and deadlocks???
|
|||
|---|---|---|---|
|
#18+
??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2002, 10:24:31 |
|
||
|
BDE Client and deadlocks???
|
|||
|---|---|---|---|
|
#18+
Мне кажется нельзя использовать TDBEdit в этом случае ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2002, 10:31:09 |
|
||
|
BDE Client and deadlocks???
|
|||
|---|---|---|---|
|
#18+
> ct_send(): user api layer: external error: this routine cannot be called because another command structure has results pending. Process stopped Эта проблема из-за нарушения "золотого правила" при работе с TQuery и TStoredProc. Заключается оно в следующем - после метода Open строчкой ниже должен быть метод FetchAll. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2002, 10:36:01 |
|
||
|
BDE Client and deadlocks???
|
|||
|---|---|---|---|
|
#18+
2 Dankov в нашем огромном приложении, соержащем не один десяток форм и с которым работают множество пользователей нет ни одного FetchAll ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2002, 10:39:31 |
|
||
|
BDE Client and deadlocks???
|
|||
|---|---|---|---|
|
#18+
Он используется как параметр второй хранимой процедуры, а не для редактирования Просто когда юзер двигается по главному гриду, я через DBEdit знаю на какой он строке стоит, чтобы выбрать с помощью другой хранимки выбрать записи которые подчинены записи из главной таблицы , таким образом должно быть отображение 1->n. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2002, 10:40:05 |
|
||
|
BDE Client and deadlocks???
|
|||
|---|---|---|---|
|
#18+
И смысл этого FetchAll-а??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2002, 10:45:31 |
|
||
|
BDE Client and deadlocks???
|
|||
|---|---|---|---|
|
#18+
Читаю справку... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2002, 10:49:54 |
|
||
|
BDE Client and deadlocks???
|
|||
|---|---|---|---|
|
#18+
Для этого не обязательно использовать TDBEdit, можно обойтись средствами ТDBGrid ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2002, 10:50:07 |
|
||
|
BDE Client and deadlocks???
|
|||
|---|---|---|---|
|
#18+
> в нашем огромном приложении, соержащем не один десяток форм и с которым работают множество пользователей нет ни одного FetchAll У вас, значит, стоит свежий BDE версии не ниже 5.01 (вроде, точно не помню, с какой версии это ввели), который автоматически делает FetchAll для недофетченного набора как только по тому же соединению запрашивается новый набор данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2002, 11:00:54 |
|
||
|
BDE Client and deadlocks???
|
|||
|---|---|---|---|
|
#18+
да нет, вроде 4.0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2002, 11:12:34 |
|
||
|
BDE Client and deadlocks???
|
|||
|---|---|---|---|
|
#18+
Отсутствие граблей в частном случае не говорит о том, что их не бывает вообще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2002, 11:19:03 |
|
||
|
BDE Client and deadlocks???
|
|||
|---|---|---|---|
|
#18+
Не знаю че там за лажа, но FetchAll() помог избежать ошибку BDE Error, а насчет множества пользователей еще не знаю.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2002, 11:21:00 |
|
||
|
BDE Client and deadlocks???
|
|||
|---|---|---|---|
|
#18+
отсутствие граблей в течение длительного срока кое о чем говорит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2002, 11:21:02 |
|
||
|
BDE Client and deadlocks???
|
|||
|---|---|---|---|
|
#18+
> отсутствие граблей в течение длительного срока кое о чем говорит Вполне может быть, что у вас такая стратегия программирования, при которой указанные грабли не возникают. Для наступания на грабли нужны соотв. условия. Могу привести примеры, когда вышеуказанные грабли не возникнут и без FetchAll: 1) sql-сервер - не MSSQL и не SYBASE 2) выборки не большие в большинстве своем (до 1000 записей) 3) после Open идет переход на последнюю запись или близко к ней. 4) после Open происходит построчная обработка записей 5) написан наследник от TQuery, в котором переопределены некоторые методы (типа IsSequenced, чтобы ползунок в гриде нормально работал) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2002, 11:31:18 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32036085&tid=1821840]: |
0ms |
get settings: |
7ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
35ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 225ms |
| total: | 348ms |

| 0 / 0 |
