Format Data zmienia rok na 1905

Użytkowanie programu bazodanowego
Katarzyna662
Posty: 5
Rejestracja: wt lip 21, 2015 3:11 pm

Format Data zmienia rok na 1905

Post autor: Katarzyna662 »

Witam, wszystkich. Jestem właśnie w trakcie stażu w bibliotece podczas, które mam za zadanie utworzenie Bazy Danych dla artykułów archiwalnych. W domu sama używam OpenOffice'a ale wcześniej do Baz Danych używałam raczej Accesa. Teraz pracuję na OpenOffice'a Base. Tworzę raczej proste Bazy Danych na Kreatorach i graficznie. Nie znam żadnych języków z tym związanych więc tłumaczcie mi raczej graficznie niż kodem źródłowym ;) Przy tworzeniu mojej Bazy napotkałam na problem którego nie wiem jak ominąć, a jest on bardzo ważny i dalej nic nie zrobię jeżeli go nie rozwiążę. Tak więc stworzyłam za pomocą kreatora Tabelę z polami:

Kod: Zaznacz cały

ID - Format (F): Intenger , Tytuł gazety - F: Tekst , Dodatek - F: Tekst , Tytuł artykułu - F: Tekst , Data - F:Data, Numer - F: Liczba, Strona - F: Liczba, Zakład - F: Tekst, Opis - F: Tekst, Zdjęcie - F: Obraz.

Mam problem przy formacie

Kod: Zaznacz cały

 Data
, gdyż niektóre artykuły, które mam są źle opisane, bo nie wszystkie mają pełną datę Dzień, Miesiąc i Rok niektóre z nich, a nawet i większość ma tylko Rok i Miesiąc. Opisywała ją inna stażystka, która nie za bardzo się do tego przyłożyła no i zostawiła to w takim stanie ... I ja teraz tworzę z tego Bazę Danych. Problem w tym ponieważ, gdy wprowadzam do tego pola format

Kod: Zaznacz cały

Data
z kodem

Kod: Zaznacz cały

YYYY
żeby wpisywać tylko rok to cokolwiek tam nie wpiszę np. 1994 to automatycznie program zmienia mi wszystko na 1905 lub inne cuda. Wszystko ! Problem też jest jak chcę zrobić osobne pole tylko dla miesiąca z kodem MMMM wtedy cokolwiek nie wpiszę np. lipiec to zmienia mi na grudzień ! Grudzień widnieje podany w przykładach formatu i chyba po prostu zmienia na ten miesiąc. W ostateczności jeżeli nie znajdę na to sposobu mogę wpisać do pola

Kod: Zaznacz cały

Miesiąc - F: Tekst
a do pola

Kod: Zaznacz cały

