powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Проблемы с SQL
25 сообщений из 27, страница 1 из 2
Проблемы с SQL
    #33062607
Всем доброго времени суток !

в методе я использую вот этот код:
SELECT DISTINCT ;
a.ID, ;
a.QArr, ;
a.Date, ;
a.Type, ;
a.Name, ;
a.Price, ;
a.MPrice, ;
a.SPrice, ;
SUM(b.R_Col) AS QSale ;
FROM tmp2 a , &_Dir.re b ;
WHERE a.ID=b.r_cod AND b.R_dat>=_Date1 AND b.R_dat<=_Date2 ;
GROUP BY a.ID ;
INTO TABLE tmp3

В Фоксе этот СКЛЬ срабатывает красиво, но в EXE он работать не хочет, - и никаких сообщений об ошибках нет.

Кто подскажет в чем же дело ?
...
Рейтинг: 0 / 0
Проблемы с SQL
    #33062656
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а почему решили что не срабатывает

SELECT DISTINCT ;
a.ID, ;
a.QArr, ;
a.Date, ;
a.Type, ;
a.Name, ;
a.Price, ;
a.MPrice, ;
a.SPrice, ;
SUM(b.R_Col) AS QSale ;
FROM tmp2 a , & _Dir.re b ;
WHERE a.ID=b.r_cod AND b.R_dat>=_Date1 AND b.R_dat<=_Date2 ;
GROUP BY 1,2,3,4,5,6,7,8;
INTO TABLE tmp3

что за штука ? не описка
...
Рейтинг: 0 / 0
Проблемы с SQL
    #33062665
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я про макроподстановку если не описка то скорее всего не правильно надо по другому кажеться точечку еще добавить или в переменную загнать
...
Рейтинг: 0 / 0
Проблемы с SQL
    #33062695
leafа почему решили что не срабатывает

- потому, как следующий запрос использует этот tmp3, а его физически нет.

теперь макро
- думаю, он здесь нипричем. Вот пример кода, который работает, как швейцарские часы:

SELECT ;
a.Code AS ID, ;
FROM &_Dir.FDB a , tmp1 b ;
WHERE a.Code=b.ID ;
GROUP BY a.N_Cod ;
INTO TABLE tmp2
...
Рейтинг: 0 / 0
Проблемы с SQL
    #33062709
...пардон !
опечатка:
Group By a.N_Cod - тут лишнее )
...
Рейтинг: 0 / 0
Проблемы с SQL
    #33062740
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
его не будет физически если вы его физически закроете
если есть ошибки в запросе то будет ругань
вообще макро в полном синтаксисе оканчиваеться точкой вот воши точки мне и не внушают доверия как осторожному человеку точнее их количество
а так я больше ничего плохого не вижу за исключением не правильной группировки но в фоксе 6 или 7 это не повод
поставте сразу после запроса
browse normal
тогда посмотрим только сразу следующим оператором
...
Рейтинг: 0 / 0
Проблемы с SQL
    #33062777
to leaf:

ну хоть в области то он должет быть )
а его и физ нет и в области он не висит - функцией dbf() проверял.
а физически нет, потому как следующий запрос ругается, потому что не находит файл tmp3.

Поставил Browse Normal - в итоге показывает файл, который был сформирован до этого.
...
Рейтинг: 0 / 0
Проблемы с SQL
    #33062817
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
уберите макро и не мучтесь остальное на вскидку правильно пропишите явно таблицу и посмотрим
...
Рейтинг: 0 / 0
Проблемы с SQL
    #33062822
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если &_Dir.re b.
...
Рейтинг: 0 / 0
Проблемы с SQL
    #33062825
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
&_Dir.re.
...
Рейтинг: 0 / 0
Проблемы с SQL
    #33062889
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
leafа если &_Dir.re b.
Нет, не так.

Попробуйте:
Padre = '20'
_Dir = 'Pad'
?&_Dir.re

Так что все сработает, как надо, если именно так было задумано ;-)
...
Рейтинг: 0 / 0
Проблемы с SQL
    #33062896
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуйте также

Попробуйте:
create cursor pad (re c(2))
insert into pad values ('30')
_Dir = 'Pad'
?&_Dir..re

;-)
...
Рейтинг: 0 / 0
Проблемы с SQL
    #33062906
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще Вариант:

