Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.03;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.015 c
14-8612
SergP
2003-10-15 09:25
2003.11.03
Richedit. Как правильно изменить начертание шрифта?


4-8728
aldapooh
2003-08-28 13:23
2003.11.03
NetUserGetInfo


1-8521
}{enon
2003-10-19 17:16
2003.11.03
Данные OleContainer


1-8481
Evgeny
2003-10-24 07:10
2003.11.03
вызов PopupMenu


3-8331
bav
2003-10-12 11:11
2003.11.03
Русский HELP к Apollo 5.0