powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Проблема: выборка из курсора и коррелирующие подзапросы
12 сообщений из 12, страница 1 из 1
Проблема: выборка из курсора и коррелирующие подзапросы
    #33388852
Проблемки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужна помощь... Пытаюсь работать с базой dbf+cdx через vfp ole db provider v9, наткнулся на проблему.

Проблема №1
Делаю следующее:
1. Запрос к таблице, который уходит в курсор
Код: plaintext
1.
2.
3.
4.
5.
SELECT 
    Спр.id as id 
FROM 
    abc.dbf as Спр 
INTO CURSOR qTemps nofilter;

2. Следом пытаюсь данные из курсора получить:
Код: plaintext
1.
SELECT q.id from qTemps as q

На выходе имею ошибку, что не существует qTemps. DBF
Что ему нужно, уже Поиск юзал, мсдн читал. Не нашел в чем грабли.

Проблема №2
В этой версии провайдера анонсирована возможность использования коррелирующий подзапросов, типа
Код: plaintext
1.
SELECT field1, (SELECT ...) FROM ...
Так, все замечательно. Но в скобках подзапрос должен возвращать одно значение, соответственно нужно как-то выборку ограничивать. Можно ограничивать условиями, но если под усливия попадает несколько значений, то напрашивается решение TOP 1, на это мсдн говорит, что в этих подзапросах TOP нельзя использовать. Вопрос, а как поступать тогда?
...
Рейтинг: 0 / 0
Проблема: выборка из курсора и коррелирующие подзапросы
    #33391205
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Проблемки!

1) Так писать нельзя. Только в ХП можно сделать выборку в курсор, а потом из
этого курсора ещё одну выборку. Ну и наконец через SETRESULTSET("MyCursor")
вернуть выборку клиенту.

2) Вообще то УСЛОВИЕ надо такое писать, чтобы ему удовлетворяла только одна
запись. Но если с логикой беда - то используй агрегирующий запрос - например
выбирай MAX(поле_которое_имеет_много_значений). Как я понимаю если у тебя в
условии отбирается куча значений и все они "подходящие", то тебе по барабану
какое из них брать - первое, максимальное или минимальное... Однако
повторюсь - с логикой тут явные проблемы.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Проблема: выборка из курсора и коррелирующие подзапросы
    #33391292
spock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Igor Korolyov
1) Так писать нельзя. Только в ХП можно сделать выборку в курсор, а потом из
этого курсора ещё одну выборку. Ну и наконец через SETRESULTSET("MyCursor")
вернуть выборку клиенту.

2) Вообще то УСЛОВИЕ надо такое писать, чтобы ему удовлетворяла только одна
запись. Но если с логикой беда - то используй агрегирующий запрос - например
выбирай MAX(поле_которое_имеет_много_значений). Как я понимаю если у тебя в
условии отбирается куча значений и все они "подходящие", то тебе по барабану
какое из них брать - первое, максимальное или минимальное... Однако
повторюсь - с логикой тут явные проблемы.

Posted via ActualForum NNTP Server 1.3

Т.е. без хранимых процедур работать с CURSOR нельзя?
Про агрегирующие функции нужно подумать, спасибо за идею.
...
Рейтинг: 0 / 0
Проблема: выборка из курсора и коррелирующие подзапросы
    #33391581
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spock Т.е. без хранимых процедур работать с CURSOR нельзя?
Есть вариант вынести работу в middle tier, хотя для спрашивающенго это может и не подойти, так как он не работает с VFP...
...
Рейтинг: 0 / 0
Проблема: выборка из курсора и коррелирующие подзапросы
    #33395723
spock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Проблема: выборка из курсора и коррелирующие подзапросы
    #33395749
spock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А можно поглядеть примерчик работы с 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.
SELECT 
    T.ID 
FROM 
    Tabl as t 
INTO CURSOR Tempus
Потом я хочу с ним поработать: сделать джойны, подзапросы и пр.
Делаю
Код: plaintext
1.
SETRESULTSET('Tempus')
получаю ошибку: Function argument value, type, or count is invalid.
Вот тут я приплыл...

Дайте пож-та урл на мануал, где написано как работать с CURSOR через провайдер и пр.
...
Рейтинг: 0 / 0
Проблема: выборка из курсора и коррелирующие подзапросы
    #33396057
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi spock!

Как я понимаю, работа с курсорами поддерживается только внутри ХП.
Передавать напрямую такие команды бессмысленно. Работа с курсорами подробно
описана в хелпе по VFP (он должен по идее быть доступен и в онлайн - на msdn
сайте. Если же есть локально MSDN - так там это точно имеется).

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Проблема: выборка из курсора и коррелирующие подзапросы
    #33396123
spock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Igor Korolyov
Hi spock!

Как я понимаю, работа с курсорами поддерживается только внутри ХП.
Передавать напрямую такие команды бессмысленно. Работа с курсорами подробно
описана в хелпе по VFP (он должен по идее быть доступен и в онлайн - на msdn
сайте. Если же есть локально MSDN - так там это точно имеется).

Posted via ActualForum NNTP Server 1.3

Но в msdn нет ни слово, что CURSOR доступен только из ХП. Смотрел как по CREATE CURSOSR, так и по SETRESULTSET(), GETRESULTSET
...
Рейтинг: 0 / 0
Проблема: выборка из курсора и коррелирующие подзапросы
    #33398841
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi spock!

Я понимаю что нету, но видимо на самом деле так оно и есть - видимо разные
вызовы работают в каких-то разных внутренних сессиях, и то что в одной из
них был создан курсор - не видно в другой... ХП же всегда гарантировано
работает в одной сессии - т.к. это единый блок кода.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Проблема: выборка из курсора и коррелирующие подзапросы
    #33398927
spock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так, тогда перефразируем:
1. как мне сделать временную таблицу (см. выше для чего), но не следить за именем "руками", т.е. чтобы для каждого пользователя была изоляция.
2. и как работать в фоксе с хранимыми процедурами?
...
Рейтинг: 0 / 0
Проблема: выборка из курсора и коррелирующие подзапросы
    #33399156
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spockкак мне сделать временную таблицу (см. выше для чего), но не следить за именем "руками", т.е. чтобы для каждого пользователя была изоляцияБерешь идентификатор пользователя (или сессии, если на одного пользователя допускается несколько сессий одновременно) в виде строки. Конкатенируешь с идентификатором функции (формы, например), которая формирует временную таблицу. Если и экземпляров функции несколько может быть, тогда используешь идентификатор экземпляра. Вот и имя.
...
Рейтинг: 0 / 0
Проблема: выборка из курсора и коррелирующие подзапросы
    #33401336
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi spock!

Из GUID-а имя сделай например :) Он не повторяется.

P.S. Как я понимаю VFP OleDB Provider 9-й версии позволяет создавать ХП
прямо из использующего провайдер приложения - если это не каждый день
уникальная процедура (иначе база довольно быстро распухнет до неимоверных
размеров) - то сформируй всё что тебе в виде ХП (там и курсоры можно
использовать и xBase команды и много чего ещё), и выполняй его.
SETRESULTSET() поможет вернуть ОДИН (ну пока такое ограничение) курсор из
этой ХП.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Проблема: выборка из курсора и коррелирующие подзапросы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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