powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как найти страну из 3х таблиц?
25 сообщений из 25, страница 1 из 1
Как найти страну из 3х таблиц?
    #39288846
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В справочнике клиентов "KLIENT" имеются поля: kl_kod - код клиента, kl_kodstr - код страны клиента, _kl_grajd - гражданство клиента и т.д.
В справочнике счетов "dbmaslc" есть поле ml_kodkl и т.д.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
IF dbmaslc.ml_kodkl<>1
   IF !USED('KLIENT')
       ok=oODED.OpenKlient('KLIENT') // Открываю справочника "Клиенты"
   ENDIF 
   SELECT klient // Справочник "Клиенты"
   LOCATE FOR kl_kod=dbmaslc.ml_kodkl // Ищу по коду клиента из "dbmaslc" в справочнике "klient"
      IF FOUND() // Если нашел
         IF !USED('SPRSTR')
             ok=oODED.OpenSprStr('SPRSTR') // Открываю справочника "Страны"
         ENDIF 
         SELECT SPRSTR
         LOCATE FOR SPRSTR.s_sfr=VAL(klient._kl_grajd) OR SPRSTR.s_kod=klient.kl_kodstr // Ищу по "klient._kl_grajd" и "klient.kl_kodstr" в справочнике "SPRSTR"
            IF FOUND() //Если нашел
               IF s_off=1 OR s_fatf=1 OR s_rgtf=1 OR s_oon=1 OR s_bazel=1 //Поля в справочнике "Страны" - SPRSTR
	            IF Thisformset.cl_tip2=0
                        Thisformset.cl_tip2=50
                    ENDIF 
               ENDIF
            ENDIF
      ENDIF
ENDIF



Помогите разобраться.
...
Рейтинг: 0 / 0
Как найти страну из 3х таблиц?
    #39288849
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ularsoftПомогите разобраться.42
...
Рейтинг: 0 / 0
Как найти страну из 3х таблиц?
    #39288850
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если в справочнике "SPRSTR", s_off=1 или s_fatf=1 или s_rgtf=1 или s_oon=1 или s_bazel=1, тогда Thisformset.cl_tip2=50, иначе Thisformset.cl_tip2=0 должен быть.
...
Рейтинг: 0 / 0
Как найти страну из 3х таблиц?
    #39288854
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir42

Не понял
...
Рейтинг: 0 / 0
Как найти страну из 3х таблиц?
    #39288855
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
т.е. я правильно делаю?
...
Рейтинг: 0 / 0
Как найти страну из 3х таблиц?
    #39288878
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ularsofttanglir42

Не понял
И tanglir не понял, и я не понял.

ularsoftЕсли в справочнике "SPRSTR", s_off=1 или s_fatf=1 или s_rgtf=1 или s_oon=1 или s_bazel=1, тогда Thisformset.cl_tip2=50, иначе Thisformset.cl_tip2=0 должен быть.
ularsoftт.е. я правильно делаю?
Это наверно правильно

сомнения вызывает эта строчка
Код: sql
1.
LOCATE FOR SPRSTR.s_sfr=VAL(klient._kl_grajd) OR SPRSTR.s_kod=klient.kl_kodstr


что она означает?
...
Рейтинг: 0 / 0
Как найти страну из 3х таблиц?
    #39288879
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ularsoft иначе Thisformset.cl_tip2=0 должен быть.
Если там изначально не 0, то в ноль не установит твой код, добавь в начало
Код: sql
1.
Thisformset.cl_tip2=0
...
Рейтинг: 0 / 0
Как найти страну из 3х таблиц?
    #39288902
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TСомнения вызывает эта строчка
Код: sql
1.
LOCATE FOR SPRSTR.s_sfr=VAL(klient._kl_grajd) OR SPRSTR.s_kod=klient.kl_kodstr


Что она означает?

Тут я пытаюсь сравнить "_kl_grajd" - гражданство клиента с полем "s_sfr" из "SPRSTR", или с "kl_kodstr" - код страны клиента. Т.е. у клиента данные поля могут не совпадать. Н-р, kl_kodstr = 1100 - РФ, _kl_grajd = 188 - Коста-Рика.

Если в "SPRSTR" у Коста-Рики одно из полей s_off=1 или s_fatf=1 или s_rgtf=1 или s_oon=1 или s_bazel=1, то Thisformset.cl_tip2=50
...
Рейтинг: 0 / 0
Как найти страну из 3х таблиц?
    #39288922
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ularsoftТут я пытаюсь сравнить "_kl_grajd" - гражданство клиента с полем "s_sfr" из "SPRSTR", или с "kl_kodstr" - код страны клиента. Т.е. у клиента данные поля могут не совпадать. Н-р, kl_kodstr = 1100 - РФ, _kl_grajd = 188 - Коста-Рика.

Если в "SPRSTR" у Коста-Рики одно из полей s_off=1 или s_fatf=1 или s_rgtf=1 или s_oon=1 или s_bazel=1, то Thisformset.cl_tip2=50
А если сначала найдется РФ?

