Program po każdym uruchomieniu zapisuje dodatkowy plik bazy - jak to obejść?

Odpowiedz Nowy wątek
2015-01-07 21:40
0

Tworzę sobie właśnie program operujący na bazie danych SQLite. Przy każdym uruchomieniu program ściąga plik bazy z internetu (żeby dostać aktualną wersję). Jednym z założeń było stworzenie programu portable, a teraz mam plik wykonywalny, który przy każdym uruchomieniu zapisuje w swojej lokalizacji dodatkowy plik bazy danych. Da się to jakoś obejść? Kiedyś robiłem program, który w nagłówku wyświetlał obrazek z internetu: pobierałem plik do TMemorystream i stamtąd ładowałem do Timage. Da się to rozwiązać w podobny sposób, czy szkoda czasu na kombinacje?


quidquid Latine dictum sit, altum videtur

Pozostało 580 znaków

2015-01-08 08:43
1

mylisz pojęcia - program portable to nie programy z jednym plikiem exe ale takie, których nie trzeba instalować.
A tu masz jak trzymać bazę w pamięci http://stackoverflow.com/ques[...]rp-sqlite-memory-stream-as-db


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
edytowany 1x, ostatnio: abrakadaber, 2015-01-08 08:43

Pozostało 580 znaków

2015-01-08 15:16
0
maniutek20 napisał(a):

Tworzę sobie właśnie program operujący na bazie danych SQLite.

Jaka wersja Delphi i jakich komponentów do sqlite'a używasz?

Weź pod uwagę to, że SQLite nie umożliwia otwarcia bazy z pamięci (:memory) a tylko jej utworzenie!
Czyli w pamięci możesz mieć utworzoną "teraz" od nowa bazę.
Aby zrealizować to co chcesz, to pobraną bazę (plik) i tak musisz otworzyć "normalnie" z dysku i zrobić jej "klona", przez utworzenie bazy w pamięci, np. przez wykonanie skryptu, który powstał na podstawie pobranej bazy!

Jeżeli nie chcesz w katalogu z Twoją aplikacją tworzyć żadnych dodatkowych plików i nie zależy Ci na nich za bardzo, to jest jeszcze masz Temp systemowy i Temp użytkownika i może tam zapisz pobraną bazę.

edytowany 1x, ostatnio: dzidek12, 2015-01-08 15:38

Pozostało 580 znaków

2015-01-08 21:53
0

Mam Delphi XE. Do sqlite nie używam żadnych komponentów, odwołuję się bezpośrednio do bazy w sposób opisany tutaj: SQLite w Delphi. Na 100% nie da się operować(UPDATE,INSERT, itd.) na bazie w pamięci(:memory)?


quidquid Latine dictum sit, altum videtur

Pozostało 580 znaków

2015-01-08 22:55
0

NO PRZECIEŻ DOSTAŁEŚ LINKA JAK TO ZROBIĆ (ZAŁADOWAĆ BAZĘ DO PAMIĘCI I TAM NA NIEJ DZIAŁAĆ). TAK TRUDNO PRZEPISAĆ KILKA LINIJEK Z C# NA DELPHI????


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
nie krzycz na mnie CAPSLOCKIEM. Dostałem linka, znalazłem kilka innych, ale nie jest to proste. Albo inaczej: może dla Ciebie wydaje się to bułką z masłem, ale w natłoku sprzecznych informacji może być to problemem (i nie chodzi mi tu o przepisanie kodu z C do Delphi) - maniutek20 2015-01-08 23:05

Pozostało 580 znaków

2015-01-08 23:19
0
maniutek20 napisał(a):

Na 100% nie da się operować(UPDATE,INSERT, itd.) na bazie w pamięci(:memory)?

Źle mnie zrozumiałeś!
Oczywiście, że się da!
Tyle że jak tak podłączysz się przez :memory, to masz ZAWSZE nową, czystą/pustą bazę i musisz utworzyć jej metai uzupełnić danymi. I możesz to właśnie zrobić przez create/alter i update/insert!

Mi chodziło o to, że nie wczytasz sobie bazy do pamięci jako strumień i później do wypełnionej pamięci podłączysz się przez :memory :)

Przykład który podał abrakadaber jest OK, ale i tak zaczyna się od otwarcia bazy(wzorcowej) będącej na dysku - ale to Cię nie minie!

Możesz jeszcze inaczej podejść! Zamiast trzymać w necie gotową bazę, trzymaj jej najbardziej aktualną definicję (skrypt tworzący strukturę i wypełniający dane).
Wtedy to będziesz mógł utworzyć bazę w pamięci bez angażowania dysku ;)
Wtedy ściągasz do np TStringList'y skrypt i wioooo odpalasz to jako skrypt na bazie otwartej jako :memory!

edytowany 3x, ostatnio: dzidek12, 2015-01-08 23:28

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0