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

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?

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/questions/11383775/c-sharp-sqlite-memory-stream-as-db

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

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)?

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????

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!

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