Попробуйте:
create cursor pad (re c(2))
insert into pad values ('ss')
ss = '40'
_Dir = 'Pad'
?&_Dir->re.
...
Рейтинг: 0 / 0
Проблемы с SQL
    #33062911
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон, здесь заврался. имел в виду:

create cursor pad (re c(2))
insert into pad values ('ss')
ss = '40'
?&Pad->re.
...
Рейтинг: 0 / 0
Проблемы с SQL
    #33063041
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
урри тебе не штанга там на голову случайно упала
шутка
просто фильм один вспомнил
...
Рейтинг: 0 / 0
Проблемы с SQL
    #33063058
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
;-)))
...
Рейтинг: 0 / 0
Проблемы с SQL
    #33063675
golsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно неработающий select оформлен как строка (т.е &_Dir.re внутри кавычек и не воспринимается как макро), тогда надо
'select ... ' + &_Dir.re b + 'where ... ' или 'select ... ' + _Dir.re b + 'where ... '
...
Рейтинг: 0 / 0
Проблемы с SQL
    #33065650
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Евгений!

И в exe и в среде исполняется один и тот-же программный модуль, или ты просто выдернул SQL из программы и проверил его?
Просто иногда бывает, что в запарке забывают про особенности комментирования программ
Скажем эта конструкция исполнит запрос
Код: plaintext
1.
* Это коммент
SELECT...
А вот эта - уже нет!
Код: plaintext
1.
* Это коммент ;
SELECT...
Разница лишь в знаке "продолжения" команды - причём вплоть до VFP8 синтаксическая подсветка редактора кода нагло врала - создавалось впечатление что всё в порядке :( Сейчас с этим получше, хотя подсветка изредка и чудит - особенно при скроллинге мышой :(

Кроме того для проверки ОБЯЗАТЕЛЬНО нужно знать содержимое переменной _Dir - с точностью до символа! Может там путь с пробелами (это естественно развалит SQL команду, хотя по идее и ошибку тогда должно показать).
P.S. Про логическую некорректность этого запроса тебе уже намекнули - В VFP8 и старше он вызовет синтаксическую ошибку - нельзя группировать только по части "свободных" полей - либо группируй по всем свободным, либо все кроме группировочного заворачивай в агрегирующие функции (например MAX() или MIN()).

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Проблемы с SQL
    #33069815
to Golsa :
to Urri:

макро тут ни причем - см выше.
я давно дружу с макро. )

to Igor K:

выдергивать..зачем ?! ..просто иногда я пишу на SQL'е )

комменты: я понял, что по Вашей версии СУБД выполняла соседний закоментированный код.. - Я правильно понял?
Рядом нет комментариев.

Содержимое проверял дебуггером - все правильно.


В общем, загвоздка была в переменных : _Date1 и _Date2.
в дебугере они типа Date, впрочем, как само поле....НО!!!
не тут то было.
в общем, причина была в лишней функции - CTOD()..но, Фокс ничего не сказал.
...
Рейтинг: 0 / 0
Проблемы с SQL
    #33069863
если подробно:

в форме в INIT вписал это ...Text1.VALUE=CTOD(DATE())
потом в методе _DATE1=CTOD(...Text1.Value) и к тому ещё в свойствах Text1 вписал тип D
...
Рейтинг: 0 / 0
Проблемы с SQL
    #33069891
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну Вам и сказали что запрос правильный ... в основном
...
Рейтинг: 0 / 0
Проблемы с SQL
    #33070389
to leaf:

просто в процессе "общения" с фоксом создался такой стереотип..типа, о парадоксальных ошибках.. )
вот, например, только сегодня убил час-два времени на это:

SELECT 0
USE &_Dir.DB SHARED ALIAS DB - это я в ИНИТ пишу.

потом, когда в методе обращаюсь к DB
SELECT DB ..он ругается - алиас не найден.

а, если по-новой создавать - не хочет ! говорит, что такой уже есть..
но командой SET его не показывает.
пришлось тогда вот это писать....после повторного обращения в методе :

SELECT 0
USE &_Dir.DB SHARED AGAIN
...
Рейтинг: 0 / 0
Проблемы с SQL
    #33070477
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну что вам сказать
порядок основа математики
и лучше попроще без сложностей не к добру это
...
Рейтинг: 0 / 0
Проблемы с SQL
    #33070912
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бунин Евгенийto leaf:

просто в процессе "общения" с фоксом создался такой стереотип..типа, о парадоксальных ошибках.. )
вот, например, только сегодня убил час-два времени на это:

SELECT 0
USE &_Dir.DB SHARED ALIAS DB - это я в ИНИТ пишу.

потом, когда в методе обращаюсь к DB
SELECT DB ..он ругается - алиас не найден.

а, если по-новой создавать - не хочет ! говорит, что такой уже есть..
но командой SET его не показывает.
пришлось тогда вот это писать....после повторного обращения в методе :

SELECT 0
USE &_Dir.DB SHARED AGAINКстати, я припоминаю, что были у одной моей коллеги в FPD проблемы, когда она писала в запросах нечто вроде
Код: plaintext
select * from c:\blabla\db.dbf
а потом пыталась выполнить такой запрос по-новой (перезапросить). Дело в том, что таким образом описанная таблица открывалась (а ведь исходные таблицы тоже открываются) с совершенно произвольным (кажется, буквенным) алиасом. И при перезапросе фокс эту табличку хочет в другой раз открыть, но уже с другим алиасом (тоже однобуквенным). Но AGAIN, видимо, select не умеет делать. Может, у Вас нечто похожее является причиной?
Ну а вообще вышеописанную конструкцию надо заменять или на
Код: plaintext
1.
set path to c:\blabla
select * from db
или на
Код: plaintext
1.
use c:\blabla\db.dbf in  0 
select * from db
явное открытие - это самое лучшее.
...
Рейтинг: 0 / 0
Проблемы с SQL
    #33070923
Данилов Юрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Urri
Странное предположение: select не умеет делать again.
Запускаем фокс.
Выполняем
Код: plaintext
1.
select * from txxx
set
Видим открытую TXXX и открытый курсор Query.
Еще раз выполняем
Код: plaintext
1.
select * from txxx
set
Видим то же самое. VFP 3.0
Посвежее просто под руками нет.
SELECT открывает алиас, если он еще не открыт, а если уже есть открытый с таким именем, просто использует его.
Вот другие проблемы могут возникнуть. Вернее, сами их можем себе организовать. Допустим, нашу TXXX.DBF нам присылают в виде 10042005.DBF
Код: plaintext
1.
USE  10042005 .DBF
SET
И что мы видим, о ужас - она открылась с алиасом A. Ага.
Код: plaintext
1.
2.
3.
USE in A
select  4   && или D, как кому нравится
USE  10042005 .DBF
SET
Не так страшно, теперь алиас D - это просто work area. Ну хорошо, буквы были зарезервированы только на первые 10 work area. Продолжаем эту игру:
Код: plaintext
1.
2.
use in D
select  11 
use c:\fok\tch\ 10042005 .dbf
О как! W11! Стало быть, не стоит обзывать свои DBF Wnnn... :-)

2 Бунин Евгений
По поводу AGAIN - может быть, сделать процедуру для открытия DBF с проверкой:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
function MyOpen
Parameters Alias, Order
local clOrder
clOrder = iif(parameters()< 2 ,'','ORDER '+m.Order)
if used(m.Alias)
  select (m.Alias)
  set order to &clOrder
else
  if file(m.Alias+'.DBF')  && можно еще параноидально проверять и наличие CDX
    select  0 
    use (m.Alias) &clOrder
  else
    =messageb('Плохо дело - файл '+m.Alias+'.DBF куда-то подевался...') 
  endif
endif
и обращаться do MyOpen with "TXXX" [, "TXXXIDX"]
где TXXX - имя таблицы, TXXXIDX - опционально имя тэга, если надо включить индекс
Естественно, схема упрощена - потом захочется открывать не только .dbf, но и, напр., .scx, упрятать обработку ошибки в общий обработчик ошибок задачи - дык фантазия безгранична, тогда проверять, есть ли в значении Alias точка и т.д. и т.п.
Не идеально с точки зрения лишней проверки на существование файла, зато универсально. Когда-то на о-очень медленных винтах и процессорах во времена FoxBase 1.x + DOS 3.30 этим стоило озаботиться, сейчас ИМХО уже наплевать при огромадных размерах файлового кэша ОС. Типа я надеюсь, что ОС каталоги тоже кэширует :-)
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Проблемы с SQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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