Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 2 [Все]   Вниз
  Печать  
Автор Тема: Помогите, пожалуйста, с запросами  (Прочитано 41348 раз)
0 Пользователей и 1 Гость смотрят эту тему.
v.korleone
Помогающий

ua
Offline Offline

« : 27-04-2009 13:27 » 

С SQL практически не знаком, не судите строго...
Вводная информация: Есть одна база данных в ней 4 таблицы, в которых содержится информация отдела кадров предприятия (личные, семейные, служебные данные, данные об образовании). Зделать следующие запросы:
Запрос_1: Поиск по фамилли.(желательно, чтобы можно было осуществлять как по целой фамилии так и по введеной букве или буквам, например показать все фамилии на букву "К"). Вывод осуществлять в таблицу на форме, в которой столбцы это некоторые столбцы из всех таблиц, которые дают наиболее важную информацию о человеке. Таким образом получается, свооеобразная зборная таблица в которой находится найденный человек или группа людей, но не только показуется его фамилия но и другие данные.
Запрос_2: Подсчет общего количества сотрудников на работе. В таблице есть поле "служебный номер" (num) тип integer, который присваивается каждому сотруднику (как сделать этот процес автоматическим? Чтобы когда пользователь пишет в форме добавить инф. о новом сторуднике и переходит к форме заполнения, служебный номер генерировался сам, а потом пользователь спокойно себе запоняет остальные поля).
Запрос_3: Подсчет количества работников которые находятся в отпуске. Есть поля в таблице, котрые показывают, когда сотрудник идет в отпуск (holiday_begin) и когда он у него заканчивается (holiday_end) типы полей Date. 
Запрос_4: Подсчет количества работников которые работают. (Не путать с общим числом рабочих!) Получается, что Общее_количество_рабочих (ОКР)- Количестов_работников_в отпуске (КВО)= Рабочие_котрые_работают (РКР).
Запрос_5: Подсчет количества детей работников. Здесь сам должен разобраться, если покажете, как делать остальное.
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 27-04-2009 13:31 » 

1. like
2,3,4,5 count
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 27-04-2009 13:33 » 

2. Табельный номер = автоинкремент
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 27-04-2009 13:34 » 

и покажи сами таблицы, если они существуют
Если нет - то покажи, какими ты их видишь.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
v.korleone
Помогающий

ua
Offline Offline

« Ответ #4 : 27-04-2009 13:49 » 

Sla, каким образом показать таблицы? Кинуть в архив, а потом на форум? Как сюда отослать файл?
У меня есть примитивный поиск, по перовмому запросу:
Код:
surn=thisform.text1.Value
 SELECT DISTINCT personal_data.surname;
 FROM database!personal_data;
 WHERE  personal_data.surname=surn;
 INTO CURSOR result
&&Выбирается курсор, в котром сохраняются результаты поиска
SELECT 'result'
&&Результаты поиска показуются в таблице "Результаты поиска"
thisform.grid1.RecordSource='result'
&&Обновление таблицы "Результаты поиска"
&&thisform.grid1.Refresh
&&Подпись колонок в таблице отображения результатов поиска
thisform.grid1.column1.header1.Caption='num'
thisform.grid1.column2.header1.Caption='surname'
thisform.grid1.column3.header1.Caption='name'
thisform.grid1.column4.header1.Caption='patronymic'
thisform.grid1.column5.header1.Caption='identifikation nom'
thisform.grid1.column6.header1.Caption='year_birth'

&&Задание ширины колонок в таблице отображения результатов поиска
thisform.grid1.column1.Width=40
thisform.grid1.column2.Width=200
thisform.grid1.column3.Width=150
thisform.grid1.column4.Width=150
thisform.grid1.column5.Width=150
thisform.grid1.column6.Width=150
Куда ставить это "like"?
« Последнее редактирование: 27-04-2009 13:55 от v.korleone » Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 27-04-2009 13:54 » 

показать таблицы:
people
id       Surname   FirstName    SecondName   Birthday   INN sex

children
id        id_people    Name     sex  Birthday

что-то тип такого
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
v.korleone
Помогающий

ua
Offline Offline

« Ответ #6 : 27-04-2009 14:02 » 

1. Personal Data

num | surname | name | patronymic | year_birth | identification_num | series_pasport | num_pasport |

2. Family Data

num | marital_status | quantity_children | sreet | num_house | num_kv |

3. Education data

num | name_education | speciality | type_education | year_ending |

4. Service_data

num | post | date_arrival | date_care | holiday_begin | holiday_end | servise_note |

Сделал типа такого:

Код:
 surn=thisform.text1.Value
 SELECT DISTINCT personal_data.surname;
 FROM database!personal_data;
 WHERE  personal_data.surname=surn;
 INTO CURSOR result
&&обирається курсор, в якому зберігаються результати пошуку
SELECT 'result'
&&Результати пошуку відображаються в таблиці "Результати пошуку"
thisform.grid1.RecordSource='result'
&&оновлення таблиці "Результати пошуку"
thisform.grid1.Refresh
&&підпис колонок в таблиці відображення результатів пошуку
thisform.grid1.column1.header1.Caption='num'
thisform.grid1.column2.header1.Caption='surname'
thisform.grid1.column3.header1.Caption='name'
thisform.grid1.column4.header1.Caption='patronymic'
thisform.grid1.column5.header1.Caption='identifikation nom'
thisform.grid1.column6.header1.Caption='year_birth'

&&задання ширини колонок в таблиці відображення результатів пошуку
thisform.grid1.column1.Width=40
thisform.grid1.column2.Width=200
thisform.grid1.column3.Width=150
thisform.grid1.column4.Width=150
thisform.grid1.column5.Width=150
thisform.grid1.column6.Width=150

SET ANSI OFF
 

Форма компилится, но в моей таблице всего лишь 2 столбца: 1-й активный "surname", 2-й неактивный т.е. подсвечивает серым. Когда ввожу поиск 2 первых буквы фамилии, то выдает ошибку типа: "Unknown member COLUMN2". Нажимаю Ignore, появляется такое же сообщение, но уже "Unknown member COLUMN3" и так до конца, т.е. до 6.
Самое смешное, то что когда нажимаю Cancel, все работает т.е. выводит фамилию. Подскажите как избавится от ошибок, как сделать чтобы и другие столбцы были активными и в них была занесена инф. по искомому объекту. А также просьба с другими задачами помочь.
« Последнее редактирование: 28-04-2009 11:35 от v.korleone » Записан
v.korleone
Помогающий

ua
Offline Offline

« Ответ #7 : 28-04-2009 12:35 » 

Да... Ну хоть кто-то скажите почему не работает, этот гребаный код! Какого оно пишет ошибку??? У других людей такой код работает.. Не понял Не понял Не понял
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 28-04-2009 12:55 » 

v.korleone, тише, попей водички Улыбаюсь

давай попорядку, а вернее с конца

Что ты делаешь в этом коде?
Код:
thisform.grid1.column1.header1.Caption='num'
thisform.grid1.column2.header1.Caption='surname'
thisform.grid1.column3.header1.Caption='name'
thisform.grid1.column4.header1.Caption='patronymic'
thisform.grid1.column5.header1.Caption='identifikation nom'
thisform.grid1.column6.header1.Caption='year_birth'

а теперь с начала
а что в этом
Код:
SELECT DISTINCT personal_data.surname;
 FROM database!personal_data;
 WHERE  personal_data.surname=surn;
 INTO CURSOR result
синтаксиса я не знаю (крапка с комой обязательны?)
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
v.korleone
Помогающий

ua
Offline Offline

« Ответ #9 : 28-04-2009 13:04 » 

Цитата
Что ты делаешь в этом коде?
                       
Код:
thisform.grid1.column1.header1.Caption='num'
thisform.grid1.column2.header1.Caption='surname'
thisform.grid1.column3.header1.Caption='name'
thisform.grid1.column4.header1.Caption='patronymic'
thisform.grid1.column5.header1.Caption='identifikation nom'
thisform.grid1.column6.header1.Caption='year_birth'
Подписую названия колонок.
Код:
 SELECT DISTINCT personal_data.surname;
 FROM database!personal_data;
 WHERE  personal_data.surname=surn;
 INTO CURSOR result
