powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
25 сообщений из 121, страница 3 из 5
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39285964
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
inlist() не заметил выше? 19496193
лучше так напиши
Код: sql
1.
SELECT * FROM kartwib WHERE (Datr <= Datp - 60 * 365.25 or (Datr <= Datp - 55 * 365.25 and inlist(Pol, 'ж', 'Ж')))
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39285984
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
результат по выборке такой же но почему-то твой весит на 14 килобайт больше моего файла
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39286843
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал Задал дату с 01.01.2016-01.01.2016
SQL запрос SELECT * FROM kartwib WHERE (Datr <= Datp - 60 * 365.25 or (Datr <= Datp - 55 * 365.25 and inlist(Pol, 'ж', 'Ж')))
Сохранил в dbf и заменил, получились вылезли даты рождения
06.11.1956 ж 952
26.11.1932 ж 251
25.11.1953 м 14525
12.11.1938 ж 14602

В коде программы
SET FILTER TO ((Datr <= Datp-60*365.25 or (Datr <= Datp - 55 * 365.25 and inlist(Pol, 'ж', 'Ж'))).AND.DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0)
26.11.1932 ж 251
25.11.1953 м 14525
12.11.1938 ж 14602

Получается через код не попадает 06.11.1956 ж 952
(цифры после м и ж этот для простоты поиска идентификаторы)

Ну и если поставить период больше например весь январь, то по коду - 165, а по sql - 184
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39286847
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда замененный сохраненный выбранный sql запрос dbf в программу и тем самым код
SET FILTER TO ((Datr <= Datp-60*365.25 or (Datr <= Datp - 55 * 365.25 and inlist(Pol, 'ж', 'Ж'))).AND.DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0)
то также показывает 184
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39286849
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал открыл через visual foxpro 6 и экспортировал ни делая ни каких запросов (пересохранил) в dbf2.x и кинул(заменил) в программе вышло правильное кол-во но вместо русских букв крякозябры(где ФИО)
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39286861
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmr55Получается через код не попадает 06.11.1956 ж 952
(цифры после м и ж этот для простоты поиска идентификаторы)

Ну и если поставить период больше например весь январь, то по коду - 165, а по sql - 184
Не смущает что условия выборки разные? у селекта нет .AND.DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0)
смотри для этой записи что в полях DATW и SRDOOP
и пиши сюда содержимое всех используемых полей если сам разобраться не можешь. Даты смотри с 4 цифрами года.
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39286862
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmr55вместо русских букв крякозябры(где ФИО)
Я тебе уже писал как задать 866 кодовую страницу.
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39286897
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и что, что у Селекта нет .AND.DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0)

Когда я беру файл с полной базой, никаких запросов не делаю, а просто экспортирую его в dbf2.x и кидаю(заменяю) в программе конечно выходят крякозябры(хрен с ними этот так для проверки) но и выходит правильное кол-во ведь в коде та есть .AND.DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0)

Проверил 06.11.1956 ж 952
DATW - 01.01.2016 правильно должна выходить
SRDOOP - 1 правильно должна выходить
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39286904
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MINDAT и MAXDAT это переменные или поля?
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39286910
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переменные

