Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Проблема с WHERE / 15 сообщений из 15, страница 1 из 1
16.02.2005, 14:00
    #32918519
w3d
w3d
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с WHERE
Есть такой код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
*** отбираем совместимые муфты ***
SELECT chert_txt FROM muft_sovm where dvig_tipor like "%"+dt+"%" INTO CURSOR fff
*** формирование выражения фильтра ***
SELECT fff
GO TOP 
ff="mufty.chert_txt=" + "'" + alltrim(fff.chert_txt) + "'"
x=RECCOUNT()
FOR i= 2  TO x
GO i
ff=ff + " OR " + "mufty.chert_txt=" + "'" + alltrim(fff.chert_txt) + "'"
NEXT 
*tt="MUFTY.CHERT_TXT='М140.09' OR  MUFTY.CHERT_TXT='М140.10' OR MUFTY.CHERT_TXT='М140.12' OR MUFTY.CHERT_TXT='М140.13' OR MUFTY.CHERT_TXT='М190.24' OR MUFTY.CHERT_TXT='М140.61'"
SELECT * ;
FROM mufty ;
WHERE &ff ;
INTO CURSOR mmm
browse

если я присваиваю выражение (где закомментировано) то все проходит нормально. В чем же дело?
...
Рейтинг: 0 / 0
16.02.2005, 14:04
    #32918537
w3d
w3d
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с WHERE
я догадываюсь, что можно сделать требуемое без таких извратов и средствами SQL... но не догадываюсь как
...
Рейтинг: 0 / 0
16.02.2005, 14:37
    #32918628
Проблема с WHERE
Код: plaintext
1.
2.
3.
4.
SELECT * ;
FROM mufty ;
WHERE mufty.chert_txt in (select alltrim(fff.chert_txt) from fff) ;
INTO CURSOR mmm
...
Рейтинг: 0 / 0
16.02.2005, 14:42
    #32918649
w3d
w3d
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с WHERE
Не-а, ничего не выбирает (пустой курсор получается).
если сделать так:
Код: plaintext
1.
2.
3.
SELECT * ;
FROM mufty ;
WHERE mufty.chert_txt in ('М40.09', 'М40.12') ;
INTO CURSOR mmm

то все хорошо.
...
Рейтинг: 0 / 0
16.02.2005, 14:47
    #32918666
w3d
w3d
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с WHERE
и вот так тоже работает
Код: plaintext
1.
2.
3.
4.
ff="'М40.09', 'М140.12'"
SELECT * ;
FROM mufty ;
WHERE mufty.chert_txt in (&ff) ;
INTO CURSOR mmm
...
Рейтинг: 0 / 0
16.02.2005, 14:49
    #32918675
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с WHERE
А в чем проблема-то? Ты проверил, какое значение принимает переменная m.ff непосредственно перед макроподстановкой? Может в ней вообще ничего нет (в курсоре fff нет записей).

И еще, брось ты замашки от VB. Для сканирования записей таблицы есть команда SCAN...ENDSCAN и не надо выдумывать себе приключений через GO.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
SELECT chert_txt ;
FROM muft_sovm ;
WHERE dvig_tipor like "%"+dt+"%" ;
INTO CURSOR fff NOFILTER

*** формирование выражения фильтра ***
LOCAL lcFiltr
lcFiltr = ''
SELECT fff
SCAN
	lcFiltr = m.lcFiltr + " OR mufty.chert_txt=["+fff.chert_txt+"]"
ENDSCAN

* Отсекаем лишний OR
lcFiltr = SubStr(m.lcFiltr, 5 )

* Для отладки, смотрим что за условие получилось
MessageBox(m.lcFiltr)

* Собственно запрос
SELECT * ;
FROM mufty ;
WHERE &lcFiltr ;
INTO CURSOR mmm

BROWSE

Если же делать одним запросом, то будет так:

Код: plaintext
1.
2.
3.
4.
SELECT mufty.* ;
FROM mufty ;
INNER JOIN muft_sovm ON mufty.chert_txt = muft_sovm.chert_txt
WHERE muft_sovm.dvig_tipor like "%"+dt+"%" ;
INTO CURSOR mmm
...
Рейтинг: 0 / 0
16.02.2005, 14:56
    #32918699
w3d
w3d
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с WHERE
ВладимирМА в чем проблема-то?
Проблема в том, что не работает!
Ни первый, ни второй ваш вариант.
messagebox выдает строку на пол-экрана и ... курсор пустой.
...
Рейтинг: 0 / 0
16.02.2005, 15:05
    #32918730
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с WHERE
Дай команду REINDEX на таблицу mufty.

Если не поможет, то выложи эти таблички с парой строк (целиком не надо).

Да, на всякий случай.

-) Длина одной строки в макроподстановке (содержимое переменной lcFilter) не должна превышать 8,192 символов
...
Рейтинг: 0 / 0
16.02.2005, 15:06
    #32918733
w3d
w3d
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с WHERE
Если я делаю так:
Код: plaintext
1.
2.
3.
4.
ff="'М40.09'" + "," +"'М140.12'"
SELECT * ;
FROM mufty ;
WHERE mufty.chert_txt in (&ff) ;
INTO CURSOR mmm
все работает

