![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
sql [D6, dBase, FoxPro]
rosl © (2003-10-09 02:32:00)
Уважаемые МАСТЕРА!!!
Я наверное всем надоел, но еще вопросик по 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), надо чтоб подставлялся ближайший рабочий день
спасибо
rosl (2003-10-14 03:45:00) [1]
Спасибо всем за ответы
разобрался уже сам.
{Праздничные дни}
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;
Dmitry (2003-10-13 20:39:00) [2]
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-10 16:16:00) [3]
и как это вставить в цикл?
извиняюсь, я ещё новичок
ROSL (2003-10-10 16:13:00) [4]
Я ROSL
последнее сообщение не моё
а тому кто зто писал, советую в следующий раз не трусить и подписываться своим именем
rosl (2003-10-10 10:55:00) [5]
И вообще, достали чушь пороть.
Deniz (2003-10-10 08:54:00) [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 08:47:00) [7]
народ
в принципе мне нужна проверка справочника внутри цикла приёма записей (как с выходными днями) см. мой ответ выше
например:
if Module_baza.Q_in.FieldByName("col001").AsDateTime = Module_baza.table_hol.fieldbyname("hol").asdatetime then
//дальше сам разберусь
как сделать, чтоб проверка шла по всем записям table_hol.fieldbyname("hol")
rosl (2003-10-10 08:00:00) [8]
с рабочими днами закончил
установил 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
и т.д.
Deniz (2003-10-10 06:45:00) [9]
Узнает, если правильно объяснить(Extract вроде вытаскивает DayOfWeek это аналог по Delphi)! Но вот ближайший рабочий день, это проблема, по крайней мере для DBF
rosl (2003-10-10 02:26:00) [10]
а что делать???
может кто сталкивался с подобной проблемой?
Кщд (2003-10-09 07:00:00) [11]
откуда сиквел узнает, когда суббота-воскресенье?