1-я строчка как я думаю обращение к колоке "surname" таблицы "personal_data".
2-я строчка указания на базу данных которой принадлежит таблица
3-я присвоение колонке таблицы переменной "surn"
4-я вывод результатов в место курсора.
Блин, я сам толком не знаю, что к чему, НО у паренька который дал мне этот код, он работает, но только с его данными, а у меня - нет. Вот в чем проблема... а не синтаксис и проча лабуда... версиии фоксов одинаковы.... 
« Последнее редактирование: 28-04-2009 13:10 от v.korleone » Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 28-04-2009 13:33 » 

Цитата
Блин, я сам толком не знаю, что к чему, НО у паренька который дал мне этот код, он работает, но только с его данными, а у меня - нет.

Слушай байку  Еще давным давно...

Цитата
Давным-давно, в далекой-далекой стране у самых синих гор жил да был молодой человек, который очень хотел стать Мастером меча. И по обычаям той земли, настоящим Мастером меча мог стать тот, у кого есть настоящий Меч мастера. Молодой человек очень хотел стать мастером, и он отправился по городам далекой страны у самых синих гор. Он хотел прийти к одному из старых Мастеров меча и попросить его: "Великий Мастер, слава о твоих подвигах идет по всей стране. Ты сражался во всех больших сражениях, ты всегда побеждал и заслужил славу и почет. И вот теперь ты живешь на покое. У тебя есть все. И тебе больше не нужен твой меч - Меч мастера. Продай его мне. Или подари". Молодой человек очень надеялся, что кто-то из старых мастеров откликнется на его просьбу.

И вот он пришел в дом настоящего Мастера меча, удалившегося на покой и обратился к нему: "Великий Мастер, слава о твоих подвигах идет по всей стране. Ты сражался во всех больших сражениях, ты всегда побеждал и заслужил славу и почет. И вот теперь ты живешь на покое. У тебя есть все. И тебе больше не нужен твой меч - Меч мастера. Продай его мне. Или подари". Мастер меча выслушал юношу, улыбнулся и ответил ему: "Я бы с радостью. Но знаешь, этот меч тебе не подойдет".
Молодой человек поклонился мастеру и снова отправился в путь. И пришел в другой город и нашел дом старого Мастера меча. Он пришел в этот дом и обратился к мастеру: "Великий Мастер, слава о твоих подвигах идет по всей стране. Ты сражался во всех больших сражениях, ты всегда побеждал и заслужил славу и почет. Ты настоящий мастер, все это знают. И вот теперь ты живешь на покое. У тебя есть все. И тебе больше не нужен твой меч - Меч мастера. Продай его мне. Или подари". И старый Мастер меча выслушал юношу, улыбнулся и ответил ему: "Я бы с радостью отдал. Но ты знаешь, этот меч тебе не подойдет".
И вновь отправился в путь юноша, который хотел стать настоящим Мастером меча, и находил старых мастеров и обращался к ним с одной и той же просьбой: "Великий Мастер, слава о твоих подвигах идет по всей стране. Ты сражался во всех больших сражениях, ты всегда побеждал и заслужил славу и почет. И вот теперь ты живешь на покое. У тебя есть все. И тебе больше не нужен твой меч - настоящий Меч мастера. Продай его мне. Или подари". И раз за разом выслушивали его старые мудрые мастера, вздыхали и отвечали одно и то же: "Я бы отдал. Но ты знаешь, этот меч тебе не подойдет".

И тогда молодой человек решил отправиться в горы на поиски тайных кузнецов. Он шел дни и ночи, вставал с восходом и ложился спать, когда солнце уже давно село. И вот, наконец, он нашел далеко в синих горах тайных кузнецов и рассказал им о своей просьбе. Он попросил выковать ему меч, который бы хотя бы казался настоящим Мечом мастера. Кузнецы выслушали его и ответили: "Ты хочешь стать мастером, и тебе нужен меч? Хорошо". И они выковали ему меч, который так же сверкал благородной сталью, одинаково легко рассекал железо и волос, был замечательно уравновешен и покрыт замысловатой чеканкой, как настоящий меч мастера. Радостно принял юноша свой новый меч и отправился назад.

И он сражался во многих битвах и побеждал. Слава о нем разносилась все дальше по далекой стране, опережая его появление, приводя в восторг друзей и вселяя уважение в сердца противников. Он прожил богатую и достойную жизнь и наконец ушел на покой.

