powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / BDE Client and deadlocks???
33 сообщений из 33, показаны все 2 страниц
BDE Client and deadlocks???
    #32035920
noname
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообщем есть следущая проблема:
Написан BDE клиент, работает все нормально, когда он работает один, а если еще парочку клиентов запустить, то капец deadlock-и достают.
Мое видение проблемы:
Дело в том что используется компонент TQuery которые просто используются для отображения таблиц, все операции выполняются с помощью хранимых процедур, и врядли возникают deadlock-и там, дело в том что есть основание полагать что TQuery использует курсор на сервере, причем курсор видимо read only, который блокирует записи и не дает выполнятся хранимым процедурам, а почему я так решил что он использует курсор на сервере, то потому что при движении по таблице он каждый раз дергает сервер для зачитки даных.
Когда то я использовал ADO там можно указывать тип курсора клиентский или серверный, и когда указываешь клиентский все работает класно, а серверный это аналог работы TQuery притармаживает по понятным причинам...
Внимание вопрос: Можна ли в TQuery установить клиентский курсор, если да то как, или другие предложения которые позволят развязать конфликт BDE Client-ов...
Жду ваши предложения...
...
Рейтинг: 0 / 0
BDE Client and deadlocks???
    #32035930
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для отображения данных можно использовать не TQuery, а как у меня, например, TStoredProcedure, это должно помочь.
у меня тоже все через БДЕ, порядка 20-30 юзверей + удаленный доступ
...
Рейтинг: 0 / 0
BDE Client and deadlocks???
    #32035934
noname
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подробнее пожалуйста...
А как через Stored Procs???
...
Рейтинг: 0 / 0
BDE Client and deadlocks???
    #32035939
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет
насколько я понял разговор идет о Delphi or Cbuilder
Там же где и TQuery находиться и TStoredProc...
Просто перетащи его на DataModule и юзай на здоровье
...
Рейтинг: 0 / 0
BDE Client and deadlocks???
    #32035940
noname
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это я знаю, меня интересует как отображать данные через Stored Procs, как это делает TQuery через DataSource когда его цепляешь к Grid-у
...
Рейтинг: 0 / 0
BDE Client and deadlocks???
    #32035951
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на серваке создаешь хранимую процедуру что-то типа

Код: plaintext
1.
2.
as
select * from Table where ......
go


связываешь TStoredProcedure c хранимой процедурой, описываешь параметры, делаешь Open ( не Exec ! )

на выходе получишь TDataSet

далее TDataSource, TDBGrid ...
...
Рейтинг: 0 / 0
BDE Client and deadlocks???
    #32036083
noname
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А если нужно отображать связанные таблицы???
...
Рейтинг: 0 / 0
BDE Client and deadlocks???
    #32036084
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
делай запрос, который связывает эти таблицы
...
Рейтинг: 0 / 0
BDE Client and deadlocks???
    #32036085
noname
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Че-то глючит пишет:
... 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 ....

Вообщем это вызов еще одной процедуры которая имеет параметры из основной таблицы и по идее должна возвращать подчиненную таблицу которая отвечает параметрам...
Наверно уже перетрудился...
...
Рейтинг: 0 / 0
BDE Client and deadlocks???
    #32036086
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нельзя внутри процедуры, кот. возвращает набор данных вызывать другую процедуру, кот. возвращает набор данных
...
Рейтинг: 0 / 0
BDE Client and deadlocks???
    #32036091
noname
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да нет же вложенного вызова там нету...

Схема работы такая:
1. Вызывается хранимая процедура, которая вовращает главную таблицу
2. Есть DBEdit который привязан к Grid-у в котором отображается главная таблица
3. Потом DBEdit->Text передается как параметр в следущую хранимую процедуру, которая возвращает подчиненную таблицу в другой Grid в соответствии с параметром
4. Error при открытии второй хранимой процедуры
...
Рейтинг: 0 / 0
BDE Client and deadlocks???
    #32036142
noname
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
???
...
Рейтинг: 0 / 0
BDE Client and deadlocks???
    #32036143
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется нельзя использовать TDBEdit в этом случае
...
Рейтинг: 0 / 0
BDE Client and deadlocks???
    #32036145
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> 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.
...
Рейтинг: 0 / 0
BDE Client and deadlocks???
    #32036149
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Dankov
в нашем огромном приложении, соержащем не один десяток форм и с которым работают множество пользователей нет ни одного FetchAll
...
Рейтинг: 0 / 0
BDE Client and deadlocks???
    #32036152
noname
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Он используется как параметр второй хранимой процедуры,
а не для редактирования
Просто когда юзер двигается по главному гриду, я через DBEdit знаю на какой он строке стоит, чтобы выбрать с помощью другой хранимки выбрать записи которые подчинены записи из главной таблицы , таким образом должно быть отображение 1->n.
...
Рейтинг: 0 / 0
BDE Client and deadlocks???
    #32036157
