:: Visual Foxpro, Foxpro for DOS
Выборка из курсора
jarad
Автор

Сообщений: 21
Дата регистрации: 13.05.2005
Выполняю запрос, результат отправляю в курсор:
SELECT Ж.DATE,
Ж.iddocdef + Ж.IDDOC AS [Вид_1c_type_Документ],
Ж.IDDOC AS Ссылка,
Ж.DOCNO AS Номер,
sp7998 AS ВидОперации,
sp7989 AS [Склад_1c_type_Справочник_МестаХранения],
IIF (Д.SP7998 = 0,ТЧ.SP8009,000000000.00) As СуммаРасход,
IIF (Д.SP7998 = 1,ТЧ.SP8009,000000000.00) As СуммаВозврат
FROM 1SJOURN Ж
INNER JOIN dh8012 Д ON Д.IDDOC = Ж.IDDOC
INNER JOIN dt8012 AS ТЧ ON ТЧ.IDDOC = Ж.IDDOC
WHERE (IDDOCDEF LIKE '%66K%')
AND (Ж.DATE >= {^2005-01-01}) AND (Ж.DATE < {^2005-05-01})
INTO cursor tmpCur NOFILTER
Запрос выполнил. Результат выгрузился в курсор.
Теперь хочу обратиться к курсору как к обычной таблице, т.е. произвести обычный запрос (мне дальше обрабатывать, считать агрегатные ф-и надо, группировать).
Выражения типа
SELECT * FROM tmpCur, SELECT * FROM cursor tmpCur, ругаються на отсутсвие файла tmpCur.dbf.
Выполнение команды DBF('tmpCur') выдает ошибку.
Выполнение конструкции типа:
Select crsTemp Browse
Выдает ошибку: Command is missing required clause.
Можно ли проверить записало ли курсор в дбф, или "заставить" записать, чтобы можно было нормальным селектом обратиться к курсору (т.е. результату первого запроса)
Ratings: 0 negative/0 positive
Re: Выборка из курсора
AleksM

Сообщений: 17881
Дата регистрации: 11.11.2003
Вроде все на месте, меня вот только русские имена настораживают.




------------------
Лучше переесть, чем недоспать.
Не спеши, а то успеешь.
Ratings: 0 negative/0 positive
Re: Выборка из курсора
jarad
Автор

Сообщений: 21
Дата регистрации: 13.05.2005
С первым запросом вроде как все ок. Он выполняется. Непонятности именно с курсором. Как выбрать из него не все поля, а часть. Просто я работаю не в фоксе, а подключаюсь к дбф через одбс драйвер.
Ratings: 0 negative/0 positive
Re: Выборка из курсора
AleksM

Сообщений: 17881
Дата регистрации: 11.11.2003
Ну так и перечисли в запросе выбираемые поля, а не через *.




------------------
Лучше переесть, чем недоспать.
Не спеши, а то успеешь.
Ratings: 0 negative/0 positive
Re: Выборка из курсора
jarad
Автор

Сообщений: 21
Дата регистрации: 13.05.2005
При попытке селекта из курсора вылазит: File 'tmpcur.dbf' does not exist.
"Заставить" при выгрузке в курсор ставать дбф-файлом можно?
Ratings: 0 negative/0 positive
Re: Выборка из курсора
AnatolyS

Сообщений: 4565
Откуда: Санкт-Петербург
Дата регистрации: 21.01.2002
ODBC курсоров не видит. Используй INTO TABLE. И вообще, сомнительный способ ты избрал.
Ratings: 0 negative/0 positive
Re: Выборка из курсора
jarad
Автор

Сообщений: 21
Дата регистрации: 13.05.2005
Моя версия ОДБС не поддержиавет подзапросы (селект фром селект). Приходиться изворачиваться через врем.таблицы.
Ratings: 0 negative/0 positive
Re: Выборка из курсора
AleksM

Сообщений: 17881
Дата регистрации: 11.11.2003
Вот NOFILTER первого запроса и должен это делать, ... но не делает.
Всетаки, крутани первый запрос без кириллицы.




------------------
Лучше переесть, чем недоспать.
Не спеши, а то успеешь.
Ratings: 0 negative/0 positive
Re: Выборка из курсора
AnatolyS

Сообщений: 4565
Откуда: Санкт-Петербург
Дата регистрации: 21.01.2002
NOFILTER ничего такого не гарантирует - результат может быть размещен и в памяти. NOFILTER отвязывает источник от результата - не более того. Но, как бы то ни было, курсор это внутренний объект VFP - его ODBC никогда не увидит. Поэтому, если используется отличное от фокса средство, то выполняйте первый запрос и уже на клиенте обрабатывайте сами полученные данные.



Отредактировано (13.05.05 15:11)


------------------
Мы будем ждать пока не кончится время
И встретимся после конца (с) A
Ratings: 0 negative/0 positive
Re: Выборка из курсора
jarad
Автор

