Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.011 c
14-8642
Leon Crom
2003-10-14 16:35
2003.11.03
интересно....


6-8581
Анатолий
2003-09-06 10:30
2003.11.03
Как сделать выбор сетевого ресурса как ...


6-8575
Поляков Владимир Викторович
2003-09-09 12:22
2003.11.03
Voice & UDP


3-8300
KIR
2003-10-13 15:30
2003.11.03
Соргтировка по агрегированному полю в IB


8-8546
LK
2003-06-29 15:37
2003.11.03
Запись музыки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский