Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / BDE Client and deadlocks??? / 25 сообщений из 33, страница 1 из 2
10.07.2002, 10:07:53
    #32035920
noname
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BDE Client and deadlocks???
Вообщем есть следущая проблема:
Написан BDE клиент, работает все нормально, когда он работает один, а если еще парочку клиентов запустить, то капец deadlock-и достают.
Мое видение проблемы:
Дело в том что используется компонент TQuery которые просто используются для отображения таблиц, все операции выполняются с помощью хранимых процедур, и врядли возникают deadlock-и там, дело в том что есть основание полагать что TQuery использует курсор на сервере, причем курсор видимо read only, который блокирует записи и не дает выполнятся хранимым процедурам, а почему я так решил что он использует курсор на сервере, то потому что при движении по таблице он каждый раз дергает сервер для зачитки даных.
Когда то я использовал ADO там можно указывать тип курсора клиентский или серверный, и когда указываешь клиентский все работает класно, а серверный это аналог работы TQuery притармаживает по понятным причинам...
Внимание вопрос: Можна ли в TQuery установить клиентский курсор, если да то как, или другие предложения которые позволят развязать конфликт BDE Client-ов...
Жду ваши предложения...
...
Рейтинг: 0 / 0
10.07.2002, 10:40:12
    #32035930
Rom
Rom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BDE Client and deadlocks???
для отображения данных можно использовать не TQuery, а как у меня, например, TStoredProcedure, это должно помочь.
у меня тоже все через БДЕ, порядка 20-30 юзверей + удаленный доступ
...
Рейтинг: 0 / 0
10.07.2002, 10:48:34
    #32035934
noname
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BDE Client and deadlocks???
Подробнее пожалуйста...
А как через Stored Procs???
...
Рейтинг: 0 / 0
10.07.2002, 10:56:13
    #32035939
Maxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BDE Client and deadlocks???
Привет
насколько я понял разговор идет о Delphi or Cbuilder
Там же где и TQuery находиться и TStoredProc...
Просто перетащи его на DataModule и юзай на здоровье
...
Рейтинг: 0 / 0
10.07.2002, 11:01:59
    #32035940
noname
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BDE Client and deadlocks???
Это я знаю, меня интересует как отображать данные через Stored Procs, как это делает TQuery через DataSource когда его цепляешь к Grid-у
...
Рейтинг: 0 / 0
10.07.2002, 11:34:37
    #32035951
Rom
Rom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BDE Client and deadlocks???
на серваке создаешь хранимую процедуру что-то типа

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


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

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

далее TDataSource, TDBGrid ...
...
Рейтинг: 0 / 0
10.07.2002, 18:10:04
    #32036083
noname
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BDE Client and deadlocks???
А если нужно отображать связанные таблицы???
...
Рейтинг: 0 / 0
10.07.2002, 18:25:18
    #32036084
Rom
Rom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BDE Client and deadlocks???
делай запрос, который связывает эти таблицы
...
Рейтинг: 0 / 0
10.07.2002, 18:50:55
    #32036085
noname
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BDE Client and deadlocks???
Че-то глючит пишет:
... 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
10.07.2002, 19:03:30
    #32036086
Rom
Rom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BDE Client and deadlocks???
нельзя внутри процедуры, кот. возвращает набор данных вызывать другую процедуру, кот. возвращает набор данных
...
Рейтинг: 0 / 0
10.07.2002, 19:14:24
    #32036091
noname
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BDE Client and deadlocks???
Да нет же вложенного вызова там нету...

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

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

Вполне может быть, что у вас такая стратегия программирования, при которой указанные грабли не возникают. Для наступания на грабли нужны соотв. условия.
Могу привести примеры, когда вышеуказанные грабли не возникнут и без FetchAll:
1) sql-сервер - не MSSQL и не SYBASE
2) выборки не большие в большинстве своем (до 1000 записей)
3) после Open идет переход на последнюю запись или близко к ней.
4) после Open происходит построчная обработка записей
5) написан наследник от TQuery, в котором переопределены некоторые методы (типа IsSequenced, чтобы ползунок в гриде нормально работал)
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / BDE Client and deadlocks??? / 25 сообщений из 33, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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