|
|
|
Почему удаленный просмотр выполняется сразу?
|
|||
|---|---|---|---|
|
#18+
Добрый день всем! Поставлена задача перевести серверную часть приложения с MSSQL на PostgreSQL. Сервер работает под Linux. Клиентская часть написана на VFP6 и работает под WinXP. На клиентском компе стоит драйвер ODBC для PostgreSQL. В клиентской программе создается параметризованный просмотр некоторой таблицы, хранящейся на сервере PostgreSQL, типа следующего: CREATE SQL VIEW vw_документы REMOTE CONNECTION pgConnect SHARED AS; SELECT КОД, ДАТА, КОММЕНТАРИЙ, СУММА FROM документы WHERE ОПЕР = ?nOper; Проблема в том, что этот просмотр обращается на сервер сразу, в момент создания, когда переменная nOper еще не определена. В результате происходит большая задержка в выполнении программы, когда вся таблица <документы> качается на клиентский компьютер. А вообще-то бы надо, чтобы просмотр был только определен, а данные были бы закачаны позднее, когда определится переменная nOper и с помощью команды REQUERY(). Анализатором трафика я выяснил, что в момент создания просмотра на сервер проходят две команды: 1. SELECT КОД, ДАТА, КОММЕНТАРИЙ, СУММА FROM документы WHERE ОПЕР = NULL --(NULL здесь потому, что переменная nOper на клиенте еще не определена) на этот запрос сервер возвращает пустую таблицу; 2. SELECT * FROM документы -- почему-то проходит этот запрос, который и заставляет сервер вернуть всю таблицу целиком, из-за чего происходит задержка. Кто может подсказать, почему просмотр выполняется сразу, как это отключить? Может дело в настройках VFP6 или драйвера ODBC для PostgreSQL? Я таких настроек не нашел. На MSSQL все нормально работало. Заранее всем спасибо. Только прошу по существу дела. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2007, 16:24 |
|
||
|
Почему удаленный просмотр выполняется сразу?
|
|||
|---|---|---|---|
|
#18+
В свойствах Remote View в DataEnvironment формы установи свойство NoDataOnLoad = .T. Эта настройка откроет Remote View без данных. Только структуру. Никаких запросов не возникнет. Там, где тебе надо наполнить Remote View выполняешь присвоение параметра и делаешь перезапрос: Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2007, 16:48 |
|
||
|
Почему удаленный просмотр выполняется сразу?
|
|||
|---|---|---|---|
|
#18+
Да, я знаю такое свойство, но в данном случае не используется форма и следовательно отсутствует объект DataEnvironment. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2007, 17:09 |
|
||
|
Почему удаленный просмотр выполняется сразу?
|
|||
|---|---|---|---|
|
#18+
Про это свойство я знаю, но дело в том, что в данном случае не используется форма и поэтому отсутствует объект DataEnvironment. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2007, 17:47 |
|
||
|
Почему удаленный просмотр выполняется сразу?
|
|||
|---|---|---|---|
|
#18+
Это свойство аналогична такому синтаксису открытия Remote View Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2007, 17:54 |
|
||
|
Почему удаленный просмотр выполняется сразу?
|
|||
|---|---|---|---|
|
#18+
ВладимирМЭто свойство аналогична такому синтаксису открытия Remote View Код: plaintext Все правильно, только запрос посылается до того, как я выполняю команду USE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2007, 18:10 |
|
||
|
Почему удаленный просмотр выполняется сразу?
|
|||
|---|---|---|---|
|
#18+
MoVL ВладимирМЭто свойство аналогична такому синтаксису открытия Remote View Код: plaintext Все правильно, только запрос посылается до того, как я выполняю команду USE. Не понял. А как же Вы тогда вообще открываете свое Remote View для использования? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2007, 22:41 |
|
||
|
Почему удаленный просмотр выполняется сразу?
|
|||
|---|---|---|---|
|
#18+
ВладимирМНе понял. А как же Вы тогда вообще открываете свое Remote View для использования? В том то и проблема. При работе с MSSQL в момент создания удаленного просмотра запрос на сервер не происходил. По крайней мере не было задержки и не было никаких сообщений с сервера. С этим драйвером ODBC для PostgreSQL это происходит. Сам сервер тут ни при чем - он честно отрабатывает полученные запросы. В фоксовой программе ничего не изменялось. Дело скорее всего в настройках драйвера. Только в каких? Прочитал всю доку к драйверу ODBC - ничего полезного пока не нашел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2007, 10:33 |
|
||
|
Почему удаленный просмотр выполняется сразу?
|
|||
|---|---|---|---|
|
#18+
Ну то есть просмотр создается и можно вроде бы работать, только мне эта задержка очень не нравится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2007, 10:34 |
|
||
|
Почему удаленный просмотр выполняется сразу?
|
|||
|---|---|---|---|
|
#18+
Определить nOper перед созданием нельзя? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2007, 15:05 |
|
||
|
Почему удаленный просмотр выполняется сразу?
|
|||
|---|---|---|---|
|
#18+
Пробовал определять nOper перед созданием удаленного просмотра. По сути это ничего не меняет. Все-равно на сервер проходят два запроса в момент создания удаленного просмотра. Только теперь уже в первом запросе nOper опеределен, а второй по-прежнему запрашивает всю таблицу целиком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2007, 20:03 |
|
||
|
Почему удаленный просмотр выполняется сразу?
|
|||
|---|---|---|---|
|
#18+
Вы что, создаете Remote View динамически? В процессе работы приложения? Т.е. у Вас нет готового файла DBC с созданным Remote View? Каждый раз пишете команду CREATE SQL VIEW? Можно узнать зачем? Почему нельзя один раз создать Remote View и дальше просто его открывать? Если все-таки создаете динамически, то зачем CREATE SQL? Это же можно сделать через SQLExec()+CursorSetProp()? PS: Если не ошибаюсь, то в какой-то версии FoxPro в сочетании с каким-то драйвером ODBC был глюк: При использовании опции NODATA тем не менее с сервера закачивалась ВСЯ таблица. И только потом выбрасывалось все содержимое. Не могу найти сообщение на эту тему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 17:03 |
|
||
|
Почему удаленный просмотр выполняется сразу?
|
|||
|---|---|---|---|
|
#18+
ВладимирМВы что, создаете Remote View динамически? В процессе работы приложения? Т.е. у Вас нет готового файла DBC с созданным Remote View? Каждый раз пишете команду CREATE SQL VIEW? Можно узнать зачем? Почему нельзя один раз создать Remote View и дальше просто его открывать? Да, Remote View создается динамически, т.к. клиентское приложение заранее не знает, какие справочники присутствуют на сервере. Список доступных справочников клиентское приложение получает после аутентификации пользователя. Текст запроса генерируется динамически в зависимости от того, содержимое какого справочника хочет просмотреть пользователь и собирается в некоторой переменной cCommand, а затем выполняется с помощью команды &cCommand. ВладимирМ Это же можно сделать через SQLExec()+CursorSetProp(). Надо попробовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 15:53 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=34308347&tid=1589915]: |
0ms |
get settings: |
5ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
38ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
30ms |
get tp. blocked users: |
1ms |
| others: | 190ms |
| total: | 285ms |

| 0 / 0 |