Сообщений: 21
Дата регистрации: 13.05.2005
Отсутвие кириллиці ничего не изменяет.
Тогда, напрашивается еще один вариант решения.
Можно ли создать на Фоксе
CREATE TABLE #tmp_table (описание полей)
а потом в нее выгрузить резалт:
INSERT INTO #tmp_table (поля)
SELECT (поля) FROM ...
жизненная ли такая конструкция, есть ли понятие временной таблицы (#), для конктретного пользователя (видит только созавший юзер), и (##) глобальных временных таблиц (видят все)?
З.Ы. На клиенте обрабатывать слишком усложнено, так как необходимо делать несколько запросов к "результату" первого, группировать, суммировать, клиент не поддерживает СКЛ в чистом виде... после нескольких "ступеней" запросов к результатам запросов, можно будет получить результат "подходящий " для обработки на клиенте...
Ratings: 0 negative/0 positive
Re: Выборка из курсора
PaulWist

Сообщений: 14625
Дата регистрации: 01.04.2004
Вообще, создание временной таблицы - это выход из положения в Вашем случае, дело в том, что при создании таблицы она открывается в монопольном режиме и доступ к ней может быть осуществлен толко тем кто её создал, главное позаботиться об уникальном имени, поскольку в сети кто-то друго может попытаться выполнить ту же операцию и конечно удалить после работы с ней.

Для создания таблицы достаточно исвользовать синтаксис SELECT ... INTO TABLE TableName и в результате получиться новая таблица.




------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Выборка из курсора
AnatolyS

Сообщений: 4565
Откуда: Санкт-Петербург
Дата регистрации: 21.01.2002
A COM клиент поддерживает? В вашел случае, лучше всего написать трехзвенку - middle level оформить в виде COM компонента, написанного на фоксе, который и будет крутить ваши данные как вы захотите.
Ratings: 0 negative/0 positive
Re: Выборка из курсора
jarad
Автор

Сообщений: 21
Дата регистрации: 13.05.2005
Как я понимаю, если использовать SELECT ... INTO TABLE TableName, то CREATE TABLE делать не надо, и нужно только уникальное имя таблицы...
Использование шарпов (#) перед именем таблицы как в MS SQL (для пометки временности таблицы, и автомат.удалению после закрытия сессии), наверное (?) не реализовано...
Ratings: 0 negative/0 positive
Re: Выборка из курсора
jarad
Автор

Сообщений: 21
Дата регистрации: 13.05.2005
Ком держать будет, но делать СОМ-интерфейс в котором реализуется функционал Фокса, а потом из вызывать данные из аттрибутов этого СОМа...
Просто платформа Фокса у меня отсутвует начисто. А реализуемая задача, в последствии разойдется по иногородним филиалам, где из софта только и есть 1С (мой клиент) и ОДБС (драйвер)... Фокс "там" ставить никто не будет... (слава Богу, что хоть драйвер там нормально работает)...
Ratings: 0 negative/0 positive
Re: Выборка из курсора
PaulWist

Сообщений: 14625
Дата регистрации: 01.04.2004
Цитата:
Как я понимаю, если использовать SELECT ... INTO TABLE TableName, то CREATE TABLE делать не надо, и нужно только уникальное имя таблицы...

Правильно понимаете.

Цитата:
Использование шарпов (#) перед именем таблицы как в MS SQL (для пометки временности таблицы, и автомат.удалению после закрытия сессии), наверное (?) не реализовано...

И да и нет, потому что в среде фокса за временность таблицы отвечает конструкция SELECT ... INTO CURSOR и в этом случае др. приложение не может получить доступ к курсору и так же среда исполнения уничтожает такие обьекты.

Вообще говоря Вам уже посоветовали СОМ-сервер, тогда все примочки фокса были бы доступны, но Вы уже ответили на такое предложение.




------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Выборка из курсора
jarad
Автор

Сообщений: 21
Дата регистрации: 13.05.2005
Вопрос может немного не корректный, с фоксом не часто сталкивался но...
Можно ли реализовать этом СОМ-сервер в виде длл-ки например на фоксе (или еще на чем?).
Потом эту длл-ку, вернее аттрибуты и методы и нее использовать у себя на клиенте?
Ratings: 0 negative/0 positive
Re: Выборка из курсора
PaulWist

Сообщений: 14625
Дата регистрации: 01.04.2004
Да можно сделать и dll и exe СОМ сервер, только опять встанет вопрос о передаче результирующего набора данных, да и сам СОМ сервер написать будет не такая простая задача особенно в части передачи ошибки. Кстати Вы часто упоминали о MSSQL надо полагать, что БД 1С лежит на сервере, тогда есть вариант получать результат на сервере используя либо OPENROWSET или LinkedServer и затем уже на клиенте что-то с ним делать




------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Выборка из курсора
jarad
Автор

Сообщений: 21
Дата регистрации: 13.05.2005
В идеале, да БД лежит на MSSQL, но это у меня в центральном офисе, для доступа к MS SQL у "себя" все есть, и драйвера MS Visual FoxPro ODBC не используются, но задача, как я уже говорил для иногородних филиалов, там базы лежат в дбф, из-за этого и весь сыр-бор...
Ratings: 0 negative/0 positive
Re: Выборка из курсора
PaulWist

Сообщений: 14625
Дата регистрации: 01.04.2004
Тогда я не понимаю, Вы пишите приложение не на 1С, а на др. языке, тогда используйте 1С в качестве OLE сервера и получайте данные от него.




------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Выборка из курсора
jarad
Автор

Сообщений: 21
Дата регистрации: 13.05.2005
Я пишу "приложение" но в 1с, т.е. оно и "запускается" только из 1С.
Обращаюсь к дбф базе, но, т.к. 1с не позволяет к дбф базам обращаться sql-ом, использую драйвера ОДБС. Они позволяют делать простые запросы на sql, но мне нужна конструкция подзапросов. Обработать средствами 1С этот "простой запрос" практически не реально, я не могу средствами 1С делать sql запросы к резалтам, т.е. резалт должен быть или дбф-таблицей, или "чем-то" к чем можно обратиться sql.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 61 (Гостей: 61)

© 2000-2024 Fox Club 
Яндекс.Метрика