а когда то же присваивание аа делаю в цикле, то не работает.
...
Рейтинг: 0 / 0
16.02.2005, 15:26
    #32918785
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с WHERE
(вырезано цензурой)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
create cursor test1 (test1 C( 10 ))
insert into test1 (test1) values ('один')
insert into test1 (test1) values ('два')
insert into test1 (test1) values ('три')
create cursor test2 (test1 C( 10 ))
insert into test2 (test1) values ('один')
insert into test2 (test1) values ('два')

LOCAL lcFilter
lcFilter = ''
select test2
SCAN
	lcFilter = m.lcFilter + " OR test1.test1=["+test2.test1+"]"
ENDSCAN

lcFilter = SubStr(m.lcFilter, 5 )

select * from test1 where &lcFilter

Ищи ошибку у себя.
...
Рейтинг: 0 / 0
17.02.2005, 02:06
    #32919807
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с WHERE
Hi w3d!

Альтернативно к тому что Владимир предложил:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
CREATE CURSOR muft_sovm (chert_txt C( 10 ), dvig_tipor C( 10 ))
INSERT INTO muft_sovm (chert_txt, dvig_tipor) ;
    VALUES ("10.01", "asdf")
INSERT INTO muft_sovm (chert_txt, dvig_tipor) ;
    VALUES ("10.02", "sdfg")
INSERT INTO muft_sovm (chert_txt, dvig_tipor) ;
    VALUES ("10.03", "dfg")
CREATE CURSOR mufty (chert_txt C( 10 ), other C( 10 ))
INSERT INTO mufty (chert_txt, other) ;
    VALUES ("10.01", "1111")
INSERT INTO mufty (chert_txt, other) ;
    VALUES ("10.02", "2222")
INSERT INTO mufty (chert_txt, other) ;
    VALUES ("10.03", "333")
INSERT INTO mufty (chert_txt, other) ;
    VALUES ("10.04", "444")
INSERT INTO mufty (chert_txt, other) ;
    VALUES ("10.05", "555")
dt = "sd"
SELECT * ;
    FROM mufty ;
    WHERE chert_txt IN ;
        (SELECT chert_txt ;
            FROM muft_sovm ;
            WHERE dvig_tipor LIKE "%"+dt+"%") ;
    INTO CURSOR mmm
BROWSE

Ещё скажи что и это не работает, или "не так" работает :)

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
17.02.2005, 05:54
    #32919849
w3d
w3d
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с WHERE
Igor Korolyov
Hi w3d!

Альтернативно к тому что Владимир предложил:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
CREATE CURSOR muft_sovm (chert_txt C( 10 ), dvig_tipor C( 10 ))
INSERT INTO muft_sovm (chert_txt, dvig_tipor) ;
    VALUES ("10.01", "asdf")
INSERT INTO muft_sovm (chert_txt, dvig_tipor) ;
    VALUES ("10.02", "sdfg")
INSERT INTO muft_sovm (chert_txt, dvig_tipor) ;
    VALUES ("10.03", "dfg")
CREATE CURSOR mufty (chert_txt C( 10 ), other C( 10 ))
INSERT INTO mufty (chert_txt, other) ;
    VALUES ("10.01", "1111")
INSERT INTO mufty (chert_txt, other) ;
    VALUES ("10.02", "2222")
INSERT INTO mufty (chert_txt, other) ;
    VALUES ("10.03", "333")
INSERT INTO mufty (chert_txt, other) ;
    VALUES ("10.04", "444")
INSERT INTO mufty (chert_txt, other) ;
    VALUES ("10.05", "555")
dt = "sd"
SELECT * ;
    FROM mufty ;
    WHERE chert_txt IN ;
        (SELECT chert_txt ;
            FROM muft_sovm ;
            WHERE dvig_tipor LIKE "%"+dt+"%") ;
    INTO CURSOR mmm
BROWSE

Ещё скажи что и это не работает, или "не так" работает :)


ЭТОТ код работает. Если я выкидываю создание курсоров и натравливаю его на свою базу - не работает. Прилагаю базу и форму.
...
Рейтинг: 0 / 0
17.02.2005, 06:15
    #32919855
w3d
w3d
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с WHERE
Этот запрос работает:
Код: plaintext
1.
2.
3.
dt="160S2"
SELECT chert_txt ;
   FROM muft_sovm ;
   WHERE dvig_tipor LIKE "%"+dt+"%"

Этот запрос тоже работает:
Код: plaintext
1.
2.
3.
4.
SELECT * ;
    FROM mufty ;
    WHERE chert_txt IN ;
        ("М140.09", "М140.10", "М140.12", "М140.13") ;
    INTO CURSOR mmm

А этот - не работает:
Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT * ;
    FROM mufty ;
    WHERE chert_txt IN ;
        (SELECT chert_txt ;
            FROM muft_sovm ;
            WHERE dvig_tipor LIKE "%"+dt+%") ;
    INTO CURSOR mmm
...
Рейтинг: 0 / 0
17.02.2005, 06:18
    #32919857
w3d
w3d
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с WHERE
В последнем запросе кавычки забыл напечатать, должно быть:
Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT * ;
    FROM mufty ;
    WHERE chert_txt IN ;
        (SELECT chert_txt ;
            FROM muft_sovm ;
            WHERE dvig_tipor LIKE "%"+dt+"%") ;
    INTO CURSOR mmm
...
Рейтинг: 0 / 0
17.02.2005, 09:26
    #32920034
w3d
w3d
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с WHERE
Уже разобрался с помощью добрых людей :)).
В таблицах были перемешаны русские и английские буквы.

Отдельное спасибо за пример, как надо делать SQL-запросы
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Проблема с WHERE / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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