Много лет жил он спокойно и счастливо. И лишь иногда, когда гости славили его - настоящего Мастера меча, ему становилось неловко. Ведь он-то знал, что у него так и не было настоящего Меча мастера. Однажды к нему пришел незнакомый юноша. Он поклонился пожилому мастеру и сказал: "Великий Мастер, слава о твоих подвигах идет по всей стране. Ты сражался во всех больших сражениях, ты всегда побеждал и заслужил славу и почет. Ты настоящий мастер, все это знают. И вот теперь ты живешь на покое. У тебя есть все. И тебе больше не нужен твой меч - Меч мастера. Продай его мне. Или подари". И старый мастер улыбнулся непонятной улыбкой и ответил: "Я бы с радостью. Но знаешь, этот меч тебе не подойдет".
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 28-04-2009 13:37 » 

вот здесь ты вбираешь только один! столбец
Код:
SELECT DISTINCT personal_data.surname;
 FROM database!personal_data;
 WHERE  personal_data.surname=surn;
 INTO CURSOR result
а дальше пытаешься заполнить еще 5!

Різницю почуваєш? Улыбаюсь
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
v.korleone
Помогающий

ua
Offline Offline

« Ответ #12 : 28-04-2009 13:45 » 

Sla правильно, говорить "відчуваеш"  Улыбаюсь но сейчас не об этом. Вот новая запарка, переделал код, исчет фамилию но если она вся введена, я же хочу чтобы можно было по введеной букве:
Код:
SET ANSI OFF
surn=thisform.text1.Value
SELECT * FROM database!personal_data;   
WHERE  Like(surn+'*',personal_data.surname) ;   
INTO CURSOR result

SELECT 'result'

thisform.grid1.RecordSource='result'

thisform.grid1.Refresh

thisform.grid1.column1.header1.Caption='num'
thisform.grid1.column2.header1.Caption='surname'
thisform.grid1.column3.header1.Caption='name'
thisform.grid1.column4.header1.Caption='patronymic'
thisform.grid1.column5.header1.Caption='identifikation nom'
thisform.grid1.column6.header1.Caption='year_birth'

thisform.grid1.column1.Width=40
thisform.grid1.column2.Width=100
thisform.grid1.column3.Width=100
thisform.grid1.column4.Width=100
thisform.grid1.column5.Width=100
thisform.grid1.column6.Width=100
Теперь не исчет вообще...
dimka, я серьезно без баек... Этот фокс достал уже, у него работает, а у меня нет... Хочешь верь, хочешь нет. 
« Последнее редактирование: 28-04-2009 13:48 от v.korleone » Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 28-04-2009 14:07 » 

я так понимаю, что тебе каким-то образом нужно связать поле "Поискового запроса" с гридом
возможно, обрабатывая событие типа "keyup"

зы! відчуваєш?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
v.korleone
Помогающий

ua
Offline Offline

« Ответ #14 : 28-04-2009 14:17 » 

Опять неправильно! Правильно, в таком случае говорить "розумієш" Улыбаюсь На одном из форумов посоветовали прочитать подробно о функциях лайк и селект, может что-то с их синтаксисом.
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #15 : 28-04-2009 14:18 » 

Цитата: v.korleone
dimka, я серьезно без баек... Этот фокс достал уже, у него работает, а у меня нет... Хочешь верь, хочешь нет.
Просто код того паренька "тебе не подойдёт" Улыбаюсь И тут совершенно прав Sla, показывая, почему он тебе не подойдёт. Потому что задачу надо решать, а не переделывать чужие решения под свою задачу без всякого понимания, что в этих чужих решениях содержится, что думал автор, и как работает та или иная технология.

P.S. Желания помогать не имею до тех пор, пока не проявишь желание учиться.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
v.korleone
Помогающий

ua
Offline Offline

« Ответ #16 : 28-04-2009 14:23 » 

Цитата: v.korleone
dimka, я серьезно без баек... Этот фокс достал уже, у него работает, а у меня нет... Хочешь верь, хочешь нет.
Просто код того паренька "тебе не подойдёт" Улыбаюсь И тут совершенно прав Sla, показывая, почему он тебе не подойдёт. Потому что задачу надо решать, а не переделывать чужие решения под свою задачу без всякого понимания, что в этих чужих решениях содержится, что думал автор, и как работает та или иная технология.

