Forum QGIS
autouzupełnianie - Wersja do druku

+- Forum QGIS (http://forum.quantum-gis.pl)
+-- Dział: Desktop GIS (http://forum.quantum-gis.pl/forum-4.html)
+--- Dział: QGIS (http://forum.quantum-gis.pl/forum-5.html)
+--- Wątek: autouzupełnianie (/thread-1322.html)



autouzupełnianie - wojsa - 06-05-2016

Czy jest taka możliwość żeby w atrybutach zapisywała się data ostatniej edycji obiektu?


RE: autouzupełnianie - cogito94 - 08-05-2016

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().


RE: autouzupełnianie - Binko - 08-05-2016

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 Wink ).

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ą.


RE: autouzupełnianie - wojsa - 12-05-2016

Przy dodawaniu nowego obiektu ta funkcja działa. Niestety przy edycji już istniejącego nie działa.


RE: autouzupełnianie - cogito94 - 12-05-2016

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


RE: autouzupełnianie - Binko - 12-05-2016

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:
Kod:
ALTER TABLE twoja_tabela
ADD COLUMN modified timestamp default current_timestamp;
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ć.
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();
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 Smile


RE: autouzupełnianie - sebaq - 17-05-2016

Trigger po polsku w pgAdminie to wyzwalacz Wink
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!


RE: autouzupełnianie - Binko - 17-05-2016

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) Smile A podczas testowania tego rozwiązania automatycznie uzupełniało mi daty w nowotworzonych obiektach.


RE: autouzupełnianie - sebaq - 17-05-2016

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!


RE: autouzupełnianie - Binko - 22-08-2016

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 Wink

Przykładowy filmik [2] z rozwiązaniem problemu z tego tematu - timestamps Smile

-----------
[1] - http://geotux.tuxfamily.org/index.php/geo-blogs/item/333-autofields-plugin-for-qgis
[2] - https://vimeo.com/178984647