powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / запрос
25 сообщений из 53, страница 2 из 3
запрос
    #37557699
Woolf42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМНесколько ошибок

1. Два раза подряд ключевое слово Where
2. В FoxPro одну команду нельзя "разорвать" строкой комментария. В результате, у Вас отдельно команда SELECT и отдельная команда INTO. Не вставляйте комментарии в "середину" команд. Либо "до", либо "после"
3. Точка с запятой - это символ переноса команды. У Вас команда BROWSE записана как опция команды INTO

И еще, это менее принципиально, но, тем не менее, желательно указывать алиас таблицы у всех полей, участвующих в запросе. Это уменьшает неопределенность. Если я правильно понимаю, то все поля без алиасов относятся к таблице vklad_banka.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
ch=thisform.text1.value
 
SELECT ;
    vklad_banka.cymma_chet,;
    vklad_banka.dt_otk_ch,;
    infor.fio,;
    vud_vklad.naz_vklad ;    
FROM vklad_banka ;  
LEFT OUTER JOIN infor ON vklad_banka.kod_kl = infor.kod ;
LEFT OUTER JOIN vud_vklad ON vklad_banka.bid_cheta = vud_vklad.kod ;
Where STR(vklad_banka.nomer_chet) = ch ;
INTO     CURSOR     DepositRange NOFILTER

BROWSE



Я бы Вам советовал на первых порах отделять команды друг от друга пустой строкой.

т.е. в фоксе комментировать тоже надо с умом?
насчет команд учту:)
Where STR(vklad_banka.nomer_chet) = ch ;
я ввожу число, предположим 2-х значное(которое точно есть в полном номере счета) но мне все ровно ни чего не выводит.
А если я захочу добавить еще 1 условие
vd=vud_vklad.kod(на форме я ввожу еще название вклада)
.....
.....
Where STR(vklad_banka.nomer_chet) = ch .and. vklad_banka.bid_cheta = vd;

правильно будет?
...
Рейтинг: 0 / 0
запрос
    #37557763
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Woolf42Where STR(vklad_banka.nomer_chet) = ch ;
я ввожу число, предположим 2-х значное(которое точно есть в полном номере счета) но мне все ровно ни чего не выводит.
"Точно есть" где? В смысле, в каком месте счета? Это первый символ или может быть где угодно? Приведенный Вами синтаксис предполагает, что речь идет о первом символе. Только вот, функция STR() при переводе числа в строку автоматически дополняет его ведущими пробелами. В данном случае до 10 символов. Как следствие, если номер счета имеет меньше 10 символов, то Вы сравниваете пробел и символ "2". Естественно, ничего не находите.

Кстати, если речь идет о банковском счете, то они обычно 20-значные, а это значит, что, во-первых, поле для его хранения не может быть числовым. FoxPro не может хранить числа с точностью выше 16 значащих цифр. А, во-вторых, даже если Вы записали его как число, то функция STR() без указания размерности, по-умолчанию, преобразует его в строку из 10 символов, что опять-таки приведет к искажениям результата.

Woolf42А если я захочу добавить еще 1 условие
vd=vud_vklad.kod(на форме я ввожу еще название вклада)
.....
.....
Where STR(vklad_banka.nomer_chet) = ch .and. vklad_banka.bid_cheta = vd;

правильно будет?
Вообще-то, проще попробовать. Впрочем, синтаксически это правильно.
...
Рейтинг: 0 / 0
запрос
    #37557962
Woolf42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМWoolf42Where STR(vklad_banka.nomer_chet) = ch ;
я ввожу число, предположим 2-х значное(которое точно есть в полном номере счета) но мне все ровно ни чего не выводит.
"Точно есть" где? В смысле, в каком месте счета? Это первый символ или может быть где угодно? Приведенный Вами синтаксис предполагает, что речь идет о первом символе. Только вот, функция STR() при переводе числа в строку автоматически дополняет его ведущими пробелами. В данном случае до 10 символов. Как следствие, если номер счета имеет меньше 10 символов, то Вы сравниваете пробел и символ "2". Естественно, ничего не находите.

Кстати, если речь идет о банковском счете, то они обычно 20-значные, а это значит, что, во-первых, поле для его хранения не может быть числовым. FoxPro не может хранить числа с точностью выше 16 значащих цифр. А, во-вторых, даже если Вы записали его как число, то функция STR() без указания размерности, по-умолчанию, преобразует его в строку из 10 символов, что опять-таки приведет к искажениям результата.

Woolf42А если я захочу добавить еще 1 условие
vd=vud_vklad.kod(на форме я ввожу еще название вклада)
.....
.....
Where STR(vklad_banka.nomer_chet) = ch .and. vklad_banka.bid_cheta = vd;

правильно будет?
Вообще-то, проще попробовать. Впрочем, синтаксически это правильно.

№ счета у меня 4 значный, щас попробую еще с лайк по мучится
...
Рейтинг: 0 / 0
запрос
    #37558217
Woolf42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
За место
Код: plaintext
1.
2.
Where STR(vklad_banka.nomer_chet) = ch ;[SRC sql]
Ставлю 

LIKE(*ch*, STR(vklad_banka.nomer_chet))[/SRC]
и фокс ругается
...
Рейтинг: 0 / 0
запрос
    #37558386
alextashk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Woolf42,

Код: plaintext
1.
Where ch $ STR(vklad_banka.nomer_chet)
...
Рейтинг: 0 / 0
запрос
    #37558396
Woolf42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alextashk,

Спс
теперь выводится пустая табличка (
...
Рейтинг: 0 / 0
запрос
    #37558399
Woolf42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alextashk,

подскажи в чем касяк,почему не работает(
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
ch=thisform.text1.value
 
SELECT ;
    vklad_banka.cymma_chet,;
    vklad_banka.dt_otk_ch,;
    infor.fio,;
    vud_vklad.naz_vklad ;    
FROM vklad_banka ;  
LEFT OUTER JOIN infor ON vklad_banka.kod_kl = infor.kod ;
LEFT OUTER JOIN vud_vklad ON vklad_banka.bid_cheta = vud_vklad.kod ;
Where ch $ vklad_banka.nomer_chet;
INTO CURSOR     DepositRange NOFILTER

BROWSE
...
Рейтинг: 0 / 0
запрос
    #37558439
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему это должно работать? По сути, Вы выполняете такой поиск

Код: plaintext
1.
?'2' $ 123



Т.е. ищите символьную строку внутри числа. Естественно, получаете ошибку. Сначала надо привести оба сравниваемых выражения к символьному виду.

Код: plaintext
1.
?'2' $ str(123)
...
Рейтинг: 0 / 0
запрос
    #37558442
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, а Вы уверены, что переменная ch не содержит ведущих или концевых пробелов? Попробуйте сделать так

Код: plaintext
1.
ch = AllTrim(thisform.text1.value)
...
Рейтинг: 0 / 0
запрос
    #37558664
Woolf42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Т.е. ищите символьную строку внутри числа. Естественно, получаете ошибку. Сначала надо привести оба сравниваемых выражения к символьному виду.

Код: plaintext
1.
?'2' $ str(123)

[/quot]

у меня ch и nomer cheta чаровского типа, пробелов не должно быть т.к. всего 4 символа выделил.
...
Рейтинг: 0 / 0
запрос
    #37558667
OldChukchi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. что за ошибка?
2. ну не сложно ведь исправить запрос на что-то вот такое:
... WHERE AT(ALLTRIM(ch),vklad_banka.nomer_chet)#0 ;

и посмотреть на результат, ага? :)
...
Рейтинг: 0 / 0
запрос
    #37558687
Woolf42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все исправил, работает:)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SELECT ;
    vklad_banka.cymma_chet,;
    vklad_banka.dt_otk_ch,;
    vklad_banka.nomer_chet,;
    infor.fio,;
    vud_vklad.naz_vklad ;    
FROM vklad_banka ;  
LEFT OUTER JOIN infor ON vklad_banka.kod_kl = infor.kod ;
LEFT OUTER JOIN vud_vklad ON vklad_banka.bid_cheta = vud_vklad.kod ;
Where index ON kod_kl TO kod
      scan WHILE (!EOF())
      p = vklad_banka.kod_kl
      k=0
      DO WHILE  p = vklad_banka.kod_kl 
      k=k+1
      skip 
      ENDDO 
      IIF (k>=2,;
INTO CURSOR DepositRange NOFILTER, )
ENDSCAN 
BROWSE



Надо вывести тех вкладчиков у которых более 2 вкладов,
...
Рейтинг: 0 / 0
запрос
    #37558700
Woolf42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
написал как смог,больше не хватило мозгов)
...
Рейтинг: 0 / 0
запрос
    #37559491
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Woolf42у меня ch и nomer cheta чаровского типа, пробелов не должно быть т.к. всего 4 символа выделил.
"Не должно быть" и "нет" - это "две большие разницы". Хотя бы смотрели в отладчике на значения, ну или количество символов?

PS: Вы бы для начала попробовали то, что Вам предлагают, а потом уже выдумывали бы всякие ужасы. Неужели так трудно написать

Код: plaintext
1.
ch = AllTrim(thisform.text1.value)
...
Рейтинг: 0 / 0
запрос
    #37560009
alextashk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Woolf42Все исправил, работает:)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SELECT ;
    vklad_banka.cymma_chet,;
    vklad_banka.dt_otk_ch,;
    vklad_banka.nomer_chet,;
    infor.fio,;
    vud_vklad.naz_vklad ;    
FROM vklad_banka ;  
LEFT OUTER JOIN infor ON vklad_banka.kod_kl = infor.kod ;
LEFT OUTER JOIN vud_vklad ON vklad_banka.bid_cheta = vud_vklad.kod ;
Where index ON kod_kl TO kod
      scan WHILE (!EOF())
      p = vklad_banka.kod_kl
      k=0
      DO WHILE  p = vklad_banka.kod_kl 
      k=k+1
      skip 
      ENDDO 
      IIF (k>=2,;
INTO CURSOR DepositRange NOFILTER, )
ENDSCAN 
BROWSE





у меня взрыв мозга, всю клавиатуру и дисплей забрызгал!

по поводу 2-х счетов, надеюсь программа не для СберБанка!

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT infor.fio, COUNT() as nKol ;    
FROM  infor ;  
LEFT OUTER JOIN vklad_banka ON infor.kod = vklad_banka.kod_kl  ;
ORDER BY 1;
GROUP BY 1;
HAVING BY nKol > 1;
INTO CURSOR curList
...
Рейтинг: 0 / 0
запрос
    #37560304
Woolf42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot alextashk]Woolf42Все исправил, работает:)




у меня взрыв мозга, всю клавиатуру и дисплей забрызгал!

по поводу 2-х счетов, надеюсь программа не для СберБанка!

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT infor.fio, COUNT() as nKol ;    
FROM  infor ;  
LEFT OUTER JOIN vklad_banka ON infor.kod = vklad_banka.kod_kl  ;
ORDER BY 1;
GROUP BY 1;
HAVING BY nKol > 1;
INTO CURSOR curList


Написал как сумел:)


В селекте ошибку пишет "Мисинг экспесион"
...
Рейтинг: 0 / 0
запрос
    #37560431
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Woolf42]alextashkпропущено...

Написал как сумел:)


В селекте ошибку пишет "Мисинг экспесион"

COUNT(*)
...
Рейтинг: 0 / 0
запрос
    #37560526
Woolf42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IgorNG,
Спасибо
Блин... щас ругается на
Код: plaintext
1.
HAVING BY nKol > 1;


"Command contains unrecognized phrase/keyword"
...
Рейтинг: 0 / 0
запрос
    #37560537
Woolf42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите еще почему после добавление 1 вклада, у меня текстбоксы типа нумерик и дата меняются в чаровский тип,именно после их очистки?
...
Рейтинг: 0 / 0
запрос
    #37560657
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Woolf42IgorNG,
Спасибо
Блин... щас ругается на
Код: plaintext
1.
HAVING BY nKol > 1;


"Command contains unrecognized phrase/keyword"

Блин, ну справку открой, почитай про назначение опций
...
Рейтинг: 0 / 0
запрос
    #37560661
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Woolf42,

Опция HAVING не использует BY
...
Рейтинг: 0 / 0
запрос
    #37560664
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Woolf42Подскажите еще почему после добавление 1 вклада, у меня текстбоксы типа нумерик и дата меняются в чаровский тип,именно после их очистки?

А как ты их чистишь? THISFORM.Text1.Value = "" ?
...
Рейтинг: 0 / 0
запрос
    #37560774
Woolf42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IgorNGWoolf42Подскажите еще почему после добавление 1 вклада, у меня текстбоксы типа нумерик и дата меняются в чаровский тип,именно после их очистки?

А как ты их чистишь? THISFORM.Text1.Value = "" ?

*thisform.Combo1.Value=' '
thisform.Text1.Value=' '
thisform.Text2.Value=' '
*thisform.Combo2.Value=' '
thisform.Text3.Value=' '

если убрать очистку,то типы не меняются,тогда приходится самому очищать
...
Рейтинг: 0 / 0
запрос
    #37560832
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Woolf42,

Если символьное поле, то
thisform.Text1.Value=' '
Если числовое, то
thisform.Text1.Value=0
или
thisform.Text1.Value=0.00
...
Рейтинг: 0 / 0
запрос
    #37560979
Woolf42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а если это дата?.
...
Рейтинг: 0 / 0
25 сообщений из 53, страница 2 из 3
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / запрос
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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