powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Проблема с WHERE
15 сообщений из 15, страница 1 из 1
Проблема с WHERE
    #32918519
w3d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такой код:
Код: 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
Проблема с WHERE
    #32918537
w3d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я догадываюсь, что можно сделать требуемое без таких извратов и средствами SQL... но не догадываюсь как
...
Рейтинг: 0 / 0
Проблема с WHERE
    #32918628
Код: 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
Проблема с WHERE
    #32918649
w3d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не-а, ничего не выбирает (пустой курсор получается).
если сделать так:
Код: plaintext
1.
2.
3.
SELECT * ;
FROM mufty ;
WHERE mufty.chert_txt in ('М40.09', 'М40.12') ;
INTO CURSOR mmm

то все хорошо.
...
Рейтинг: 0 / 0
Проблема с WHERE
    #32918666
w3d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и вот так тоже работает
Код: plaintext
1.
2.
3.
4.
ff="'М40.09', 'М140.12'"
SELECT * ;
FROM mufty ;
WHERE mufty.chert_txt in (&ff) ;
INTO CURSOR mmm
...
Рейтинг: 0 / 0
Проблема с WHERE
    #32918675
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в чем проблема-то? Ты проверил, какое значение принимает переменная 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
Проблема с WHERE
    #32918699
w3d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМА в чем проблема-то?
Проблема в том, что не работает!
Ни первый, ни второй ваш вариант.
messagebox выдает строку на пол-экрана и ... курсор пустой.
...
Рейтинг: 0 / 0
Проблема с WHERE
    #32918730
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дай команду REINDEX на таблицу mufty.

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

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

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

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

Код: 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
Проблема с WHERE
    #32919807
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

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

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Проблема с WHERE
    #32919849
w3d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Проблема с WHERE
    #32919855
w3d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Этот запрос работает:
Код: 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
Проблема с WHERE
    #32919857
w3d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В последнем запросе кавычки забыл напечатать, должно быть:
Код: 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
Проблема с WHERE
    #32920034
w3d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уже разобрался с помощью добрых людей :)).
В таблицах были перемешаны русские и английские буквы.

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


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