|
|
|
Проблема: выборка из курсора и коррелирующие подзапросы
|
|||
|---|---|---|---|
|
#18+
Нужна помощь... Пытаюсь работать с базой dbf+cdx через vfp ole db provider v9, наткнулся на проблему. Проблема №1 Делаю следующее: 1. Запрос к таблице, который уходит в курсор Код: plaintext 1. 2. 3. 4. 5. 2. Следом пытаюсь данные из курсора получить: Код: plaintext 1. На выходе имею ошибку, что не существует qTemps. DBF Что ему нужно, уже Поиск юзал, мсдн читал. Не нашел в чем грабли. Проблема №2 В этой версии провайдера анонсирована возможность использования коррелирующий подзапросов, типа Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2005, 19:13 |
|
||
|
Проблема: выборка из курсора и коррелирующие подзапросы
|
|||
|---|---|---|---|
|
#18+
Hi Проблемки! 1) Так писать нельзя. Только в ХП можно сделать выборку в курсор, а потом из этого курсора ещё одну выборку. Ну и наконец через SETRESULTSET("MyCursor") вернуть выборку клиенту. 2) Вообще то УСЛОВИЕ надо такое писать, чтобы ему удовлетворяла только одна запись. Но если с логикой беда - то используй агрегирующий запрос - например выбирай MAX(поле_которое_имеет_много_значений). Как я понимаю если у тебя в условии отбирается куча значений и все они "подходящие", то тебе по барабану какое из них брать - первое, максимальное или минимальное... Однако повторюсь - с логикой тут явные проблемы. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2005, 01:48 |
|
||
|
Проблема: выборка из курсора и коррелирующие подзапросы
|
|||
|---|---|---|---|
|
#18+
Igor Korolyov 1) Так писать нельзя. Только в ХП можно сделать выборку в курсор, а потом из этого курсора ещё одну выборку. Ну и наконец через SETRESULTSET("MyCursor") вернуть выборку клиенту. 2) Вообще то УСЛОВИЕ надо такое писать, чтобы ему удовлетворяла только одна запись. Но если с логикой беда - то используй агрегирующий запрос - например выбирай MAX(поле_которое_имеет_много_значений). Как я понимаю если у тебя в условии отбирается куча значений и все они "подходящие", то тебе по барабану какое из них брать - первое, максимальное или минимальное... Однако повторюсь - с логикой тут явные проблемы. Posted via ActualForum NNTP Server 1.3 Т.е. без хранимых процедур работать с CURSOR нельзя? Про агрегирующие функции нужно подумать, спасибо за идею. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2005, 07:36 |
|
||
|
Проблема: выборка из курсора и коррелирующие подзапросы
|
|||
|---|---|---|---|
|
#18+
spock Т.е. без хранимых процедур работать с CURSOR нельзя? Есть вариант вынести работу в middle tier, хотя для спрашивающенго это может и не подойти, так как он не работает с VFP... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2005, 10:25 |
|
||
|
Проблема: выборка из курсора и коррелирующие подзапросы
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2005, 19:18 |
|
||
|
Проблема: выборка из курсора и коррелирующие подзапросы
|
|||
|---|---|---|---|
|
#18+
А можно поглядеть примерчик работы с SETRESULTSET() и GETRESULTSET() при работе через ole db провайдер. Что-то я упустил в руководстве. И вообще, хотелось бы знать как работать с CURSOR'ами. Т.е. с самого начала что и как... Для чего мне нужны курсоры и что я делаю? 1. Имеется некоторое приложение, которое обращается к данными (dbf+cdx) через OLE/COM интерфейсы, при помощи OLE DB provider vfp v9, можно считать для аналогии, что это ADO. 2. Нужно делать запросы, соттветсвующим образом их обрабатывать и отдавать клиенту. Допустим, в ms sql можно было бы создать темповую таблицу, в которую можно было бы слить запрос и дальше его обработать... Тут же придется сливать в темповую таблицу dbf, чего не хотелось бы. Так как нужно будет ее создавать в каталоге с базой, а база многопользовательская сетевая, следовательно нужно будет слидить, чтобы разные пользователи не запустили один и тот же запрос и работали с одним и тем же темповым файлом. Вот следить как раз и не хотелось бы. Прочитав про курсоры, понял, что вроде бы это похоже на #temp в ms sql. Дальше... 3. Делаю простой запрос Код: plaintext 1. 2. 3. 4. 5. Делаю Код: plaintext 1. Вот тут я приплыл... Дайте пож-та урл на мануал, где написано как работать с CURSOR через провайдер и пр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2005, 19:33 |
|
||
|
Проблема: выборка из курсора и коррелирующие подзапросы
|
|||
|---|---|---|---|
|
#18+
Hi spock! Как я понимаю, работа с курсорами поддерживается только внутри ХП. Передавать напрямую такие команды бессмысленно. Работа с курсорами подробно описана в хелпе по VFP (он должен по идее быть доступен и в онлайн - на msdn сайте. Если же есть локально MSDN - так там это точно имеется). Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 02:51 |
|
||
|
Проблема: выборка из курсора и коррелирующие подзапросы
|
|||
|---|---|---|---|
|
#18+
Igor Korolyov Hi spock! Как я понимаю, работа с курсорами поддерживается только внутри ХП. Передавать напрямую такие команды бессмысленно. Работа с курсорами подробно описана в хелпе по VFP (он должен по идее быть доступен и в онлайн - на msdn сайте. Если же есть локально MSDN - так там это точно имеется). Posted via ActualForum NNTP Server 1.3 Но в msdn нет ни слово, что CURSOR доступен только из ХП. Смотрел как по CREATE CURSOSR, так и по SETRESULTSET(), GETRESULTSET ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 07:41 |
|
||
|
Проблема: выборка из курсора и коррелирующие подзапросы
|
|||
|---|---|---|---|
|
#18+
Hi spock! Я понимаю что нету, но видимо на самом деле так оно и есть - видимо разные вызовы работают в каких-то разных внутренних сессиях, и то что в одной из них был создан курсор - не видно в другой... ХП же всегда гарантировано работает в одной сессии - т.к. это единый блок кода. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2005, 03:07 |
|
||
|
Проблема: выборка из курсора и коррелирующие подзапросы
|
|||
|---|---|---|---|
|
#18+
Так, тогда перефразируем: 1. как мне сделать временную таблицу (см. выше для чего), но не следить за именем "руками", т.е. чтобы для каждого пользователя была изоляция. 2. и как работать в фоксе с хранимыми процедурами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2005, 07:39 |
|
||
|
Проблема: выборка из курсора и коррелирующие подзапросы
|
|||
|---|---|---|---|
|
#18+
spockкак мне сделать временную таблицу (см. выше для чего), но не следить за именем "руками", т.е. чтобы для каждого пользователя была изоляцияБерешь идентификатор пользователя (или сессии, если на одного пользователя допускается несколько сессий одновременно) в виде строки. Конкатенируешь с идентификатором функции (формы, например), которая формирует временную таблицу. Если и экземпляров функции несколько может быть, тогда используешь идентификатор экземпляра. Вот и имя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2005, 10:05 |
|
||
|
Проблема: выборка из курсора и коррелирующие подзапросы
|
|||
|---|---|---|---|
|
#18+
Hi spock! Из GUID-а имя сделай например :) Он не повторяется. P.S. Как я понимаю VFP OleDB Provider 9-й версии позволяет создавать ХП прямо из использующего провайдер приложения - если это не каждый день уникальная процедура (иначе база довольно быстро распухнет до неимоверных размеров) - то сформируй всё что тебе в виде ХП (там и курсоры можно использовать и xBase команды и много чего ещё), и выполняй его. SETRESULTSET() поможет вернуть ОДИН (ну пока такое ограничение) курсор из этой ХП. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2005, 02:18 |
|
||
|
|

start [/forum/topic.php?fid=41&fpage=289&tid=1592934]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
53ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 244ms |
| total: | 382ms |

| 0 / 0 |
