|
|
|
Помогите разобраться с курсорадаптером.
|
|||
|---|---|---|---|
|
#18+
Обрисую в кратце ситуацию. Клиент на VFP9SP1, сервер - Oracle 10g, подключение через оракловский odbc. На сервере есть справочник, одно из полей которого типа blob и в нем хранятся картинки (gif). На форме редактирования этого справочника есть 2 вкладки, одна для редактирования атрибутов, 2я - для просмотра этой самой картинки. Чтобы уменьшить количество передаваемых между сервером и клиентом данных, я решил в "основном" курсорадаптере исключить blob поле и сделать для него отдельный курсорадаптер, который будет "наполнятся" по требованию клиента (в моем случае - по клику на pageframe). В классе приложения создается разделяемое подключение, с помощью комманды: Код: plaintext Для формы описан dataenvironment, который использует это подключение. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. Форма нормально запускается, грид наполняется данными из casprkam, но при попытке вызвать метод CursorFill для cashem выдается сообщение: "Connection ... is busy." Собственно сам метод с CursorFill: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Что я только не делал - ничего не получается, идеи иссякли... Надеюсь на вашу помощь, друзья. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2007, 15:37 |
|
||
|
Помогите разобраться с курсорадаптером.
|
|||
|---|---|---|---|
|
#18+
Сталкивался с чем-то похожим , правда на MS SQL Поиграйся со свойствами "Fetch..." У меня была проблема с тем , что стояла загрузка порциями FetchAsNeeded = .T. И пока первая таблица не прогружалась полностью , все остальные не грузились. Разрулил ситуевину добавлением еще одного "шарового" конекта т.е. для одного CA для конекта используем nHandle а для второго SQLCONNECT(nHandle) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2007, 10:29 |
|
||
|
Помогите разобраться с курсорадаптером.
|
|||
|---|---|---|---|
|
#18+
Сталкивался с чем-то похожим , правда на MS SQL Поиграйся со свойствами "Fetch..." У меня была проблема с тем , что стояла загрузка порциями FetchAsNeeded = .T. И пока первая таблица не прогружалась полностью , все остальные не грузились. Разрулил ситуевину добавлением еще одного "шарового" конекта т.е. для одного CA для конекта используем nHandle а для второго SQLCONNECT(nHandle) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2007, 10:31 |
|
||
|
Помогите разобраться с курсорадаптером.
|
|||
|---|---|---|---|
|
#18+
Собственно, FetchAsNeeded = .T. и стоит. И весь смысл был в нем, т.к. справочник достаточно большой я не хочу загружать на клиента все записи. Думал поможет установка AllowSimultaneousFetch = .T., не помогло. А руками делать SQLCONNECT для второго курсорадаптера конечно можно, но если мне нужно открыть другую форму, использующую общий nHandle - опять "connection is busy" вылезет. Можно и форму перепроектировать, ограничивая объем выборки чтобы отпала необходимость в FetchAsNeeded, но мне кажется, что я все-таки что-то делаю неправильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2007, 11:35 |
|
||
|
Помогите разобраться с курсорадаптером.
|
|||
|---|---|---|---|
|
#18+
Пока вся таблица не прогрузиться - конект будет занят - тут уж ничего не поделаешь. Сам с этим игрался. Помогло именно создание отдельного конекта. SQLCONNECT(nHandle) - создает конект "внутри" nHandle - т.е. сам nHandle остается свободен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2007, 11:51 |
|
||
|
Помогите разобраться с курсорадаптером.
|
|||
|---|---|---|---|
|
#18+
Не знаю на сколько это может помочь. Сейчас под рукой нет кода, как это делал (7 лет прошло). Проблема была та же, более того - для пользоваетеля интранета необходимо было давать дозированную информацию из базы Оракла со сотнями тысяч записей. И делал это стандартно: 1- ограничивал объем запроса соответсвующими параметрами. (максимум на 2 страницы) 2 -Открывал базу в режиме NODATA 3 - когда требовалось (пере)запросить информацию или двинуться дальше - изменял параметры и вызывал Requery('myRemoteView') - все работало как часы. Теперь ВАЖНО! Но когда надо было к одной и той же базе (таблице) одновременно коннектиться из разных представлений ( как в Вашем случае) для ускорения , то использовал второй ODBC источник к той же базе и они создавали иллюзию, будт-то я с разными таблицами работаю - без задержек. Сейчас возможно такие выкрутасы и не потребуются - надо проверять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2007, 12:38 |
|
||
|
Помогите разобраться с курсорадаптером.
|
|||
|---|---|---|---|
|
#18+
Собственно, поступил, как советовал -=AlexiS=- - каждый CA получает свой handle через SQLCONNECT и уже через него работает. Мне почему-то казалось, что AllowSimultaneousFetch = .T. должно было сказать CA самому разрешать такие ситуации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2007, 14:27 |
|
||
|
|

start [/forum/topic.php?fid=41&fpage=204&tid=1589558]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 326ms |

| 0 / 0 |