P.S. Желания помогать не имею до тех пор, пока не проявишь желание учиться.
Но я ведь переделал код и понял что к чему, у паренька поди вызывался для нескольких параметров поиск, а у меня для одного. Уже все работает, но по одной букве не исчет, что весьма плохо. Посмотри, первые пять строк кода, по ним замечания есть? 
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #17 : 28-04-2009 14:34 » 

v.korleone,
Еще раз
У тебя есть поле ввода фамилии для поиска
После каждого нажатия клавиши ты должен(жна) вызвать курсор с поиском

select * from table where table.столбец_поиска like "поле_поиска%"

и отобразить результат работы курсора в гриде

что-то мне подсказывает, что конструкция like в фоксе  не совсем "правильная"
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
v.korleone
Помогающий

ua
Offline Offline

« Ответ #18 : 28-04-2009 14:40 » 

Как понять "поле поиска"?
Сделал так:
Код:
SELECT * FROM  database!personal_data WHERE personal_data.surname LIKE "surname%";
Что написать вместо "surname%"?
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #19 : 28-04-2009 14:43 » 

v.korleone, возьми какой нибудь справочник по фоксу
я ФОКСА не знаю, вернее знал, но забыл.

Like насколько я понимаю в фоксе это функция, ты уже показывал как она используется
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
v.korleone
Помогающий

ua
Offline Offline

« Ответ #20 : 28-04-2009 14:45 » 

ясно
Записан
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #21 : 28-04-2009 14:48 » 

Посмотри какое значение у surn. Возможно оно "N           "+%
тогда surn=ALLTRIM(thisform.text1.Value)+"%" или символы UPPER или LOWER и возможно
WHERE  Like(&surn).
смотри что получается в переменной surn
к сожалению синтаксис тоже уже забыт.
Записан

С уважением, Oldy.
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #22 : 28-04-2009 15:32 » 

Откопал:
Цитата
Синтаксис

LIKE(cExpression1, cExpression2)

Параметры

cExpression1

Задает символьное выражение, которое функция LIKE( ) сравнивает с выражением cExpression2. В состав cExpression1 могут входить символы подстановки, такие как * и ?. Знак вопроса (?) при сравнении заменяет любой одиночный символ в cExpression2, а звездочка (*) ѕ любое число символов. В выражении cExpression1 можно задавать сколько угодно символов подстановки в любом сочетании.

cExpression2

Задает символьное выражение, которое LIKE( ) сравнивает с выражением cExpression1. Чтобы функция LIKE( ) возвратила значение "истина" (.T.), выражения cExpression2 и cExpression1 должны совпадать буква за буквой.

Результат

Логический

Комментарии

Функция LIKE( ) возвращает значение "истина" (.T.), если выражение cExpression1 совпадает с cExpression2; в противном случае возвращается "ложь" (.F.).
Команда SET COMPATIBLE влияет на то, каким образом функция LIKE( ) трактует выражения cExpression1 и cExpression2. Если установка SET COMPATIBLE имеет значение ON или DB4, перед сравнением выражений cExpression1 и cExpression2 из них удаляются все конечные пробелы. Если установка SET COMPATIBLE равна OFF или FOXPLUS, все конечные пробелы в cExpression1 и cExpression2 участвуют в сравнении.
Записан

С уважением, Oldy.
v.korleone
Помогающий

ua
Offline Offline

« Ответ #23 : 28-04-2009 15:52 » 

Oldy, благодарю за содействие и помощь. Класс! Я только что сделал этот пункт, но не через лайк  Улыбаюсь
Кто знает подскажите со 2-м,3-м запросом. 3-й вообще жесткий, так что буду рад, всем советам по этой теме.
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #24 : 28-04-2009 17:55 » 

Цитата: Sla
что-то мне подсказывает, что конструкция like в фоксе  не совсем "правильная"
Это обманчивое впечатление. Она там правильная. Синтаксическое отличие есть в JetSQL (Access). Там такой же синтаксик, как в упомянутой функции like. Однако в SQL like - не функция, а встроенная синтаксическая конструкция, и FoxPro её обрабатывает как положено.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
v.korleone
Помогающий

ua
Offline Offline

« Ответ #25 : 29-04-2009 04:23 » 