У тебя две страны, а ты проверяешь только одну, первую попавшуюся.
...
Рейтинг: 0 / 0
Как найти страну из 3х таблиц?
    #39288942
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TА если сначала найдется РФ?

У тебя две страны, а ты проверяешь только одну, первую попавшуюся.

Таблица SPRSTR:
s_kod s_nam s_sfr s_off s_fatf s_rgtf s_oon s_bazel1100 РФ 100 0 0 0 0 09188 Коста-Рика 188 0 1 0 1 0

Да, ты прав Дима, сначала нашел РФ. Есть идеи?
...
Рейтинг: 0 / 0
Как найти страну из 3х таблиц?
    #39289272
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ularsoftЕсть идеи?
Самое тупое: ищи два раза
Код: sql
1.
2.
3.
4.
LOCATE FOR SPRSTR.s_sfr=VAL(klient._kl_grajd)
... проверка страны
LOCATE FOR SPRSTR.s_kod=klient.kl_kodstr
... проверка страны
...
Рейтинг: 0 / 0
Как найти страну из 3х таблиц?
    #39289361
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чуть менее тупое - заменить практически весь код из первого сообщения на один select + проверку его результатов.
...
Рейтинг: 0 / 0
Как найти страну из 3х таблиц?
    #39289363
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglirЧуть менее тупое - заменить практически весь код из первого сообщения на один select + проверку его результатов.
По подробнее... Пожалуйста...
...
Рейтинг: 0 / 0
Как найти страну из 3х таблиц?
    #39289369
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
cl_code=dbmaslc.ml_kodkl
IF cl_code<>1
  IF !USED('KLIENT')
    ok=oODED.OpenKlient('KLIENT') // Открываю справочника "Клиенты"
  ENDIF 
  IF !USED('SPRSTR')
    ok=oODED.OpenSprStr('SPRSTR') // Открываю справочника "Страны"
  ENDIF 
  select <чего надо> ;
  from klient k ;
  join sprstr s on s.s_sfr=VAL(k._kl_grajd) OR S.s_kod=k.kl_kodstr ;
  where k.kl_kod=cl_code ;
    and (s.s_off=1 OR s.s_fatf=1 OR s.s_rgtf=1 OR s.s_oon=1 OR s.s_bazel=1) ;
  into cursor qweasd
  -- а дальше смотрим, что попало в курсор, и изменяем Thisformset.cl_tip2=0
  -- ну или не изменяем, если в курсоре пусто
  -- опять же если там несколько записей, то с ними удобней работать -
  -- это будет простой скан курсора, безо всяких окаменелостей типа locate/found()
ENDIF
...
Рейтинг: 0 / 0
Как найти страну из 3х таблиц?
    #39289432
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
cl_code=dbmaslc.ml_kodkl
IF cl_code<>1
  IF !USED('KLIENT')
    ok=oODED.OpenKlient('KLIENT') // Открываю справочника "Клиенты"
  ENDIF 
  IF !USED('SPRSTR')
    ok=oODED.OpenSprStr('SPRSTR') // Открываю справочника "Страны"
  ENDIF 
  select <чего надо> ;
  from klient k ;
  join sprstr s on s.s_sfr=VAL(k._kl_grajd) OR S.s_kod=k.kl_kodstr ;
  where k.kl_kod=cl_code ;
    and (s.s_off=1 OR s.s_fatf=1 OR s.s_rgtf=1 OR s.s_oon=1 OR s.s_bazel=1) ;
  into cursor qweasd
  -- а дальше смотрим, что попало в курсор, и изменяем Thisformset.cl_tip2=0
  -- ну или не изменяем, если в курсоре пусто
  -- опять же если там несколько записей, то с ними удобней работать -
  -- это будет простой скан курсора, безо всяких окаменелостей типа locate/found()
ENDIF


Все супер!
Хочу добавить сюда 3 таблицу с полями p_kl_kod, p_citizen:
Код: sql
1.
2.
3.
  IF !USED('SprBen')
    ok=oODED.OpenSprBen('SprBen') // Открываю справочника "Учредители"
  ENDIF 



Как ЕЕ включить в SELECT ?
...
Рейтинг: 0 / 0
Как найти страну из 3х таблиц?
    #39289435
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ularsoftКак ЕЕ включить в SELECT ?
добавить join SprBen on ...
Пиши подробнее для чего ее туда включать. Что в ней надо искать и что делать с найденным.
...
Рейтинг: 0 / 0
Как найти страну из 3х таблиц?
    #39289444
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TularsoftКак ЕЕ включить в SELECT ?
добавить join SprBen on ...
Пиши подробнее для чего ее туда включать. Что в ней надо искать и что делать с найденным.

В ней надо искать "код страны" учредителей по "p_citizen".
...
Рейтинг: 0 / 0
Как найти страну из 3х таблиц?
    #39289540
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
join SprBen on SprBen.код_страны=таблица_с_полем_p_citizen.p_citizen

почитай уже про join, там ничего сложного.
...
Рейтинг: 0 / 0
Как найти страну из 3х таблиц?
    #39290081
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir
Код: sql
1.
join SprBen on SprBen.код_страны=таблица_с_полем_p_citizen.p_citizen

почитай уже про join, там ничего сложного.

Делаю так:
Код: sql
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.
27.
28.
cl_code=dbmaslc.ml_kodkl
IF cl_code<>1
  IF !USED('KLIENT')
    ok=oODED.OpenKlient('KLIENT') && "Клиенты"
  ENDIF 
  IF !USED('SPRSTR')
    ok=oODED.OpenSprStr('SPRSTR') && "Страны"
  ENDIF 
  IF !USED('SPromoter')
    ok=oODED.OpenSPromoter('SPromoter') && "Учредители"
  ENDIF

  SELECT k.kl_kod,k.kl_nam,k.kl_kodstr,k.kl_fio,k._kl_grajd,;
  u.P_KL_KOD,u.P_NAME,u.P_CITIZEN,;
  s.s_kod,s.s_sfr,s.s_off,s.s_fatf,s.s_rgtf,s.s_oon,s.s_bazel;
  from klient k;
  JOIN sprben u on u.p_kl_kod=k.kl_kod;
  JOIN sprstr s on s.s_sfr=k._kl_grajd OR s.s_kod=k.kl_kodstr OR s.s_kod=u.P_CITIZEN;
       where k.kl_kod=cl_code;
       AND (s.s_off=1 OR s.s_fatf=1 OR s.s_rgtf=1 OR s.s_oon=1 OR s.s_bazel=1);
  into cursor tmp

  SELECT tmp
  IF s_off=1 OR s_fatf=1 OR s_rgtf=1 OR s_oon=1 OR s_bazel=1
     IF Thisformset.cl_tip2=0
        Thisformset.cl_tip2=50
     ENDIF 
  ENDIF



FoxPro 9.0 ругается, выдает ошибку "File 'klient' does not exist", дальше не находить "tmp", а ms sql 2005 дает положительный результат. Где может быть моя ошибка?
...
Рейтинг: 0 / 0
Как найти страну из 3х таблиц?
    #39290082
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
перепутал, sprben у меня SPromoter, где
Код: sql
1.
JOIN sprben u on u.p_kl_kod=k.kl_kod;
...
Рейтинг: 0 / 0
Как найти страну из 3х таблиц?
    #39290088
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще выдает такую ошибку "Operator/operand type mismatch". Что это такое?
...
Рейтинг: 0 / 0
Как найти страну из 3х таблиц?
    #39290089
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ularsoftFoxPro 9.0 ругается, выдает ошибку "File 'klient' does not exist", дальше не находить "tmp", а ms sql 2005 дает положительный результат. Где может быть моя ошибка?
В запросе вроде все нормально. Проверь еще раз что все курсоры созданы.
В начало поставь
Код: sql
1.
set assert on


перед select
Код: sql
1.
assert (USED('KLIENT') and USED('SPRSTR') and USED('SPromoter')) message 'Не все курсоры созданы'


Увидишь это сообщение - разбирайся в коде выше почему klient не открыт.

и это
Код: sql
1.
  IF s_off=1 OR s_fatf=1 OR s_rgtf=1 OR s_oon=1 OR s_bazel=1


можно написать проще, т.к. в tmp попадают только удовлетворяющие этому условию записи, то достаточно проверить что в tmp не пусто, т.е. так
Код: sql
1.
if reccount('tmp') > 0
...
Рейтинг: 0 / 0
Как найти страну из 3х таблиц?
    #39290090
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ularsoftЕще выдает такую ошибку "Operator/operand type mismatch". Что это такое?
Несовпадение типов, например число сравниваешь со строкой.
...
Рейтинг: 0 / 0
Как найти страну из 3х таблиц?
    #39290091
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ularsoftЕще выдает такую ошибку "Operator/operand type mismatch". Что это такое?
В исходном коде у тебя было
Код: sql
1.
LOCATE FOR SPRSTR.s_sfr=VAL(klient._kl_grajd) OR SPRSTR.s_kod=klient.kl_kodstr


а стало
Код: sql
1.
 JOIN sprstr s on s.s_sfr=k._kl_grajd OR s.s_kod=k.kl_kodstr OR s.s_kod=u.P_CITIZEN;


т.е. VAL() потерялся
...
Рейтинг: 0 / 0
Как найти страну из 3х таблиц?
    #39290094
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TularsoftЕще выдает такую ошибку "Operator/operand type mismatch". Что это такое?
В исходном коде у тебя было
Код: sql
1.
LOCATE FOR SPRSTR.s_sfr=VAL(klient._kl_grajd) OR SPRSTR.s_kod=klient.kl_kodstr


а стало
Код: sql
1.
 JOIN sprstr s on s.s_sfr=k._kl_grajd OR s.s_kod=k.kl_kodstr OR s.s_kod=u.P_CITIZEN;


т.е. потерялся

Супер! Дима, ты молодец!

Действительно у меня потерялся VAL():
Код: sql
1.
JOIN sprstr s on s.s_sfr=VAL(k._kl_grajd) OR s.s_kod=k.kl_kodstr OR s.s_kod=VAL(u.P_CITIZEN);



Все работает.
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как найти страну из 3х таблиц?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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