Rok - F: Liczba
i też będzie, no ale tak mnie ten błąd zaintrygował, że napisałam tutaj. O tyle dobrze że jak wpisuję pełną Datę Dzień, Miesiąc, Rok to zostaje to co wpisałam, bo wcześniej w starej wersji Open Office i to zmieniało na 00:00:00. W pracy wcześniej była stara wersja OO chyba 3.00 dopiero wczoraj zaktualizowałam pakiet do najnowszego LibreOffice wersja 4.4.4.3 i tutaj jest w porządku przy pełnej dacie, ale jak chcę zrobić osobno Rok - YYYY i osobno Miesiąc MMMM to się wszytko psuje :( Help ... Może ktoś zna ten błąd ? A może wiecie o nim ? I nic nie poradzę ...
Laptop : LibreOffice Wersja: 4.4.4.3 + Mageia Linux
W domu: LibreOffice Wersja: 4.4.4.3 + Windows 7
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: Format Data zmienia rok na 1905

Post autor: belstar »

Wynika to z faktu że data jest liczbą więc każdy dzień jest reprezentowany jako inna liczba, to samo jest z czasem lecz on jest przechowywany jako część ułamkowa tej liczby. Wniosek jeśli chcesz uzyskać rok, miesiąc czy dzień i tak musisz wpisać całą datę lub liczbę która ją reprezentuje (np. 01.01.1999 przy formacie YYYY pokaże 1999), format tylko ci ją podaje w sposób jaki określisz podczas projektowania.
Przykład:
42207 - to jest dzień dzisiejszy 22.07.2015
LibreOffice 5.1.2.2 Ubuntu 16 LTS
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Format Data zmienia rok na 1905

Post autor: Jan_J »

W polu typu Data nie da się zostawić pustej rubryki dnia. Wynika to z faktu, że data jest de facto typem prostym. Jeżeli zachodzi potrzeba pozostawienia pustych wartości, to lepiej jest rozbić datę na składowe typu integer, z zachowaniem warunków integralności (np. 1 <= miesiąc <= 12 itp.).

I radziłbym uważać na daty, zwłaszcza jeżeli korzystamy z wbudowanego w Base'a systemu obsługi baz, tzn. HSQLDB. W wersji 1.8.x ma on tragicznie słabą obsługę dat. Jeżeli Base jest tylko interfejsem do komunikacji z bazą zewnętrzną (np. MySQL, PostgeSQL, Firebird), to ww. problem staje się do ominięcia, choć ni znika zupełnie: Base nie dopuszcza niektórych poprawnie zaprojektowanych operacji na datach.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Katarzyna662
Posty: 5
Rejestracja: wt lip 21, 2015 3:11 pm

Re: Format Data zmienia rok na 1905

Post autor: Katarzyna662 »

Dziękuję wielkie za odpowiedzi.
belstar pisze:Wynika to z faktu że data jest liczbą więc każdy dzień jest reprezentowany jako inna liczba, to samo jest z czasem lecz on jest przechowywany jako część ułamkowa tej liczby. Wniosek jeśli chcesz uzyskać rok, miesiąc czy dzień i tak musisz wpisać całą datę lub liczbę która ją reprezentuje (np. 01.01.1999 przy formacie YYYY pokaże 1999), format tylko ci ją podaje w sposób jaki określisz podczas projektowania.
Przykład:
42207 - to jest dzień dzisiejszy 22.07.2015
Taka banalne rozwiązanie :P i na niego nie wpadłam. Jakoś o tym nie pomyślałam. Dzięki. To w zasadzie by wystarczyło.
Jan_J pisze:W polu typu Data nie da się zostawić pustej rubryki dnia. Wynika to z faktu, że data jest de facto typem prostym. Jeżeli zachodzi potrzeba pozostawienia pustych wartości, to lepiej jest rozbić datę na składowe typu integer, z zachowaniem warunków integralności (np. 1 <= miesiąc <= 12 itp.).

I radziłbym uważać na daty, zwłaszcza jeżeli korzystamy z wbudowanego w Base'a systemu obsługi baz, tzn. HSQLDB. W wersji 1.8.x ma on tragicznie słabą obsługę dat. Jeżeli Base jest tylko interfejsem do komunikacji z bazą zewnętrzną (np. MySQL, PostgeSQL, Firebird), to ww. problem staje się do ominięcia, choć ni znika zupełnie: Base nie dopuszcza niektórych poprawnie zaprojektowanych operacji na datach.
Hmm, dziękuję za radę. Pustego pola nie zostawię, bo zawsze mam choćby rok, ale wypróbuję ten sposób może będzie w sam raz. Właśnie chcę datę rozbić na osobne pola ale typu data z integer nie próbowałam. Przyznam tylko że nie bardzo rozumiem przykład :oops: Czyli utworzyć osobną tabelę dla miesięcy i połączyć (zintegrować) ją z polem Data z wybieralną listą ? Sorry jeszcze chyba nie kumam słowa integralność :lol: Zaraz użyję Google'a ;) Proszę o rozwinięcie tematu lub wyjaśnienie obrazowe.
Laptop : LibreOffice Wersja: 4.4.4.3 + Mageia Linux
W domu: LibreOffice Wersja: 4.4.4.3 + Windows 7
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Format Data zmienia rok na 1905

Post autor: Jan_J »

Integralność (data inegrity): w bazach danych wymaganie, by dane mogły przyjmować jedynie sensowne wartości.
Na przykład typ date wymusza integralność wartości daty; wpisanie dajmy na to daty 35 piątnia 2013 roku nie jest możliwe. Podobnie 31 lutego 2011 ani też -- w tym przypadku niestety -- marca 1009, bez wskazania dnia.
Jeżeli przyjmiesz model przedstawiania daty za pomocą3 pól typu integer, problem z zapewnieniem integralności zostanie przerzucony na projektanta bazy. Z numerem miesiąca łatwo sobie poradzić: warunki typu check((miesiac >= 1) and (miesiac<=12)) są obsługiwane przez każdy system. Ale wykluczenie dat typu 31 kwietnia albo 30 lutego, czy też 29 lutego w latach nieprzestępnych może wymagać pewnego wysiłku. No, ale nas interesuje miesiąc/rok, więc pole dzień można sobie w ogóle darować?
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
ODPOWIEDZ