powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / запрос
25 сообщений из 53, страница 1 из 3
запрос
    #37556799
Woolf42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT cymma_chet, bid_cheta, dt_otk_ch ;  
  FROM vklad_banka 
    where  dt_otk_ch>{01.01.2011}  ;
         and dt_otk_ch<{31.03.2011};
       INTO table DepositRange
     index ON bid_cheta+cymma_chet
    BROWSE 


написал запрос
"Определить сумму всех вкладов в первом квартале текущего года по каждому виду вклада и отсортировать в порядке возрастания."
Но фокс ругается на там дат,подскажите как правильно написать?
...
Рейтинг: 0 / 0
запрос
    #37556900
alextashk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Woolf42,

1. В ланном запросе нет никакого суммирования, и данные берутся без учёта первого и последнего
дня квартала!

2. Скорее всего Вы используете неправильное выражение в индексе

index ON bid_cheta+cymma_chet
вид счёта - строка
сумма счёта - индекс
надо

index on bid_cheta+STR(cymma_chet,16,2)

3.Данный индекс неверен, поскольку сам вопрос подразумевает сортировку по сумме счетов, т.е.

index on STR(cymma_chet,16,2)+bid_cheta

4.Зачем нужен индекс, если запрос прекрасно отсортирует ваши данные

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
[SRC C++]SELECT cymma_chet, bid_cheta, dt_otk_ch ;  
FROM vklad_banka 
    where  dt_otk_ch>={01.01.2011}  ;
         and dt_otk_ch=<{31.03.2011};
ORDER BY 1, 2, 3;
       INTO table DepositRange
SELECT depositRange
    BROWSE 

[/SRC]
...
Рейтинг: 0 / 0
запрос
    #37556913
alextashk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
SELECT cymma_chet, bid_cheta, dt_otk_ch ;  
FROM vklad_banka 
    where  dt_otk_ch>={01.01.2011} and ;
         and dt_otk_ch=<{31.03.2011};
ORDER BY 1, 2, 3;
       INTO table DepositRange
SELECT depositRange
    BROWSE
...
Рейтинг: 0 / 0
запрос
    #37556934
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По умолчанию, в среде FoxPro используется настройка

Код: plaintext
1.
SET STRICTDATE TO 1



Эта настройка предполагает строгое написание констант типа Date. Причем в самом сообщении об ошибке отображается, какой именно формат константы ожидается. Это вид

{^ГГГГ-ММ-ДД}

Как следствие, Ваш запрос надо написать так

Код: plaintext
1.
2.
3.
4.
5.
SELECT cymma_chet, bid_cheta, dt_otk_ch ;  
  FROM vklad_banka ;
    where  dt_otk_ch>{^2011.01.01}  ;
         and dt_otk_ch<{^2011.31.03};
       INTO table DepositRange



Кроме того, для упорядочивания выборки используется опция ORDER BY и создание индекса здесь не нужно. А если речь идет о временной выбоорке, то и постоянную таблицу на диске тоже создавать не надо. Вполне достаточно будет временной таблицы (курсора). Ну, и про равенство границам дат Вам уже сказали

Тогда Ваш запрос примет вид

Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT cymma_chet, bid_cheta, dt_otk_ch ;  
  FROM vklad_banka ;
    where  dt_otk_ch BETWEEN {^2011.01.01} and {^2011.31.03} ;
       INTO CURSOR DepositRange NOFILTER

BROWSE
...
Рейтинг: 0 / 0
запрос
    #37557273
Woolf42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT cymma_chet, bid_cheta, dt_otk_ch ;  
  FROM vklad_banka ;
    where  dt_otk_ch BETWEEN {^2011.01.01} and {^2011.31.03} ;
       INTO CURSOR DepositRange NOFILTER

BROWSE


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

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

1. В ланном запросе нет никакого суммирования, и данные берутся без учёта первого и последнего
дня квартала!

2. Скорее всего Вы используете неправильное выражение в индексе

index ON bid_cheta+cymma_chet
вид счёта - строка
сумма счёта - индекс
надо

