Выборка из курсора | |
---|---|
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. Можно ли проверить записало ли курсор в дбф, или "заставить" записать, чтобы можно было нормальным селектом обратиться к курсору (т.е. результату первого запроса) |
Re: Выборка из курсора | |
---|---|
AleksM Сообщений: 17881 Дата регистрации: 11.11.2003 |
Вроде все на месте, меня вот только русские имена настораживают.
------------------ Лучше переесть, чем недоспать. Не спеши, а то успеешь. |
Re: Выборка из курсора | |
---|---|
jarad Автор Сообщений: 21 Дата регистрации: 13.05.2005 |
С первым запросом вроде как все ок. Он выполняется. Непонятности именно с курсором. Как выбрать из него не все поля, а часть. Просто я работаю не в фоксе, а подключаюсь к дбф через одбс драйвер.
|
Re: Выборка из курсора | |
---|---|
AleksM Сообщений: 17881 Дата регистрации: 11.11.2003 |
Ну так и перечисли в запросе выбираемые поля, а не через *.
------------------ Лучше переесть, чем недоспать. Не спеши, а то успеешь. |
Re: Выборка из курсора | |
---|---|
jarad Автор Сообщений: 21 Дата регистрации: 13.05.2005 |
При попытке селекта из курсора вылазит: File 'tmpcur.dbf' does not exist.
"Заставить" при выгрузке в курсор ставать дбф-файлом можно? |
Re: Выборка из курсора | |
---|---|
AnatolyS Сообщений: 4565 Откуда: Санкт-Петербург Дата регистрации: 21.01.2002 |
ODBC курсоров не видит. Используй INTO TABLE. И вообще, сомнительный способ ты избрал.
|
Re: Выборка из курсора | |
---|---|
jarad Автор Сообщений: 21 Дата регистрации: 13.05.2005 |
Моя версия ОДБС не поддержиавет подзапросы (селект фром селект). Приходиться изворачиваться через врем.таблицы.
|
Re: Выборка из курсора | |
---|---|
AleksM Сообщений: 17881 Дата регистрации: 11.11.2003 |
Вот NOFILTER первого запроса и должен это делать, ... но не делает.
Всетаки, крутани первый запрос без кириллицы. ------------------ Лучше переесть, чем недоспать. Не спеши, а то успеешь. |
Re: Выборка из курсора | |
---|---|
AnatolyS Сообщений: 4565 Откуда: Санкт-Петербург Дата регистрации: 21.01.2002 |
NOFILTER ничего такого не гарантирует - результат может быть размещен и в памяти. NOFILTER отвязывает источник от результата - не более того. Но, как бы то ни было, курсор это внутренний объект VFP - его ODBC никогда не увидит. Поэтому, если используется отличное от фокса средство, то выполняйте первый запрос и уже на клиенте обрабатывайте сами полученные данные.
Отредактировано (13.05.05 15:11) ------------------ Мы будем ждать пока не кончится время И встретимся после конца (с) A |
Re: Выборка из курсора | |
---|---|
jarad Автор Сообщений: 21 Дата регистрации: 13.05.2005 |
Отсутвие кириллиці ничего не изменяет.
Тогда, напрашивается еще один вариант решения. Можно ли создать на Фоксе CREATE TABLE #tmp_table (описание полей) а потом в нее выгрузить резалт: INSERT INTO #tmp_table (поля) SELECT (поля) FROM ... жизненная ли такая конструкция, есть ли понятие временной таблицы (#), для конктретного пользователя (видит только созавший юзер), и (##) глобальных временных таблиц (видят все)? З.Ы. На клиенте обрабатывать слишком усложнено, так как необходимо делать несколько запросов к "результату" первого, группировать, суммировать, клиент не поддерживает СКЛ в чистом виде... после нескольких "ступеней" запросов к результатам запросов, можно будет получить результат "подходящий " для обработки на клиенте... |
Re: Выборка из курсора | |
---|---|
PaulWist Сообщений: 14625 Дата регистрации: 01.04.2004 |
Вообще, создание временной таблицы - это выход из положения в Вашем случае, дело в том, что при создании таблицы она открывается в монопольном режиме и доступ к ней может быть осуществлен толко тем кто её создал, главное позаботиться об уникальном имени, поскольку в сети кто-то друго может попытаться выполнить ту же операцию и конечно удалить после работы с ней.
Для создания таблицы достаточно исвользовать синтаксис SELECT ... INTO TABLE TableName и в результате получиться новая таблица. ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Выборка из курсора | |
---|---|
AnatolyS Сообщений: 4565 Откуда: Санкт-Петербург Дата регистрации: 21.01.2002 |
A COM клиент поддерживает? В вашел случае, лучше всего написать трехзвенку - middle level оформить в виде COM компонента, написанного на фоксе, который и будет крутить ваши данные как вы захотите.
|
Re: Выборка из курсора | |
---|---|
jarad Автор Сообщений: 21 Дата регистрации: 13.05.2005 |
Как я понимаю, если использовать SELECT ... INTO TABLE TableName, то CREATE TABLE делать не надо, и нужно только уникальное имя таблицы...
Использование шарпов (#) перед именем таблицы как в MS SQL (для пометки временности таблицы, и автомат.удалению после закрытия сессии), наверное (?) не реализовано... |
Re: Выборка из курсора | |
---|---|
jarad Автор Сообщений: 21 Дата регистрации: 13.05.2005 |
Ком держать будет, но делать СОМ-интерфейс в котором реализуется функционал Фокса, а потом из вызывать данные из аттрибутов этого СОМа...
Просто платформа Фокса у меня отсутвует начисто. А реализуемая задача, в последствии разойдется по иногородним филиалам, где из софта только и есть 1С (мой клиент) и ОДБС (драйвер)... Фокс "там" ставить никто не будет... (слава Богу, что хоть драйвер там нормально работает)... |
Re: Выборка из курсора | |
---|---|
PaulWist Сообщений: 14625 Дата регистрации: 01.04.2004 |
Цитата: Правильно понимаете. Цитата: И да и нет, потому что в среде фокса за временность таблицы отвечает конструкция SELECT ... INTO CURSOR и в этом случае др. приложение не может получить доступ к курсору и так же среда исполнения уничтожает такие обьекты. Вообще говоря Вам уже посоветовали СОМ-сервер, тогда все примочки фокса были бы доступны, но Вы уже ответили на такое предложение. ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Выборка из курсора | |
---|---|
jarad Автор Сообщений: 21 Дата регистрации: 13.05.2005 |
Вопрос может немного не корректный, с фоксом не часто сталкивался но...
Можно ли реализовать этом СОМ-сервер в виде длл-ки например на фоксе (или еще на чем?). Потом эту длл-ку, вернее аттрибуты и методы и нее использовать у себя на клиенте? |
Re: Выборка из курсора | |
---|---|
PaulWist Сообщений: 14625 Дата регистрации: 01.04.2004 |
Да можно сделать и dll и exe СОМ сервер, только опять встанет вопрос о передаче результирующего набора данных, да и сам СОМ сервер написать будет не такая простая задача особенно в части передачи ошибки. Кстати Вы часто упоминали о MSSQL надо полагать, что БД 1С лежит на сервере, тогда есть вариант получать результат на сервере используя либо OPENROWSET или LinkedServer и затем уже на клиенте что-то с ним делать
------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Выборка из курсора | |
---|---|
jarad Автор Сообщений: 21 Дата регистрации: 13.05.2005 |
В идеале, да БД лежит на MSSQL, но это у меня в центральном офисе, для доступа к MS SQL у "себя" все есть, и драйвера MS Visual FoxPro ODBC не используются, но задача, как я уже говорил для иногородних филиалов, там базы лежат в дбф, из-за этого и весь сыр-бор...
|
Re: Выборка из курсора | |
---|---|
PaulWist Сообщений: 14625 Дата регистрации: 01.04.2004 |
Тогда я не понимаю, Вы пишите приложение не на 1С, а на др. языке, тогда используйте 1С в качестве OLE сервера и получайте данные от него.
------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Выборка из курсора | |
---|---|
jarad Автор Сообщений: 21 Дата регистрации: 13.05.2005 |
Я пишу "приложение" но в 1с, т.е. оно и "запускается" только из 1С.
Обращаюсь к дбф базе, но, т.к. 1с не позволяет к дбф базам обращаться sql-ом, использую драйвера ОДБС. Они позволяют делать простые запросы на sql, но мне нужна конструкция подзапросов. Обработать средствами 1С этот "простой запрос" практически не реально, я не могу средствами 1С делать sql запросы к резалтам, т.е. резалт должен быть или дбф-таблицей, или "чем-то" к чем можно обратиться sql. |
© 2000-2024 Fox Club  |