noname
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И смысл этого FetchAll-а???
...
Рейтинг: 0 / 0
BDE Client and deadlocks???
    #32036160
noname
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Читаю справку...
...
Рейтинг: 0 / 0
BDE Client and deadlocks???
    #32036161
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для этого не обязательно использовать TDBEdit,
можно обойтись средствами ТDBGrid
...
Рейтинг: 0 / 0
BDE Client and deadlocks???
    #32036165
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> в нашем огромном приложении, соержащем не один десяток форм и с которым работают множество пользователей нет ни одного FetchAll

У вас, значит, стоит свежий BDE версии не ниже 5.01 (вроде, точно не помню, с какой версии это ввели), который автоматически делает FetchAll для недофетченного набора как только по тому же соединению запрашивается новый набор данных.
...
Рейтинг: 0 / 0
BDE Client and deadlocks???
    #32036171
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да нет, вроде 4.0
...
Рейтинг: 0 / 0
BDE Client and deadlocks???
    #32036175
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отсутствие граблей в частном случае не говорит о том, что их не бывает вообще.
...
Рейтинг: 0 / 0
BDE Client and deadlocks???
    #32036176
noname
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не знаю че там за лажа, но FetchAll() помог избежать ошибку BDE Error, а насчет множества пользователей еще не знаю....
...
Рейтинг: 0 / 0
BDE Client and deadlocks???
    #32036177
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
отсутствие граблей в течение длительного срока кое о чем говорит
...
Рейтинг: 0 / 0
BDE Client and deadlocks???
    #32036180
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> отсутствие граблей в течение длительного срока кое о чем говорит

Вполне может быть, что у вас такая стратегия программирования, при которой указанные грабли не возникают. Для наступания на грабли нужны соотв. условия.
Могу привести примеры, когда вышеуказанные грабли не возникнут и без FetchAll:
1) sql-сервер - не MSSQL и не SYBASE
2) выборки не большие в большинстве своем (до 1000 записей)
3) после Open идет переход на последнюю запись или близко к ней.
4) после Open происходит построчная обработка записей
5) написан наследник от TQuery, в котором переопределены некоторые методы (типа IsSequenced, чтобы ползунок в гриде нормально работал)
...
Рейтинг: 0 / 0
BDE Client and deadlocks???
    #32036181
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчет deadlock'ов - отключи на время транзакции и проверь. Уровень изоляции поставь READ COMMITTED (tiReadCommitted в терминах дельфи) Если прекратится ошибка, значит, дело в неправильной стратегии работы с транзакциями.
...
Рейтинг: 0 / 0
BDE Client and deadlocks???
    #32036203
noname
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А теперь эту фигню пишет уже в среде разработки, но в ней же нельзя выполнить FetchAll...

ct_send(): user api layer: external error: this routine cannot be called because another command structure has results pending.

Не могу изменить теперь ни одного обьекта в DataModule...
...
Рейтинг: 0 / 0
BDE Client and deadlocks???
    #32036205
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Database.Connected -> false
...
Рейтинг: 0 / 0
BDE Client and deadlocks???
    #32036327
noname
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да уже полегчало, уже вроде бы все работает...
Но есть прикол в том что когда запускаешь много клиентов, то первый открытый клиент работает быстрее чем остальные, а остальные че-то притормаживают...
Причем смотрю в процессах приоритеты их равные.
It's paradox...???
...
Рейтинг: 0 / 0
BDE Client and deadlocks???
    #32036341
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
каким образом решил проблему ?
...
Рейтинг: 0 / 0
BDE Client and deadlocks???
    #32036362
noname
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В принципе я был с самого начала прав на счет клиентского курсора, только не знал как его делать, оказалость FetchAll возвращает данные на клиент не держа при этом курсор на сервере, при этом приложение значительно быстрее работает, так как ему не приходится все время дергать сервак, единственный недостаток этого подхода является работа с мнимыми данными, например пока я редактирую запись ее уже кто нибудь удалил, и че делать??? От этого меня раньше предохранял серверный курсор, так как он блокирует записи... но в принципе меня сейчас устраивает и клиентский курсор, а дальше будем думать, может чего-то и придумаем...

To be continued...
...
Рейтинг: 0 / 0
BDE Client and deadlocks???
    #32036366
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если это дубль, то я извиняюсь. Третий раз я не могу отправит ответ в этот топик. Первый раз ответ пропал где-то в середине обсуждения.

Может это поможет, как мертвому припарки, но я писал -
Попробуйте явно указывать ISOLATION LEVEL.

================
А вообще "Даешь ADO!!!"
...
Рейтинг: 0 / 0
BDE Client and deadlocks???
    #32036402
noname
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
За ADO я обеими руками, но я работаю под Sybase и там ADO глюк на глюке, даже connect глючит, пишет
ошибка: разрушительный сбой(я лично такого еще не видел), поэтому решил не рисковать и писать все на BDE...
...
Рейтинг: 0 / 0
33 сообщений из 33, показаны все 2 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / BDE Client and deadlocks???
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]