PUBLIC MINDAT, MAXDAT, MINOTD
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39286926
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже запросу
SET FILTER TO ((Datr <= Datp-60*365.25 or (Datr <= Datp - 55 * 365.25 and inlist(Pol, 'ж', 'Ж'))).AND.DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0)
что-то мешает из "родной" dbf таблицы выбирать все что надо, ведь когда пересохраняешь ее в dbf2.x и кидаешь(заменяешь) все что надо показывает с (крякозябрами)
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39286927
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У тебя скобки нехватает
Код: sql
1.
SET FILTER TO ((Datr <= Datp-60*365.25 or (Datr <= Datp - 55 * 365.25 and inlist(Pol, 'ж', 'Ж'))).AND.(DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0)



Вот тест, выбирается в обоих случаях
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create cursor kartwib (Datr d, Datp d, datw d, pol c(1), srdoop n(1))
insert into kartwib values ({^1956-06-11}, {^2016-02-02}, {^2016-01-01}, 'ж', 1)

MINDAT = {^2016-01-01}
MAXDAT = {^2016-06-01}

SET FILTER TO ((Datr <= Datp-60*365.25 or (Datr <= Datp - 55 * 365.25 and inlist(Pol, 'ж', 'Ж'))).AND.DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0)
brow

SELECT * FROM kartwib WHERE ((Datr <= Datp-60*365.25 or (Datr <= Datp - 55 * 365.25 and inlist(Pol, 'ж', 'Ж'))).AND.(DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0)


Т.к. всех данных я от тебя добиться так и не смог, то неизвестное дописал сам. Поправь даты на свои и проверь что в обоих случаях выбирается.

Если результаты одинаковые, то проблема где-то в другом твоем коде.
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39286931
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmr55Похоже запросу
SET FILTER TO ((Datr <= Datp-60*365.25 or (Datr <= Datp - 55 * 365.25 and inlist(Pol, 'ж', 'Ж'))).AND.DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0)
что-то мешает из "родной" dbf таблицы выбирать все что надо, ведь когда пересохраняешь ее в dbf2.x и кидаешь(заменяешь) все что надо показывает с (крякозябрами)
крякозябры мешают - в кракозябрах 'ж' превращается в кракозябру и не выбирается, т.е. ты потерял всех женщин от 55 до 60.
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39286968
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скобку добавил - рузультат тот же

Сделал выборку за январь
В сохраненном(замененном) dbf женщин находит от 55-60, ведь здесь крякозябы и всех показывает
В родном dbf похоже не находит женщин от 55-60, все читаемо крякозябрь нет и данные не все

Запрос с "родной базой"
SET FILTER TO ((Datr <= Datp-60*365.25 or (Datr <= Datp - 55 * 365.25 and inlist(Pol, 'ж', 'Ж'))).AND.(DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0)
в коде не может все показать

А в сохраненном(экспортированном) все показывает
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39286990
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже sql запрос в коде foxpro2.6 не может проработать целиком выборку данного формата(родного) dbf файла
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39287012
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmr55Запрос с "родной базой" ... в коде не может все показать

А в сохраненном(экспортированном) все показывает
Нет тут телепатов. Как я должен догадаться откуда взялся второй источник данных? Зачем вообще этот экспорт из VFP6 в FPD2? Зачем две базы и где гарантия что обе содержат одинаковую инфу? Почему нельзя все проверки выполнять в FPD?

PS Я уже устал из тебя вытягивать инфу по крупицам. Как я вижу, ты не понимая сути происходящего, просто перебираешь варианты какие в голову придут, авось пазл сойдется и все станет хорошо. С таким подходом можно долго перебирать.
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39287113
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SET FILTER TO ((Datr <= Datp-60*365.25 or (Datr <= Datp - 55 * 365.25 and inlist(Pol, 'ж', 'Ж'))).AND.(DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0)
в данном запросе не нахожу женщин от 55-60, они туда не попадают

какую нужно инфу
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39287952
Student009
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dmr55Помогите осуществить Выборку из БД мужчин от 60 и старше, женщин от 55 и старше

Часть кода, где DATW - дата выписки, DATP-дата поступления, DATR - дата рождения

Dima T - это Хохол, натуральный усpаинский Какел. Не слушай какелов!
Забудь про мистическое число 365.25.

Вот простое решение твоей задачи:

SET COLLATE TO 'RUSSIAN' && Это надо для 'м' или 'ж' если вдруг нечайно внесут в базу большими буквами 'М' или 'Ж'

SELECT * FROM kartwib WHERE Pol='м' AND YEAR(DATE())-YEAR(Datr)>=60 AND MONTH(Datr)>=MONTH(DATE()) AND DAY(Datr)>=DAY(DATE()) INTO CURSOR деды

SELECT * FROM kartwib WHERE Pol='ж' AND YEAR(DATE())-YEAR(Datr)>=55 AND MONTH(Datr)>=MONTH(DATE()) AND DAY(Datr)>=DAY(DATE()) INTO CURSOR бабки

Всё?
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39287954
Student009
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
*Небольшая поправочка в предыдущем коде, сути не меняет.

SET COLLATE TO 'RUSSIAN' && Это надо для 'м' или 'ж' если вдруг нечайно внесут в базу большими буквами 'М' или 'Ж'

SELECT * FROM kartwib WHERE Pol='м' AND (YEAR(DATE())-YEAR(Datr)>60 OR YEAR(DATE())-YEAR(Datr)=60 AND MONTH(Datr)>=MONTH(DATE()) AND DAY(Datr)>=DAY(DATE())) INTO CURSOR деды

SELECT * FROM kartwib WHERE Pol='ж' AND (YEAR(DATE())-YEAR(Datr)>55 OR YEAR(DATE())-YEAR(Datr)=55 AND MONTH(Datr)>=MONTH(DATE()) AND DAY(Datr)>=DAY(DATE())) INTO CURSOR бабки
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39287959
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в одну строчку можно записать этот запрос через set filter
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39287965
Student009
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dmr55в одну строчку можно записать этот запрос через set filter

SET COLLATE TO 'RUSSIAN'
SET EXCLUSIVE OFF

SELECT 0
USE kartwib ALIAS kartwib_m && деды
SET FILTER TO Pol='м' AND (YEAR(DATE())-YEAR(Datr)>60 OR YEAR(DATE())-YEAR(Datr)=60 AND MONTH(Datr)>=MONTH(DATE()) AND DAY(Datr)>=DAY(DATE()))

SELECT 0
USE kartwib ALIAS kartwib_w && бабки
SET FILTER TO Pol='ж' AND (YEAR(DATE())-YEAR(Datr)>55 OR YEAR(DATE())-YEAR(Datr)=55 AND MONTH(Datr)>=MONTH(DATE()) AND DAY(Datr)>=DAY(DATE()))
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39287970
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Student009SET COLLATE TO 'RUSSIAN'
Какел, или как тебя там, тему топика прочитай "...Foxpro 2.6" и не запутывай человека, он и так запутался по самые нехочу.
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39287986
Student009
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SET EXCLUSIVE OFF

SELECT 0
USE kartwib ALIAS kartwib_m && деды
SET FILTER TO LOWER(Pol)='м' AND (YEAR(DATE())-YEAR(Datr)>60 OR YEAR(DATE())-YEAR(Datr)=60 AND MONTH(Datr)>=MONTH(DATE()) AND DAY(Datr)>=DAY(DATE()))

SELECT 0
USE kartwib ALIAS kartwib_w && бабки
SET FILTER TO LOWER(Pol)='ж' AND (YEAR(DATE())-YEAR(Datr)>55 OR YEAR(DATE())-YEAR(Datr)=55 AND MONTH(Datr)>=MONTH(DATE()) AND DAY(Datr)>=DAY(DATE()))

Всем поxеp на каклосвиней и их высеры.
Dima T известный хохол, потому не смог решить простейшую задачу, он только выё6ываться может. Dima T, валил бы ты отсюда на хохляцкий сайт? Админы, забаньте наконец этого бандеровского хохла, он уже тут всем надоел.
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39288035
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТЕСТ СРЕДСТВАМИ VISUAL FOX PRO 6 SQL и EXCEL 2010

1
SELECT * FROM kartwib WHERE ((Datr <= Datp - 60 * 365.25 and Pol = 'м') or (Datr <= Datp - 60 * 365.25 and Pol = 'М') or (Datr <= Datp - 55 * 365.25 and Pol = 'ж') or (Datr <= Datp - 55 * 365.25 and Pol = 'Ж'))
7397 записей, включая без даты рождения
01-01-2016 - 31-01-2016 184 01-01-2016 - 31-03-2016 700
2
SELECT * FROM kartwib WHERE (Datr <= Datp - 60 * 365.25 or (Datr <= Datp - 55 * 365.25 and inlist(Pol, 'ж', 'Ж')))
7493 записей, включая без даты рождения
01-01-2016 - 31-01-2016 184 01-01-2016 - 31-03-2016 700
3
SELECT * FROM kartwib WHERE Pol='м' AND (YEAR(DATE())-YEAR(Datr)>60 OR YEAR(DATE())-YEAR(Datr)=60 AND MONTH(Datr)>=MONTH(DATE()) AND DAY(Datr)>=DAY(DATE())) OR Pol='М' AND (YEAR(DATE())-YEAR(Datr)>60 OR YEAR(DATE())-YEAR(Datr)=60 AND MONTH(Datr)>=MONTH(DATE()) AND DAY(Datr)>=DAY(DATE())) OR (Pol)='ж' AND (YEAR(DATE())-YEAR(Datr)>55 OR YEAR(DATE())-YEAR(Datr)=55 AND MONTH(Datr)>=MONTH(DATE()) AND DAY(Datr)>=DAY(DATE())) OR (Pol)='Ж' AND (YEAR(DATE())-YEAR(Datr)>55 OR YEAR(DATE())-YEAR(Datr)=55 AND MONTH(Datr)>=MONTH(DATE()) AND DAY(Datr)>=DAY(DATE()))
7411 записей, включая без даты рождения
01-01-2016 - 31-01-2016 184 01-01-2016 - 31-03-2016 694

Решил сравнить 2 и 3 результат, какие все таки данные не вошли в 3 вариант средствами Excel 2010
1 Во второй вариант вошли данные исходя из Excel это самые младшие только рожденные с Января 1961 – Апрель 1961, с мая по декабрь данных нет (ну и все 1960 года и старше)

2 В третий вариант вошли данные из Excel это самые младшие только рожденные с Августа – Декабрь 1961года (ну и все 1960года и старше)
Из Excel вижу что самые младшие начинаются с 8.08.1961

3 Ну и 1 и 2 варианты дают аналогичную картину (самые младшие только рожденные с Января 1961 – Апрель 1961)

Получается 2 вариант более короткий, но у него выборка самые младшие с с Января 1961 – Апрель 1961, куда то потерялись с мая – 8 августа(т.к. сейчас 8 августа)
...
Рейтинг: 0 / 0
Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
    #39288041
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Варианты 1 и 2 должны одинаковый результат давать, разница может быть только из-за безполых и без даты рождения.

Посмотри есть ли бесполые записи, т.е.
Код: sql
1.
SELECT * FROM kartwib WHERE !inlist(Pol, 'ж', 'Ж', 'м', 'М')


Если есть то надо исправлять

Проверь такие запросы (с пропуском пустых Datr)
Код: sql
1.
2.
3.
4.
5.
SELECT * FROM kartwib WHERE !empty(Datr) and (;
                                (Datr <= Datp - 60 * 365.25 and Pol = 'м') or (Datr <= Datp - 60 * 365.25 and Pol = 'М');
                                or (Datr <= Datp - 55 * 365.25 and Pol = 'ж') or (Datr <= Datp - 55 * 365.25 and Pol = 'Ж'))

SELECT * FROM kartwib WHERE !empty(Datr) and (Datr <= Datp - 60 * 365.25 or (Datr <= Datp - 55 * 365.25 and inlist(Pol, 'ж', 'Ж')))



dmr55Получается 2 вариант более короткий, но у него выборка самые младшие с с Января 1961 – Апрель 1961, куда то потерялись с мая – 8 августа(т.к. сейчас 8 августа)
Чем отличается Datp от DATE() ?
...
Рейтинг: 0 / 0
25 сообщений из 121, страница 3 из 5
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Выборка из БД мужчин от 60 и старше, женщин от 55 и старше на Foxpro 2.6
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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