Witam,
Korzystam z SQLITE i delphi.
Jak zapisywać w bazie sqlite multimedia (filmy i bitmapy)? I jeszcze jedno : jak zapisać i odczytać pliki .rtf (z zmienionym kolorem fontów i wklejonymi obrazkami)?
Pozdrawiam
Nie jestem ekspertem od SQL'a oraz SQLite w ogóle. Ale jak sobie coś tam kiedyś krótko modziłem z tą biblioteką to natrafiłem na taki przykład: http://www.shokhirev.com/nikolai/programs/code/SQLiteInterface.html - także pogoogluj zanim zapytasz, bo jak byś cniał to byś też na to trafił. Ja sobie ułatwiłem wprawdzie sprawę podając nazwę projektu czyli picturedb
, ale bez tego pewnie jakoś też można tam trafić, tylko trzeba chcieć.
Żeby przechowywać takie dane w tabelach stosuje się typ blob:
http://www.sqlite.org/datatype3.html
Teoretycznie (nie sprawdzałem) powinno wystarczyć otworzenie pliku ze switch'ami "rb" i przewalenie wszystkich danych z tego pliku do bloba.
Sorry nie bardzo rozumiem fragmentu:
otworzenie pliku ze switch'ami "rb"
W stosunku do pierwszej odpowiedzi:
ten programik do którego dałeś link, miałem już wcześniej. Chodzi o to, że mnie interesuje coś innego, chcę w bazie w jednej komórce tablicy przechowywać dowolną ilość plików graficznych, a pod inną filmów .
Jeżeli właściwym typem jest BLOB, to wiele mi wytłumaczyło.
rb - read, binarnie
W relacyjnych bazach danych lepiej wielu plików nie wsadzać w jednego BLOBa, przecież możesz utworzyć dodatkową tabelę z plikami.
tab1
id | nazwa | klucz obcy z tab2 |
---|---|---|
1 | Filmy | 54 |
2 | Pliki graficzne | 65 |
tab2
id | dane binarne pliku (blob) | nazwa pliku |
---|---|---|
54 | 0110011010110... | nsfw.avi |
54 | 0110011010110... | nsfw2.mpg |
65 | 0110011010110... | jacek.jpg |
65 | 0110011010110... | jola.png |
65 | 0110011010110... | jadwiga.jpg |
Jak widać, krotkom z tab1 przyporządkowane są indekst z tab2, tym sposobem każdy rekord z tab1 może mieć wiele plików.
A w jaki sposób wprowadzić plik do BLOBA? Chodzi mi o plik .rtf, i avi,
plik rtf zapisuję na dysku procedurą SAVETOFILE z JVRichedit
w jaki sposób wprowadzić go do bazy
JVRIchedit1.savetofile('c:\jakisplik.rtf');
SQLiteBaza.ExecSQL('INSERT INTO tabela VALUES("'+ edit1.text +'","' + Edit2 .Text + '", "' + CO TUTAJ MA BYĆ? + '")');
Już napisałem, musisz otworzyć plik i czytać go binarnie znak po znaku i cały ciąg potem wsadzasz w miejsce "CO TUTAJ MA BYĆ?". Chociaż w sumie są jakieś funkcje w bibliotece SQLite do obsługi blobów, poszperaj :)
http://www.yolinux.com/TUTORIALS/SQLite.html
Masz tam kod zaczynający się od komentarza w 52 linijce:
// Insert blob data into database
jaką funkcją otworzyć plik binarnie?
Czy Ty szukasz czasem odpowiedzi na swoje pytania?
http://www.delphibasics.co.uk/Article.asp?Name=Files
Sekcja
Reading and writing to pure binary files
Dużo szybciej i wydajniej byś pracował gdybyś najpierw nauczył się szukać.