|
|
|
Снова вопрос о 'CashedUpdates' в ADO
|
|||
|---|---|---|---|
|
#18+
При переводе клиента с BDE (StoredProc + UpdateSQL) столкнулся с невозможностью прямого перевода программы под ADO. Существует некий список документов, получаемый из SP(сложный SELECT) и куча справочников с тем же подходом. Документ на сервер добавляет(изменяет,удаляет) соответствующая SP, после чего в DataSet'е прямо прописываются новые значения полей (StoredProc.CashedUpdates:=True ...). ADO кеширования не позволяет, после открытия списка засасывает метаданные(о ключах, выч. полях и т.д.). При добавлении записи ADO самостоятельно формирует INSERT, изменить значение ключевых полей в RecordSet'e не дает,что правильно при его логике работы, но мне не нужно. Выхода вижу два 1. ClientDataSet - что-то не нравится ... 2. В SP : Код: plaintext 1. 2. 3. 4. При такой SP ADO свои INSERT'ы не формирует(хотелось бы знать почему), поля могу править как хочу. Вопрос: есть ли минусы у такой активной работы с временными таблицами (блокирование tempdb и т.п.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2002, 14:41:04 |
|
||
|
Снова вопрос о 'CashedUpdates' в ADO
|
|||
|---|---|---|---|
|
#18+
Предпосылка "ADO кеширования не позволяет" в корне неверна. LockType:=ltBatchOptimistic и любой самый неживой запрос становиться живым. При этом запросы на обновление insert/update/delete можно сформировать и отправить на сервер самому. > есть ли минусы у такой активной работы с временными таблицами (блокирование tempdb и т.п.) Это совершенно нормально при работе с MSSQL. О блокировании tempdb можно позабыть, это кануло в историю вместе с MSSQL6.5 > При такой SP ADO свои INSERT'ы не формирует(хотелось бы знать почему) Догадаться легко - вставлять некуда, так как временная табличка не существует после окончания выполнения процедуры. К тому же, корректные запросы на обновление автоматика построить может только в простейших случаях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2002, 18:19:37 |
|
||
|
Снова вопрос о 'CashedUpdates' в ADO
|
|||
|---|---|---|---|
|
#18+
First, if you do a CREATE TABLE, then you don't need to do SELECT ... INTO, because the latter is supposed to create a table on the fly, while you already have it. Second, TEMPDB can be blocked if you don't use CREATE TABLE, but do your "on-the-fly" creation via SELECT ... INTO. If the SELECT statement returns a large resultset, sysobjects, syscolumns, and sysindexes tables in TEMPDB will have UPDATE lock lpaced on them until your temporary table is fully populated. Third, the best approach is to do the following: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2002, 20:02:25 |
|
||
|
Снова вопрос о 'CashedUpdates' в ADO
|
|||
|---|---|---|---|
|
#18+
2Dankov 1. Спасибо, с LockType, то что нужно... 2. Что за команда SET NO_BROWSETABLE OFF/ON выполняется сервером при каждом моем вызове SP на добавление при просмотре profiler'om? 3. Как бы еще избавиться от except'ов при попытке самому прописать значение в ключевое(или вычисляемое) поле. Где в полях этот признак и можно ли его изменить? Может пусть клиент сам дергает с сервера новые записи по-одной? 2Robert Djabarov Да, у меня опечатка: Код: plaintext 1. 2. 3. Проверку вставлю, спасибо за совет. Еще один вопрос. Какие select'ы считать большими. Или от противного, можно ли 100-200 записей из 2-3 полей считать маленьким? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2002, 15:04:06 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32046208&tid=1820820]: |
0ms |
get settings: |
8ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
94ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
| others: | 246ms |
| total: | 451ms |

| 0 / 0 |
