Форум: "Базы";
Текущий архив: 2003.11.03;
Скачать: [xml.tar.bz2];
Внизsql Найти похожие ветки
← →
rosl (2003-10-09 02:32) [0]Уважаемые МАСТЕРА!!!
Я наверное всем надоел, но еще вопросик по sql
делаю такой запрос, к записям подставляются данные из справочников.
select distinct name, col004, col001, col005, col010, col009, col009 / 100 * percent, inn, code_inc, data
from input\results.dbf
LEFT JOIN sprav\payers.dbf ON col005 = inn
LEFT JOIN sprav\income.dbf ON col010 = code_inc
WHERE (inn IS NULL) OR (code_inc IS NULL)";
но в поле col001 стоит дата платежа, нужно чтоб в поле data подставлялось
то же значение, но если день выпадает на субботу, воскресенье или дату из
справочника праздничных дней (hol.dbf), надо чтоб подставлялся ближайший рабочий день
спасибо
← →
Кщд (2003-10-09 07:00) [1]откуда сиквел узнает, когда суббота-воскресенье?
← →
rosl (2003-10-10 02:26) [2]а что делать???
может кто сталкивался с подобной проблемой?
← →
Deniz (2003-10-10 06:45) [3]Узнает, если правильно объяснить(Extract вроде вытаскивает DayOfWeek это аналог по Delphi)! Но вот ближайший рабочий день, это проблема, по крайней мере для DBF
← →
rosl (2003-10-10 08:00) [4]с рабочими днами закончил
установил esbdates
uses
ESBRtns, ESBDates
var
date_in: tdatetime;
date_in:=Module_baza.Q_in.FieldByName("col001").AsDateTime;
Module_baza.T_baza.FieldByName("data_in").AsDateTime:=Module_baza.Q_in.FieldByName("col001").AsDateTime;
if (ISODayOfWeek(date_in)>5) then
Module_baza.T_baza.FieldByName("data_in").AsDateTime:=Module_baza.Q_in.FieldByName("col001").AsDateTime + 2;
if (ISODayOfWeek(date_in)>6) then
Module_baza.T_baza.FieldByName("data_in").AsDateTime:=Module_baza.Q_in.FieldByName("col001").AsDateTime + 1;
а как быть с праздниками справочник есть
поле1
01.01.2003
08.03.2003
и т.д.
← →
rosl (2003-10-10 08:47) [5]народ
в принципе мне нужна проверка справочника внутри цикла приёма записей (как с выходными днями) см. мой ответ выше
например:
if Module_baza.Q_in.FieldByName("col001").AsDateTime = Module_baza.table_hol.fieldbyname("hol").asdatetime then
//дальше сам разберусь
как сделать, чтоб проверка шла по всем записям table_hol.fieldbyname("hol")
← →
Deniz (2003-10-10 08:54) [6]
function IsHoliday(aDate : TDate):Boolean;
begin
with Query do begin
SQL.Clear;
SQL.Add("select * from table_hol where hol = :Date");
Prepare;
Params[0].asDateTime:=aDate;
Open;
Result:=not IsEmpty;
Close
end;
end;
← →
rosl (2003-10-10 10:55) [7]И вообще, достали чушь пороть.
← →
ROSL (2003-10-10 16:13) [8]Я ROSL
последнее сообщение не моё
а тому кто зто писал, советую в следующий раз не трусить и подписываться своим именем
← →
rosl (2003-10-10 16:16) [9]и как это вставить в цикл?
извиняюсь, я ещё новичок
← →
Dmitry (2003-10-13 20:39) [10]
function IsHoliday(aDate : TDate):Boolean;
begin
with Query do begin
SQL.Clear;
SQL.Add("select * from table_hol where hol = :Date");
Prepare;
Params[0].asDateTime:=aDate;
Open;
Result:=not IsEmpty;
Close
end;
end;
var tmp:TDatetime;
boo:boolean;
While not (Query1.eof) do
begin
...
boo:=true;
tmp:=query1.fieldbyname("col001").asdatetime;
while boo do
begin
if IsHoliday(tmp) then
begin
tmp:=tmp+1;
end else
boo:=false;
end;
\\ и вот тут присваивай tmp чему нужно, например:
Module_baza.T_baza.FieldByName("data_in").AsDateTime:=tmp;
...
Query1.next;
end;
← →
rosl (2003-10-14 03:45) [11]Спасибо всем за ответы
разобрался уже сам.
{Праздничные дни}
Module_sprav.T_hol.First;
Module_sprav.T_hol.SetKey;
Module_sprav.T_hol.FieldByName("data").AsDateTime:=Module_baza.T_baza.FieldByName("data_in").AsDateTime;
Module_sprav.T_hol.GotoKey;
if not Module_sprav.T_hol.GotoKey then
Module_sprav.T_hol.First;
if Module_sprav.T_hol.FieldByName("data").AsDateTime = Module_baza.T_baza.FieldByName("data_in").AsDateTime then
Module_baza.T_baza.FieldByName("data_in").AsDateTime:=Module_baza.T_baza.FieldByName("data_in").AsDateTime + 1;
{Выходные дни}
if (ISODayOfWeek(Module_baza.T_baza.FieldByName("data_in").AsDateTime)>6) then
Module_baza.T_baza.FieldByName("data_in").AsDateTime:=Module_baza.T_baza.FieldByName("data_in").AsDateTime + 1;
if (ISODayOfWeek(Module_baza.T_baza.FieldByName("data_in").AsDateTime)>5) then
Module_baza.T_baza.FieldByName("data_in").AsDateTime:=Module_baza.T_baza.FieldByName("data_in").AsDateTime + 2;
{Праздничные дни}
Module_sprav.T_hol.First;
Module_sprav.T_hol.SetKey;
Module_sprav.T_hol.FieldByName("data").AsDateTime:=Module_baza.T_baza.FieldByName("data_in").AsDateTime;
Module_sprav.T_hol.GotoKey;
if not Module_sprav.T_hol.GotoKey then
Module_sprav.T_hol.First;
if Module_sprav.T_hol.FieldByName("data").AsDateTime = Module_baza.T_baza.FieldByName("data_in").AsDateTime then
Module_baza.T_baza.FieldByName("data_in").AsDateTime:=Module_baza.T_baza.FieldByName("data_in").AsDateTime + 1;
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.11.03;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.01 c