Ребята, давайте по теме Улыбаюсь Я ведь написал, что сделал не через лайк, зачем эти уточнения?
Кто знает подскажите со 2-м,3-м запросом.
2-ю задачу делаю так:
Код:
SET ANSI OFF  
   thisform.text3.Refresh 
   maks=ALLTRIM(thisform.text3.Value) 
   SELECT * FROM database!personal_data;   
   Where MAX(personal_data.num)=maks; 
   INTO CURSOR result
Пишет ошибку "Too few arguments" и подсвечивает последние 4 строки, подскажите где натупил?
« Последнее редактирование: 29-04-2009 05:30 от v.korleone » Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #26 : 29-04-2009 06:10 » 

v.korleone, потому что нельзя использовать агрегатные функции в теле where
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #27 : 29-04-2009 06:36 » 

maks=ALLTRIM(thisform.text3.Value) - maks строка.
Where MAX(personal_data.num)=maks; personal_data.num - тоже строка или другой тип например numeric(X,Y)?
совет прежний: привести переменную maks к виду и типу ожидаемому в поле personal_data.num.
« Последнее редактирование: 29-04-2009 06:38 от Oldy » Записан

С уважением, Oldy.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #28 : 29-04-2009 11:51 » 

Условия по агрегатным функциям записываются в секции вторичного фильтра HAVING, а не первичного фильтра WHERE.

v.korleone, матчасть учить будем или как?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
v.korleone
Помогающий

ua
Offline Offline

« Ответ #29 : 29-04-2009 13:59 » 

У меня практически уже есть решение этой задачи. Подскажите как вывести результат чего либо, допустим ф-и, переменной в текст бокс?
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #30 : 29-04-2009 14:06 » 

текстбокс.велью = результат_функции(переменной)

Хелп, наверное, так ни разу и не открыл

Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
v.korleone
Помогающий

ua
Offline Offline

« Ответ #31 : 29-04-2009 14:19 » 

Sla, открываю хелп, пишу Textbox.... а результат можешь сам посмотреть... нету там ничего, по крайней мере если так писать как я. Спасибо!
Кстате... фигня все равно...
Есть вот эта строчка которая все отлично считает, но выводит не в текст-бокс, а в новом окне в таблицу:
Код:
Select max(personal_data.num) from database!personal_data
куда же лепить текст-бокс?
« Последнее редактирование: 29-04-2009 14:23 от v.korleone » Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #32 : 29-04-2009 14:36 » 

v.korleone, я ж тебе сказал - я не знаю фокса, и... знать не хочу.
Не верю
Если ты уже достал значение surn откуда-то то и смотри как его туда вернуть назад

а то что textbox есть, уверен процентов на 90
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
v.korleone
Помогающий

ua
Offline Offline

« Ответ #33 : 29-04-2009 14:44 » 

текст-бокс есть не вопрос, но что там написано о нем? Написано не то, что мне нужно. Тут совсем другая конструкция чем там. Насчет  "surn" там использовались переменные, а здесь нет.   
Записан
v.korleone
Помогающий

ua
Offline Offline

« Ответ #34 : 29-04-2009 15:36 » 

Делаю так:
   
Код:
num=thisform.text3.Value  
   Select count(*) from database!personal_data WHERE personal_data.num=num 
   thisform.text3.value=num   
   thisform.refresh()
Все работает, но выводит мое значение в другом окне. А я ведь хочу в указанном мною текст-боксе. Что делать?
Записан
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #35 : 29-04-2009 16:15 » 

v.korleone, у тебя в результате выполнения запроса меняется активное окно, и thisform указывает уже на него. самое интересное, что результат запроса тобою не используется. Вариантов как всегда несколько:
1. вместо "thisform" явно указывать имя формы
2. используя кляузу "INTO" или "TO" построить запрос так, чтобы результат автоматически не вызывал окно "browse"
« Последнее редактирование: 29-04-2009 16:21 от Oldy » Записан

С уважением, Oldy.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #36 : 29-04-2009 18:39 » 

Цитата: v.korleone
У меня практически уже есть решение этой задачи.
Это не отменяет необходимости изучения матчасти. А её ты не знаешь - это очевидно.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
v.korleone
Помогающий

ua
Offline Offline

« Ответ #37 : 30-04-2009 04:13 » 

Задание, сделал. Едем дальше.
Записан
v.korleone
Помогающий

