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?
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
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ę.
Mam Delphi XE. Do sqlite nie używam żadnych komponentów, odwołuję się bezpośrednio do bazy w sposób opisany tutaj: http://4programmers.net/Delphi/Artyku%C5%82y/SQLite_w_Delphi. Na 100% nie da się operować(UPDATE,INSERT, itd.) na bazie w pamięci(:memory)?
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????
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!