Aplikacja z SQLite i opcja undo

Aplikacja z SQLite i opcja undo
TL
  • Rejestracja:około 12 lat
  • Ostatnio:prawie 11 lat
  • Postów:37
0

Witam

Pytanie dotyczy aplikacji budowanej w oparciu o bazę danych sqlite.
W jaki sposób można rozwiązać kwestie cofania/przywracania wprowadzanych do bazy danych zmian tj opcja wstecz(cofnij)/dalej? Czy baza danych sqlite (ewentualnie inna darmowa) oferuje narzędzia które by to ułatwiały/realizowały? Jeżeli nie, to w jaki sposób takie zagadnienie rozwiązuje się w aplikacjach bazodanowych?

abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:7 miesięcy
  • Postów:6610
1

takich opcji nie oferuje chyba żadna baza danych "in box". W bazach transakcyjnych masz coś takiego jak transakcje i polega to na tym, że dopóki nie zatwierdzisz transakcji dane nie są zmieniane. Ale nie jest to "undo" w takim sensie jak np. w edytorze tekstu, gdzie możesz cofnąć np. ostatnie 50 zmian. Takie coś musisz już realizować sam - np. pamiętać każdą wersję rekordu.


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
1

Żadna baza czegoś takiego nie wspiera. Albo ewentualnie w bardzo ograniczony sposób -> oracle ma flashback.
Są za to technologie które symulują takie mechanizmy -> http://www.jboss.org/envers poprzez zapisywanie informacji o wersjach w bazie.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
TL
  • Rejestracja:około 12 lat
  • Ostatnio:prawie 11 lat
  • Postów:37
0

Tak podejrzewałem, że nie będzie to proste. Jak więc jest to rozwiązywane w aplikacjach bazodanowych?
Najprostsze co mi przychodzi do głowy, to przechowywanie tylu wersji pliku bazy, ile kroków wstecz chcemy zachować - ale to raczej kiepski pomysl ze względu na szybkośc aplikacji (operowanie na wielu plikach) i objętość tych plików.

n0name_l
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 4 lata
  • Postów:2412
0

Trzymaj dane w pamieci zamiast co chwile mazac po bazie.

Zobacz pozostały 1 komentarz
abrakadaber
abrakadaber
@n0name_l po to ktoś wymyślił BD aby w przypadku awarii dane jednak były zapisane i aby do tych danych mogło się odwoływać wiele procesów jednocześnie. To twoje "trzymaj dane w pamięci" przeczy idei BD
n0name_l
Po to ktos wymyslil DB zeby trzymac tam duze ilosci danych, do ktorych niekoniecznie jest potrzebny szybki dostep. Natomiast nikt nie wymyslil DB z mysla robienia undo/redo na czyjes widzimisie. Powiedz o jakich awariach mowisz, bo nie wiem zbytnio, od ktorej strony zaczac to obalac. Drugi argument jest natomiast zwyczajnie smieszny.
abrakadaber
abrakadaber
zawieszenie kompa, brak prądu, cokolwiek?
n0name_l
Zawieszenie kompa, w sensie, ze system nie bedzie w stanie obsluzyc w odpowiednim czasie wszystkich zadan i kaze chwile poczekac? To nie, nic sie nie stanie z pamiecia. Brak pradu, wut? Caly czas mowimy o aplikacji klienckiej wykorzystujacej jakas sensowna technologie z sensownym cachem, czy przechodzimy do golych zapytan? Jesli to drugie, to tak masz racje. Jesli pierwsze tak czy siak bedzie utrata danych. Ogolem nie da sie zapobiec utracie danych w przypadku wszystkich awarii, co jest niejako oczywiste.
abrakadaber
abrakadaber
chłopie tu jest pytanie laika o sqlite i lazarusa! Jaki system? Mowa jest o exeku, który zapisuje coś do sqlita. Nawet notepad++ pozwala na undo po zapisie pliku. Jeśli to ma działać jakoś sensownie to żdne trzymanie w pamięci tylko zapisywanie kolejnych wersji lub zapisywanie kolejnych zmian tak aby się dało cofnąć do tyłu.
TL
  • Rejestracja:około 12 lat
  • Ostatnio:prawie 11 lat
  • Postów:37
0

pamiętać każdą wersję rekordu.

Tylko w jaki sposób? Na dzień dzisiejszy wygląda to mniej więcej w tak, że program pracuje na dwóch plikach bazy danych: tymczasowym oraz oryginalnym.
Wszelkie operacje program wykonuje na pliku tymczasowym, w przypadku zapisywania zmian (zapisz plik), plik tymczasowy staje sie plikiem głównym, oryginalny jest usuwany i na podstawie nowego głównego pliku tworzony jest nowy plik tymczasowy.
Wszelkie zmiany w bazie są wprowadzane na bieżąco do pliku tymczasowego.

abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:7 miesięcy
  • Postów:6610
1

do tabeli bazy dodajesz dodatkowe pole - wersja rekordu i ono wraz z polem id tworzy dopiero unikalny identyfikator rekordu. Każdą nową wersję rekordu zapisujesz przez insert a nie update. Druga wersja to dodatkowa tabela, z takimi samymi polami jak tabela do której piszesz plus pole wersja. Trigger przy robieniu update lub delete na głównej tabeli wstawia jej aktualną kopię do tej tabeli


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)