ua
Offline Offline

« Ответ #38 : 01-05-2009 06:42 » 

Запрос_3, делаю так:
Код:
   tmp=thisform.text4.Value 
   SELECT * FROM database!service_data;   
   WHERE DATE() BETWEEN holiday_begin AND holiday_end  into cursor tmp
   thisform.text4.value=tmp   
   thisform.refresh()
Ничего не считает и не выводит, но компилится без ошибок. Ваши предложения.
Записан
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #39 : 01-05-2009 09:24 » 

уточни:
1. какое значение имеет переменная "tmp"?
2. чему равно значение holiday_begin?
3. чему равно значение holiday_end?
4. какое поле таблицы service_data сравнивается с этими значениями?
5. каким образом данные из временной таблицы (cursor tmp) попадут куда либо?
6. зачем это - "thisform.text4.value=tmp", разве там менялись значения? 
7. последнее. Что должно было получиться?
« Последнее редактирование: 01-05-2009 09:32 от Oldy » Записан

С уважением, Oldy.
v.korleone
Помогающий

ua
Offline Offline

« Ответ #40 : 01-05-2009 13:31 » 

1. переменной "tmp" присваивается результат вычислений и показывается в текст-боксе.
2. holiday_begin - это столбец, в котором введены даты начала отпусков сотрудников предприятия.
3. holiday_end - это столбец, в котором введены даты конца отпусков сотрудников предприятия.
4. насколько я понимаю здесь должна сравниваться текущая дата на момент пользования БД, поэтому воспользовался функцией DATE(), которая возвращает текущую дату.
5. путем присоения "thisform.text4.value=tmp" (здесь не уверен можеть быть баг)
6. см.5. Думаю, что менялись, но опять таки...
7. Должно получится количество людей в отпуске, которое будет записано в текст-бокс4.
P.S. В функции BETWEEN по хелпу 3 аргумента:
Код:
BETWEEN(eTestValue, eLowValue, eHighValue)
eTestValue - задает выражение, значение которого проверяет ф-я BETWEEN().
eLowValue - задает нижнюю границу диапазона.
eHighValue - задает верхнюю границу диапазона.
У меня как видите в коде 2 аргумента, но почему-то все компилится. Я так думаю, если в ф-и указать, больше или меньше аргументов, должно написать ошибку при компиляции. Если я не прав, то что указывать на месте eTestValue?     
Записан
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #41 : 02-05-2009 06:28 » 

ваш запрос (SELECT *) выбирает все записи у которых (WHERE - здесь полный бред потому как не верно введено условие отбора) во веменную таблицу (cursor) с именем tmp. можно посмотреть результаты запоса последовательно вызвав команды USE tmp и BROWSE, но вряд-ли получится засунуть весь кортеж, а он можен быть значительным, в textbox. Поскольку условие
Цитата
7. Должно получится количество людей в отпуске, которое будет записано в текст-бокс4.
далее, по строкам:
Код:
tmp=thisform.text4.Value - не нужно совсем.
SELECT * FROM database!service_data WHERE DATE() BETWEEN holiday_begin AND holiday_end  into cursor tmp - нужно заменить заменить на
SELECT COUNT(*)FROM database!service_data WHERE holiday_begin>=DATE() AND holiday_end<=DATE() into m.tmp - здесь смотри как помещать результаты запроса в переменную),
 и наконец:
thisform.text4.value=m.tmp   
thisform.refresh()

Записан

С уважением, Oldy.
v.korleone
Помогающий

ua
Offline Offline

« Ответ #42 : 03-05-2009 06:27 » 

Oldy, делаю так:
Код:
   SELECT COUNT(*) FROM database!service_data WHERE holiday_begin>=DATE() AND holiday_end<=DATE() into m.tmp
   thisform.text4.value=m.tmp   
   thisform.refresh()
Пишет "синтаксическая ошибка" и подсвечивает 1-ю строку... 
Записан
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #43 : 03-05-2009 08:29 » 

Вполне может быть и ошибка.
Цитата
...into m.tmp - здесь смотри как помещать результаты запроса в переменную
имелось ввиду - смотри в хелпе как помещать результаты в переменную.
попробуй INTO ARRAY tmp. Хотя конечно можно и через cursor:
Код:
SELECT COUNT(*) AS result FROM database!service_data WHERE holiday_begin>=DATE() AND holiday_end<=DATE() INTO CURSOR tmp
USE tmp
GO TOP
thisform.text4.value=tmp.result
thisform.refresh()   
USE
« Последнее редактирование: 03-05-2009 08:44 от Oldy » Записан