index on bid_cheta+STR(cymma_chet,16,2)

3.Данный индекс неверен, поскольку сам вопрос подразумевает сортировку по сумме счетов, т.е.

index on STR(cymma_chet,16,2)+bid_cheta

4.Зачем нужен индекс, если запрос прекрасно отсортирует ваши данные

Код: plaintext
1.
2.
3.
4.
[SRC C++]SELECT cymma_chet, bid_cheta, dt_otk_ch ;  
FROM vklad_banka 
    [SRC sql]where  dt_otk_ch>={01.01.2011}  ;
         and dt_otk_ch=<{31.03.2011};


ORDER BY 1, 2, 3;
INTO table DepositRange
SELECT depositRange
BROWSE

[/src][/SRC]

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

прикрепите свою таблицу, посмотрю

но
1. задание вам дано вывести список счетов упорядоченный по сумме за 1 квартал
а Вы пытаетесь вывести список всех счетов открытых в 1-м квартале

2.Попробуйте так
Код: plaintext
1.
2.
3.
4.
5.
SELECT cymma_chet, bid_cheta, dt_otk_ch ;  
FROM vklad_banka ;
where  dt_otk_ch BETWEEN DATE(2011, 1, 1) and DATE(2011,3, 31) ;
ORDER BY 1, 2;
INTO CURSOR DepositRange NOFILTER
...
Рейтинг: 0 / 0
запрос
    #37557286
Woolf42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
щас вообще не чего не выводит
так проще будет http://zalil.ru/32185874
...
Рейтинг: 0 / 0
запрос
    #37557290
alextashk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Woolf42,

ну так в этом диапазоне нет вкладов
попробуй
Код: plaintext
1.
2.
3.
4.
5.
SELECT cymma_chet, bid_cheta, dt_otk_ch ;  
FROM vklad_banka ;
where  dt_otk_ch BETWEEN DATE(2000, 1, 1) and DATE(2000,12, 31) ;
ORDER BY 1, 2;
INTO CURSOR DepositRange NOFILTER


он тебе даст за год
...
Рейтинг: 0 / 0
запрос
    #37557292
