06-05-2016, 09:32
08-05-2016, 10:27
Cześć,
Ja przyłączam się do wątku. Nie wiem jak to zrobić ale może to się przyda.
W QGIS jest funkcja now() dzięki której pobieramy dane o dacie.
Mam małe pytanie. Czy da się ustawić dla nowej kolumny pewną wartość.
Czyli tworzę nową kolumnę data_zmiany (type:data) i ustawiam aby domyślnie dla data_zmiany = now().
Ja przyłączam się do wątku. Nie wiem jak to zrobić ale może to się przyda.
W QGIS jest funkcja now() dzięki której pobieramy dane o dacie.
Mam małe pytanie. Czy da się ustawić dla nowej kolumny pewną wartość.
Czyli tworzę nową kolumnę data_zmiany (type:data) i ustawiam aby domyślnie dla data_zmiany = now().
08-05-2016, 22:23
W shapefile łatwo da się to zrobić dodając nowe pole, nazwijmy je "dt", ustawiając typ jako Date (jeśli chcemy samą datę), lub Text (jeśli chcemy datę i czas - wtedy długość pola należy ustawić tak, żeby nam odpowiadało, czyli w zależności od formatu zapisu daty i czasu, jaki chcemy uzyskać, domyślnie proponuję 20 ).
Potem w QGIS, we właściwościach warstwy, wystarczy ustawić rodzaj edytora dla tego pola jako "Data/czas", jak na rysunkach poniżej.
[attachment=301]
[attachment=300]
Ustawienia można zostawić domyślne, można też w zależności od potrzeb wybrać sobie format zapisu czasu, i tak dalej.
Po postawieniu jakiegoś punktu, zakończeniu edycji jakiejś linii bądź poligonu, pole powinno samo się uzupełnić z aktualną datą.
Potem w QGIS, we właściwościach warstwy, wystarczy ustawić rodzaj edytora dla tego pola jako "Data/czas", jak na rysunkach poniżej.
[attachment=301]
[attachment=300]
Ustawienia można zostawić domyślne, można też w zależności od potrzeb wybrać sobie format zapisu czasu, i tak dalej.
Po postawieniu jakiegoś punktu, zakończeniu edycji jakiejś linii bądź poligonu, pole powinno samo się uzupełnić z aktualną datą.
12-05-2016, 12:42
Przy dodawaniu nowego obiektu ta funkcja działa. Niestety przy edycji już istniejącego nie działa.
12-05-2016, 17:40
Właśnie też to zauważyłem,
Wartość w polu daty zmienia się tylko wtedy, gdy zostanie odpalony formularz, dopiero wtedy dana zostaję zaktualizowana, ale tylko wtedy gdy kolumna ma wartość NULL w przypadku gdy chcemy zastąpić istniejącą wartość nie działa
Wartość w polu daty zmienia się tylko wtedy, gdy zostanie odpalony formularz, dopiero wtedy dana zostaję zaktualizowana, ale tylko wtedy gdy kolumna ma wartość NULL w przypadku gdy chcemy zastąpić istniejącą wartość nie działa
12-05-2016, 23:14
No, to właściwie szybkim i dosyć prostym rozwiązaniem będzie skorzystanie z PostGISa. Wgraj tabelę do bazy, a potem wystarczy dodać kolumnę przez:
To polecenie dodało kolumnę "modified" do Twojej tabeli, która co prawda będzie zapisywać aktualny czas, ale tylko dla nowotworzonych obiektów.
Żeby pole to miało informację o ostatniej edycji obiektu, trzeba jeszcze poniższe funkcje wywołać.
A potem taki "trigger" (nie wiem jak i czy słówko "trigger" tłumaczy się na polski...):
który stworzy działanie wywołujące funkcję, która jest opisana wyżej [czyli update_modified_column()].
Sprawdziłem u siebie, działa. A pewnie i mi się przyda w przyszłości
Kod:
ALTER TABLE twoja_tabela
ADD COLUMN modified timestamp default current_timestamp;
Żeby pole to miało informację o ostatniej edycji obiektu, trzeba jeszcze poniższe funkcje wywołać.
Kod:
CREATE OR REPLACE FUNCTION update_modified_column()
RETURNS TRIGGER AS $$
BEGIN
NEW.modified = now();
RETURN NEW;
END;
$$ language 'plpgsql';
A potem taki "trigger" (nie wiem jak i czy słówko "trigger" tłumaczy się na polski...):
Kod:
CREATE TRIGGER update_edit_modtime BEFORE UPDATE ON twoja_tabela FOR EACH ROW EXECUTE PROCEDURE update_modified_column();
Sprawdziłem u siebie, działa. A pewnie i mi się przyda w przyszłości
17-05-2016, 12:38
Trigger po polsku w pgAdminie to wyzwalacz
Do definicji dodałbym INSERT czyli
CREATE TRIGGER update_edit_modtime BEFORE INSERT OR UPDATE ON twoja_tabela FOR EACH ROW EXECUTE PROCEDURE update_modified_column();
aby postgresql dodawał datę stworzenia (insert) obiektu a nie tylko aktualizacji (update).
Pozdrawiam!
Do definicji dodałbym INSERT czyli
CREATE TRIGGER update_edit_modtime BEFORE INSERT OR UPDATE ON twoja_tabela FOR EACH ROW EXECUTE PROCEDURE update_modified_column();
aby postgresql dodawał datę stworzenia (insert) obiektu a nie tylko aktualizacji (update).
Pozdrawiam!
17-05-2016, 12:50
A nie jest tak, że przy tworzeniu automatycznie to zrobi ze względu na typ pola i rodzaj danych (timestamp)?
Pytam, bo nie wiem (ciągle się douczam tego Postgresa) A podczas testowania tego rozwiązania automatycznie uzupełniało mi daty w nowotworzonych obiektach.
Pytam, bo nie wiem (ciągle się douczam tego Postgresa) A podczas testowania tego rozwiązania automatycznie uzupełniało mi daty w nowotworzonych obiektach.
17-05-2016, 21:58
Być może dla timestamp tak działa (nie testowałem) ale takiego triggera wykorzystywać można do autouzupełniania wielu innych danych więc warto pamiętać aby był wyzwalany również przy insercie.
Pozdrawiam!
Pozdrawiam!
22-08-2016, 21:48
Odkopuję temat, bo właśnie pojawiła się nowa wtyczka, która pozwala na autouzupełnianie przeróżnych opcji. AutoFields Plugin [1] - bez potrzeby zaprzęgania PostGISa
Przykładowy filmik [2] z rozwiązaniem problemu z tego tematu - timestamps
-----------
[1] - http://geotux.tuxfamily.org/index.php/ge...n-for-qgis
[2] - https://vimeo.com/178984647
Przykładowy filmik [2] z rozwiązaniem problemu z tego tematu - timestamps
-----------
[1] - http://geotux.tuxfamily.org/index.php/ge...n-for-qgis
[2] - https://vimeo.com/178984647