Posty bez odpowiedzi |oraz Aktywne tematy Dzisiaj jest 2024-11-23, 07:34x



Odpowiedz w temacie  [ Posty: 14 ] 
Data dualna dual_poc 
Autor Wiadomość

Rejestracja: 2008-08-22, 23:16
Posty: 3
Post Data dualna dual_poc
Witam,
poszukuję informacji jak skonwertować datę dualną w bazie w wersji Btrieve z tabeli WARTOSCI_KADR (http://www.mix-soft.pl/wiedza/opiskd200 ... TOSCI_KADR)

Z góry dzięki za pomoc!


2008-08-22, 23:19
Wyświetl profil
Autor Wiadomość
 


Ekspert
Ekspert

Rejestracja: 2007-11-16, 15:08
Posty: 4000
Pomógł: 448
Post 
róźnica pomiędzy "9999-12-31" a datą zawartą w polu dual_poc to właśnie data której szukasz.

_________________
Skontaktuj się z Ekspertem | Zamów dodatek

tel. 22 7 538 538
ekspert@mojaSymfonia.pl
http://www.mojaSymfonia.pl


2008-08-23, 18:10
Wyświetl profil

Rejestracja: 2008-08-22, 23:16
Posty: 3
Post 
A czy mógłbym prosić o jakiś przykład konwersji w sqlu accessowym bądź tsqlu ?

Obecnie walczę w taki sposób:

select dateadd(day,-(select datediff(day,'5000/01/01','7992/3/1')),'5000/01/01')

Metoda ta działa dla niektórych dat ale dla większości nie, obawiam się że zaproponowana metoda różnicy z 9999-12-31 również nie będzie skuteczna w wielu przypadkach. Np

2005-11-02 = 7994-3-2, konwersja działa
2005-11-01 = 7994-3-3, konwersja działa

2006-01-01 = 7993-12-31 tu już nie. Wrzucenie 7993-12-31 do fcji powyżej daje 2006-01-02. W praktyce dla wielu dat występują różnice rzędu 1-3 dni...

Być może operację trzeba przeprowadzać na poszczególnych paczkach bajtów utrzymujących kolejne fragmenty daty, ale nie mam pojęcia jak...


2008-08-23, 19:04
Wyświetl profil
Ekspert
Ekspert

Rejestracja: 2007-11-16, 15:08
Posty: 4000
Pomógł: 448
Post 
nie ma takiej funkcji w SQL'u.
To nie jest zwykła różnica pomiędzy datami. czyli DATEDIFF nie tu się nie przyda.

Cytuj:
2006-01-01 = 7993-12-31 tu już nie.


Kod:
9999   -   7993   =   2006
13   -   12   =   01
32   -   31   =   01


Działania należy przeprowadzić pomiędzy poszczególnymi elementami (rrrr,mm,dd) a nie całymi datami i samodzielnie poskładać datę do kupy.

_________________
Skontaktuj się z Ekspertem | Zamów dodatek

tel. 22 7 538 538
ekspert@mojaSymfonia.pl
http://www.mojaSymfonia.pl


2008-08-24, 15:03
Wyświetl profil
Ekspert
Ekspert

Rejestracja: 2007-11-16, 15:08
Posty: 4000
Pomógł: 448
Post 
Dodatkowo może zdarzyć się tak, że odczytując dane z Kadr i Płac za pomocą Pervasiva i ODBC wystąpi błąd w polu dual_poc.
O ile BTRIEVE nie sprawa poprawności daty w tym polu o tyle Pervasive sprawdza i nie odczyta błędnej wartości.

_________________
Skontaktuj się z Ekspertem | Zamów dodatek

tel. 22 7 538 538
ekspert@mojaSymfonia.pl
http://www.mojaSymfonia.pl


2008-08-24, 15:07
Wyświetl profil

Rejestracja: 2008-08-22, 23:16
Posty: 3
Post 
Kod:
9999    -    7993    =    2006
13    -    12    =    01
32    -    31    =    01


Stosując takie podejście, wówczas nie skonwertuję poprawnie dat
7994-3-2, 7994-3-3 otrzymując odpowiednio 2005-10-30 oraz 2005-10-29 a jest to prezentowne w systemie jako 2005-11-02 i 2005-11-01.

Zatem jeśli dobrze zrozumiałem, metoda jest poprawna tyle tylko daty odczytywane przz pervasive'a są niepoprawne ?

Może wobec tego mógłbym prosić o radę czym powinienem je odczytać aby móc poprawnie wyeksportować do innych baz ? Dysponuję plikami DAT i DDF.


2008-08-24, 15:30
Wyświetl profil
Ekspert
Ekspert

Rejestracja: 2007-11-16, 15:08
Posty: 4000
Pomógł: 448
Post 
możez jeszcze zmienić w tabelach systemowych typ pola dual_poc z 3 na 1, spowoduje to wyświetlanie daty w formie liczby int.

nie wiem w czym Ci będzie to pomocne. Napewno nie wywali się Pervasive jak spotka w tym polu "głupią" datę o której pisałem wczesniej.

_________________
Skontaktuj się z Ekspertem | Zamów dodatek

tel. 22 7 538 538
ekspert@mojaSymfonia.pl
http://www.mojaSymfonia.pl


2008-08-25, 22:24
Wyświetl profil

Rejestracja: 2007-12-13, 23:19
Posty: 367
Pomógł: 2
Post 
a może po prostu tak.....


Kod:
string sub dat(long sP)
long s(5)
s(1) = sP&0xffff0000
s(2) = s(1) / 65536

s(1) = sP&0x0000ff00
s(3) = s(1) / 256

s(1) = sP&0x000000ff   
s(4) = s(1)

dat = using "%4.4d-%2.2d-%2.2d",s(2),s(3),s(4)

endsub


Ostatnio zmieniony 2008-09-02, 12:29 przez darek.007, łącznie zmieniany 1 raz



2008-09-02, 09:49
Wyświetl profil
Ekspert
Ekspert

Rejestracja: 2008-04-07, 13:26
Posty: 208
Pomógł: 2
Post 
rafal pisze:
możez jeszcze zmienić w tabelach systemowych typ pola dual_poc z 3 na 1, spowoduje to wyświetlanie daty w formie liczby int.

nie wiem w czym Ci będzie to pomocne. Napewno nie wywali się Pervasive jak spotka w tym polu "głupią" datę o której pisałem wczesniej.

darek.007 pisze:
a może po prostu tak.....


Kod:
string sub dat(long sP)
long s(5)
s(1) = sP&0xffff0000
s(2) = s(1) / 65536

s(1) = sP&0x0000ff00
s(3) = s(1) / 256

s(1) = sP&0x000000ff   
s(4) = s(1)

dat = using "%4.4d-%2.2d-%2.2d",s(2),s(3),s(4)

endsub


łącząc te dwie rzeczy otrzymujemy :
Kod:
select
CAST(
CAST(CAST((9999-(dual_poc&(-65536))/65536) as INTEGER) as varchar(4))+'-'+
CAST(CAST((13-(dual_poc & 65280)/256) as INTEGER) as varchar(2))+'-'+
CAST(CAST((31-(dual_poc&255)) as INTEGER) as varchar(2))
as DATE)
from "WARTOSCI_KADR"


2008-09-02, 21:50
Wyświetl profil
Ekspert
Ekspert

Rejestracja: 2007-11-16, 15:08
Posty: 4000
Pomógł: 448
Post 
Kod:
date d
d.FromStr("7994-3-2")
print d.DecodeDual()

_________________
Skontaktuj się z Ekspertem | Zamów dodatek

tel. 22 7 538 538
ekspert@mojaSymfonia.pl
http://www.mojaSymfonia.pl


2009-05-28, 15:41
Wyświetl profil

Rejestracja: 2014-06-23, 12:25
Posty: 3
Post Re: Data dualna dual_poc
Witam,
Mam podobny problem w symfoni KDP 2014 gdzie w bazie pervasive w tabeli "INS_SCH_CZAS" występuje kolumna dual_poc.
Aby otrzymać dual_poc należy dokonać odejmowania np. :

9999 - 2014 = 7985
13 - 7 = 6
32 - 10 = 22

Ale co zrobić jeśli posiadamy datę 2014-7-1

9999 - 2014 = 7985
13 - 7 = 6
32 - 1 = 31

Niestety pervasive nie przyjmie daty 7985-6-31 ponieważ czerwiec ma tylko 30 dni.


2014-09-03, 09:44
Wyświetl profil
Ekspert
Ekspert

Rejestracja: 2007-11-16, 15:08
Posty: 4000
Pomógł: 448
Post Re: Data dualna dual_poc
Czy chcesz zapisać Pervasivem datę do bazy czy tylko odczytać?

Bo jak to drugie to co ma Ci nie przyjać?

_________________
Skontaktuj się z Ekspertem | Zamów dodatek

tel. 22 7 538 538
ekspert@mojaSymfonia.pl
http://www.mojaSymfonia.pl


2014-09-03, 09:49
Wyświetl profil

Rejestracja: 2014-06-23, 12:25
Posty: 3
Post Re: Data dualna dual_poc
Potrzebuję dodać ręcznie wartość dual_poc dla daty 2014-07-01.
Pervasive przy próbie dodania takiej wartości do bazy rzuca błąd :

<<<<<<<<<<<<<<<<<<<<<<<<
[LNA][Pervasive][ODBC Engine Interface]'7985-06-31' is an invalid date value. If using '0000-00-00', replace it with NULL for a constant, or IS NULL in expressions.
>>>>>>>>>>>>>>>>>>>>>>>>


2014-09-03, 10:57
Wyświetl profil

Rejestracja: 2015-01-25, 20:22
Posty: 1
Post Re: Data dualna dual_poc
Aby uzyskać datę dualną za pomocą Pervasive:

1. Należy zmienić deklarację typy pola z date na integer. Używamy do tego ustawień w tabelach systemowych danej bazy (przykład dla KDP 2015a - dla wcześniejszych wersji Symfonii nazwa pola jest 'dual_poc'). Zmiana jest bezpieczna, nie ingeruje w dane firmy, a do jej odwrócenia wystarczy jeszcze raz wygenerować ddf-y.

Kod:
update X$Field
set Xe$DataType = 1
where Xe$Name = 'begin_date_dual'

Należy wyjść i jeszcze raz wejść do PCC - zamiast daty w tym polu powinna być widoczna bardzo duża liczba.

2. Taką liczbę można już skonwertować na datę według schematów podanych powyżej, ale ja bardziej wolę korzystać z funkcji 'dateadd', dzięki czemu mam pewność, że kwerenda zawsze się wykona:
Kod:
select begin_date_dual
   ,cast(dateadd(day,CAST(32-(begin_date_dual&255) as INTEGER)-1,
      dateadd(month,CAST(13-(begin_date_dual & 65280)/256 as INTEGER)-1,
         dateadd(year,CAST(9999-(begin_date_dual&(-65536))/65536 as INTEGER)-1,
            '0001-1-1'))) as date)
from "HRV_ROWS"


Voil'a, działa!
Kod:
begin_date_dual   EXPR_1
523370783    12/1/2013


2015-01-25, 20:50
Wyświetl profil
Wyświetl posty nie starsze niż:  Sortuj wg  
Odpowiedz w temacie   [ Posty: 14 ] 
   Podobne tematy   Autor   Odpowiedzi   Odsłony   Ostatni post 
Na tym forum nie ma nowych nieprzeczytanych postów. import WNT z obiegu dokumentów a data dok, data oper.

w Programy Księgowe

nataliag

0

2154

2021-08-10, 13:56

nataliag Wyświetl najnowszy post

Na tym forum nie ma nowych nieprzeczytanych postów. generowanie raportu: data zatrudnienia, data końca umowy

w Programy Kadrowo Płacowe

Jana

2

3217

2017-09-01, 07:48

Jana Wyświetl najnowszy post

Na tym forum nie ma nowych nieprzeczytanych postów. Data wystawienia faktury kosztowej a data sprzedaży FK

w Programy Księgowe

patryczekqq

1

3043

2018-06-07, 13:38

perek Wyświetl najnowszy post

Na tym forum nie ma nowych nieprzeczytanych postów. Załączniki Data wprowazenia a data dokumentu Symfonia fk 2011 1c

w Programy Księgowe

Agulina

4

5393

2012-01-19, 09:29

Agulina Wyświetl najnowszy post



Kto jest online

Użytkownicy przeglądający to forum: Nie ma żadnego zarejestrowanego użytkownika i 14 gości


Nie możesz tworzyć nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Przejdź do:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Support forum phpbb by phpBB Assistant