Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.06.2007, 14:05   #11
Pitbull
детский тренер
Форумчанин
 
Аватар для Pitbull
 
Регистрация: 08.06.2007
Сообщений: 532
По умолчанию

Цитата:
Сообщение от Pitbull Посмотреть сообщение
давай я тебе напишу пример своей процедуры ..Простенькой, но по ней можно раздуплиться, что такое процедуры... Эта процедура считает МАКсимум кол-во отгруженного товара со склада.... В качестве входных данных - имя товара, а выход максимум товара:

create procedure find_max_kol(in_tovar varchar(20))
returns(max_kolvo integer) as
begin
Select Max(kolvo) from rashod where tovar = :in_tovar
into :max_kolvo;
suspend; // передача данных
end;

в Query1.sql прописываешь:
select * from find_max_kol(aram1);

по нажатию кнопки:
begin
query1.close;
qury1.parambyname('param1').value:= table.fieldbyname('Tovar').value;
query1.open;
end;


В твоей ситуации нужно передавать данные Время1(ушел) и Время2(пришел), а в процедуре расчитывать Время3(проведенное) и возвращаешь ее. Например:
create procedure find_time(in_time1 time, in_time2 time)
returns(time_rab time) as
begin
time_rab = :in_time1 - in_time2;
suspend; // передача данных
end;

Дбавляешь TstoredProce и Ttable.... и потом по событию:
storedProce1.unPrepare;
storedProce1.PramByName('in_time2') .value := table1.fieldByname('Дата_входа').va lue;
storedProce1.PramByName('in_time1') .value := table1.fieldByname('Дата_выхода').v alue;
storedProce1.prepare;
storedProce1.execproc;
lable1.caption := timeTostr(storedProce1.paramByName( 'time_rab').value);
писал все в интернетКлубе... Компилить негде было...Т.ч извините, если где-то быканулся
Я злой и страФный серррый воФк, и в пАрАсятах знаю толк - ppp ppp pp p pp pp
Pitbull вне форума Ответить с цитированием
Старый 26.06.2007, 22:03   #12
Tatyana
 
Регистрация: 06.06.2007
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Pitbull Посмотреть сообщение
В твоей ситуации нужно передавать данные Время1(ушел) и Время2(пришел), а в процедуре расчитывать Время3(проведенное) и возвращаешь ее. ;
нет, не так....
передавать мы просто должны 2 даты (начало периода и соответственно конец периода за который нам нужен отчет) А "ушел" и "пришел"- это столбцы таблицы в БД...
еще проблема в том, что за 1 день м.б. несколько событий "пришел"(кол1) и "ушел"(кол2), причем кол1 не обязательно совпадает с кол2. это тоже надо как-то учесть...

P.S. за процедурку спасибо, кажется поняла
Tatyana вне форума Ответить с цитированием
Старый 27.06.2007, 08:44   #13
Pitbull
детский тренер
Форумчанин
 
Аватар для Pitbull
 
Регистрация: 08.06.2007
Сообщений: 532
По умолчанию

Цитата:
Сообщение от Tatyana Посмотреть сообщение
нет, не так....
передавать мы просто должны 2 даты (начало периода и соответственно конец периода за который нам нужен отчет) А "ушел" и "пришел"- это столбцы таблицы в БД...
еще проблема в том, что за 1 день м.б. несколько событий "пришел"(кол1) и "ушел"(кол2), причем кол1 не обязательно совпадает с кол2. это тоже надо как-то учесть...

P.S. за процедурку спасибо, кажется поняла
зай, я тебе пример дал , как делаются процедуры...
Или ты хочешь, чтобы я тебе всю прогу напедалил ))
Я злой и страФный серррый воФк, и в пАрАсятах знаю толк - ppp ppp pp p pp pp
Pitbull вне форума Ответить с цитированием
Старый 27.06.2007, 09:48   #14
Andrei
Форумчанин
 
Регистрация: 20.06.2007
Сообщений: 270
По умолчанию

Цитата:
Сообщение от Tatyana Посмотреть сообщение
нет, не так....
передавать мы просто должны 2 даты (начало периода и соответственно конец периода за который нам нужен отчет) А "ушел" и "пришел"- это столбцы таблицы в БД...
еще проблема в том, что за 1 день м.б. несколько событий "пришел"(кол1) и "ушел"(кол2), причем кол1 не обязательно совпадает с кол2. это тоже надо как-то учесть...
У меня тут возникла красивая идейка по твоему вопросу:

Каждое значение даты можно представить как "интервал" (количетво часов или минут) от "начала периода".

1. Сделай вычисляемые поля, вычисляющие "интервалы" по столбцам "пришел" и "ушел".
2. Просуммируй вычисляемые поля отдельно по "пришел" [SUMM("пришел")] и "ушел" [SUMM("ушел")].
3. Тогда выражение SUMM("ушел")-SUMM("пришел") даст тебе фактическое количество времени, проведенное человеком на рабочем месте.

Реализовать это, я думаю, можно в одном SQL запросе.

------
PS: Если у тебя поля содержат дату и время в формате TIMESTAMP тогда тебе даже не придется писать функцию по преобразованию даты в "интервал". SQL должен поддерживать вычисление интервалов автоматически.

PPS: Я не рассматриваю вопрос определения крайних значений полей "пришел" и "ушел" для заданного промежутка времени. Об этом сама подумай. Я только общую идею подал.
-Кукушка, кукушка! Накукуй мне сто лет!
-А накукуй тебе столько?

(с) Библия. Вольный перевод с древнееврейского.
Andrei вне форума Ответить с цитированием
Старый 27.06.2007, 11:27   #15
Tatyana
 
Регистрация: 06.06.2007
Сообщений: 9
По умолчанию

всем спасибо!
В понедельник попытаюсь реализовать... буду выкладывать варианты на ваше профессиональное суждение )))
Tatyana вне форума Ответить с цитированием
Старый 27.06.2007, 14:12   #16
Pitbull
детский тренер
Форумчанин
 
Аватар для Pitbull
 
Регистрация: 08.06.2007
Сообщений: 532
По умолчанию

Цитата:
Сообщение от Tatyana Посмотреть сообщение
всем спасибо!
В понедельник попытаюсь реализовать... буду выкладывать варианты на ваше профессиональное суждение )))
Танюш, тебе с самого начала советовали использовать вычисляемые поля
Выкинь потом код, оценим.. Лично мне интересно
Я злой и страФный серррый воФк, и в пАрАсятах знаю толк - ppp ppp pp p pp pp
Pitbull вне форума Ответить с цитированием
Старый 29.06.2007, 19:19   #17
ГОСЕАН
Форумчанин
 
Аватар для ГОСЕАН
 
Регистрация: 03.05.2007
Сообщений: 247
По умолчанию

есть вопрос: дана таблица tablakt с полями dakta:DataTime, Nakt:Numeric, vno:integer (время Ч приема акта).

вот запрос: Select dakta, Count(Nakt) as kol, vno
From tablakt
Group By dakta

на форме есть кнопка Button1 и компонент DateTimePicker1.

результат запроса:

kol dakta vno
4 21.06.2007 6
1 21.06.2007 8
5 21.06.2007 15
2 22.06.2007 7
8 22.06.2007 14

задача: необходимо при выборе даты(например в DateTimePicker дата 21.06.2007) подсчитать количество актов kol начиная с выбранной и начиная с 8 (vno) и заканчивая следующим за ним днем (т.е. 22.06.2007) заканчивая 8 (vno) и отправить результат в отчет RavReport. Как это сделать?

Последний раз редактировалось ГОСЕАН; 29.06.2007 в 19:22. Причина: сбиваются колонки
ГОСЕАН вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с датой xDjarx БД в Delphi 38 02.05.2009 14:21
Работа со временем. ekzi Общие вопросы C/C++ 1 22.07.2008 15:29
Работа с датой Dunpeal Общие вопросы Delphi 5 15.05.2008 12:05
Работа со временем joker Общие вопросы Delphi 4 20.04.2008 15:01
массив сохранение информации и манипуляции oblom Общие вопросы C/C++ 19 04.02.2008 02:28