Woolf42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дату изменить не проблема, как и добавить еще вкладов.)
он вывел 3 вклада за 2000 год,но без сортировки((
...
Рейтинг: 0 / 0
запрос
    #37557293
Woolf42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а еще вопрос,как вывести заместо кода вклада,его название,если оно находится в другой таблице?
...
Рейтинг: 0 / 0
запрос
    #37557294
alextashk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Woolf42Дату изменить не проблема, как и добавить еще вкладов.)
он вывел 3 вклада за 2000 год,но без сортировки((

Очень даже с сортировкой - по сумме, сначало
20000
75000
1000000
...
Рейтинг: 0 / 0
запрос
    #37557295
Woolf42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хм....ну щас попробую еще добавить вкладов
Глянь плиз форму нью_вклад, после записи 1 вклада у меня тексбокс(дата открытия вклада) меняется на обычный чаровский тип
...
Рейтинг: 0 / 0
запрос
    #37557296
alextashk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Woolf42а еще вопрос,как вывести заместо кода вклада,его название,если оно находится в другой таблице?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT cymma_chet, bid_cheta, dt_otk_ch, vud_vklad.naz_vklad ;  
FROM vklad_banka ;
LEFT OUTER JOIN vud_vklad;
ON vklad_banka.bid_cheta = vud_vklad.kod;
where  dt_otk_ch BETWEEN DATE(2000, 1, 1) and DATE(2000,12, 31) ;
ORDER BY 1, 2;
INTO CURSOR DepositRange NOFILTER
...
Рейтинг: 0 / 0
запрос
    #37557305
Woolf42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT cymma_chet,dt_otk_ch,infor.fio,vud_vklad.naz_vklad;    
    FROM vklad_banka  ;  
    LEFT OUTER JOIN infor;
    LEFT OUTER JOIN vud_vklad;
    ON vklad_banka.kod_kl = infor.kod;
    ON vklad_banka.bid_cheta = vud_vklad.kod;
    where  
    INTO table DepositRange
 BROWSE 


этот код на кнопке
По приблизительному номеру счета определить всех вкладчиков по конкретному виду вклада.

я на форме вожу часть счета(1,2,3) цифры и в комбобоксе выбираю вид вклада.
как условие правильно написать?
...
Рейтинг: 0 / 0
запрос
    #37557411
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какая у Вас версия FoxPro? Опция ON должна следовать сразу за JOIN.

select ...
from ...
join ... on ...
join ... on ...

Тот синтаксис, который приведен у Вас генирили построители запросов в старых версиях FoxPro. Если в отношении inner join это еще работало, то для left join это будет давать не корректный результат.
...
Рейтинг: 0 / 0
запрос
    #37557418
Woolf42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ, 9.0 версия ну у меня там ; стоят
...
Рейтинг: 0 / 0
запрос
    #37557420
Woolf42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
он вообще результата не дает, при выхода с кнопки вылазит или некорректная команда или синтетическая ошибка
...
Рейтинг: 0 / 0
запрос
    #37557517
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Прекратите использовать для записи результата запроса таблицы (INTO TABLE). Это очень плохой стиль программирования. Вы оставляете после себя "мусор", который потом Вам же и придется разгребать. Хорошо еще, если этот "мусор" не приведет к появлению различных глюков. Для временных выборок следует использовать курсор (INTO CURSOR)

2. Поиск по фрагменту значения, в общем случае, это опция LIKE или функция LIKE()

Опция LIKE используется в условии WHERE команд SELECT-SQL примерно таким образом

Код: plaintext
1.
SELECT ... FROM ... WHERE MyField LIKE '%текст%'



Здесь в поле MyField ищется фрагмент "текст" справа и слева от которого может быть указано любое число символов. Знак процента как раз и указывает на то, что количество символов может быть любое

Функция Like() - это штатная функция FoxPro. В командах Select-SQL их также можно использовать. Правда не все. Это будет выглядеть следующим образом

Код: plaintext
1.
SELECT ... FROM ... WHERE LIKE('*текст*', MyField)



Здесь маска поиска и поле меняются местами, а символом, замещающим не определенное количество символов является уже звездочка

Есть еще частный случай поиска по фрагменту, когда точно известно, что искомый фрагмент - это первые символы. В этом случае при настройке SET ANSI OFF (это настройка по умолчанию) можно использовать простое равенство

Код: plaintext
1.
SELECT ... FROM ... WHERE MyField = 'текст'



Подобный запрос найдет все записи, где содержимое поля MyField начинается с символов 'текст'
...
Рейтинг: 0 / 0
запрос
    #37557541
Woolf42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ, Если я напишу Where nomer_chet = ch правильно будет?
...
Рейтинг: 0 / 0
запрос
    #37557570
Woolf42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Аааааааа
Код: plaintext
1.
Command contains unrecognized phrase/keyword

подскажите где ошибка???
...
Рейтинг: 0 / 0
запрос
    #37557573
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Woolf42Аааааааа
Код: plaintext
1.
Command contains unrecognized phrase/keyword

подскажите где ошибка???
Откуда же нам знать? Приведите хотя бы запрос при выполнении которого эта ошибка возникла. Как говорится в известном анекдоте "дай и мне шанс"
...
Рейтинг: 0 / 0
запрос
    #37557666
Woolf42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМWoolf42Аааааааа
Код: plaintext
1.
Command contains unrecognized phrase/keyword

подскажите где ошибка???
Откуда же нам знать? Приведите хотя бы запрос при выполнении которого эта ошибка возникла. Как говорится в известном анекдоте "дай и мне шанс"
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 ch=thisform.text1.value
 
SELECT cymma_chet,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  Where STR(nomer_chet) = ch;
   * LIKE(ch,STR(nomer_chet));*
    INTO table DepositRange;
 BROWSE 
 
 


я все о том же...(
...
Рейтинг: 0 / 0
запрос
    #37557675
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Несколько ошибок

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



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


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