С уважением, Oldy.
v.korleone
Помогающий

ua
Offline Offline

« Ответ #44 : 03-05-2009 09:56 » 

Oldy, последний код, компилится, но при нажатии на кнопку выводится сообщение "File '...\tmp.dbf' does not exist" т.е. файл tmp.dbf не существует. Это действительно так, поскольку у меня его нет. Поскольку .dbf  это таблица, пробовал указать свою таблицу (service_data), пишет "file is in use" т.е. используется. Ввожу в хелпе "INTO"  вообще нет результатов, ввожу "cursor" там просто 1-2 предложения, описывающие его. Это все в русском хелпе.
И еще вопрос:
Цитата
хелпе как помещать результаты в переменную
- где именно?
Сейчас буду смотреть в английском.
P.S. Спасибо, за понимание, коды и ответы на вопросы.
Записан
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #45 : 03-05-2009 10:53 » 

cursor tmp это временная таблица создается в результате выполнения запроса
SELECT ... FROM ... WHERE ... INTO ...
INTO описывается как часть команы SELECT, там и нужно смотреть. Попробуй закомментировать (&&) строку USE tmp и повтори компиляцию
.........
Да, все верно, вместо USE tmp нужно SELECT tmp
« Последнее редактирование: 03-05-2009 11:04 от Oldy » Записан

С уважением, Oldy.
v.korleone
Помогающий

ua
Offline Offline

« Ответ #46 : 03-05-2009 11:44 » 

Oldy, большое спасибо, начало выводить, но выводит 0, как в случае с коментированием USE tmp, так и при написании SELECT tmp. Обратил внимание, что в таблице записи зделаны так: (Мясяц, День, Год), а ф-я DATE() выдает (Год, Месяц, День). Может из-за этого ноль? Если да то, как изменить формат ввода в таблице?
Знаете, новое решение, этой задачи? Вот, может Вам, как и мне, будет полезно:
Код:
   SELECT * FROM database!service_data WHERE DATE() BETWEEN holiday_begin AND holiday_end  into cursor cur    
   thisform.text4.value=_tally
Вся загвоздка в этой "_tally". Очень интересная штука, описание есть в русском хелпе.
Oldy, большое спасибо, за поддержку.    
« Последнее редактирование: 03-05-2009 11:53 от v.korleone » Записан
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #47 : 03-05-2009 11:51 » 

в таблице никак. см. команду SET DATE
Записан

С уважением, Oldy.
v.korleone
Помогающий

ua
Offline Offline

« Ответ #48 : 04-05-2009 06:42 » 

Задача, подсчет кол-ва детей сотрудников. Делаю так:
Код:
SELECT SUM(quantity_children) FROM database!family_data into cursor cur    
thisform.text6.value=_tally
Выводит результат 1, который не есть правильным результатом В чем проблема? Думаю может дело в "_tally"?
Записан
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #49 : 04-05-2009 07:50 » 

а что такое _tally, и прчем здесь записи? может если только на каждого ребенка добвлена своя запись? Тогда SUM и нафиг не нужна.
Цитата
Visual FoxPro 9.0 SP2
_TALLY System Variable

Contains the number of records processed by the most recently executed table command.

Результат находится во временной таблице "cur", в поле с возможным названием "SUM". Убедиться в этом можно выполнив после запроса следующие команды:
SELECT cur
BROWSE

и с ним поступать надо как и в предыдущем посте т.е. присвоить thisform.text6.value значение находящееся в "CUR.SUM"
« Последнее редактирование: 04-05-2009 08:01 от Oldy » Записан

С уважением, Oldy.
v.korleone
Помогающий

ua
Offline Offline

« Ответ #50 : 04-05-2009 08:01 » 

РЕШЕНО
Записан
v.korleone
Помогающий

ua
Offline Offline

« Ответ #51 : 04-05-2009 08:11 » 

Oldy, благодарю за содействие, помощь и подержку. Тема закрыта.
Записан
Страниц: 1 2 [Все]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines