Przechowywanie plików w bazie danych

Problemy zwiÄ…zane z tworzeniem i zarzÄ…dzaniem programami bazo-danowymi.
Regulamin działu


Zadając pytania dotyczące baz danych należy podawać szczegółowe informacje o bazie danych nad którą się pracuje, czyli:

  • Rodzaj serwera bazodanowego: MySql, MSSQL, Oracle itp.
  • Wersja bazy danych
  • Technologia bazodanowa używana w programie: ADO, DbExpress, InterBase
  • Komponenty użyte do zestawienia poÅ‚Ä…czenia: ADOConnection, SqlConnection
  • Sposób zestawienia komponentów bazodanowych np. DataSet - DataSource - DbGrid lub DataSet - DataSetProvider - ClientDataSet - DataSource - DbGrid
  • Jeżeli używane byÅ‚y biblioteki innych firm niż Borland, CodeGeer i Embarcadero proszÄ™ podać ich nazwy, numer wersji i adres źródÅ‚a.

Przechowywanie plików w bazie danych

Nowy postprzez miko » wtorek, 18 stycznia 2011, 13:39

Mam nastepujacy problem. Mam baze danych klientów, kazdy z nich ma 'teczke', w której przechowywane sa dokumnty dotyczace danego klienta (np. obrazki, pliki pdf, xls, doc ... - jednym slowem rózne). Mysle wiec o stworzeniu tabeli, w której bede przechowywal te dokumenty. Mysle o stworzeniu pola typu Blob i zapisywania do niego pliku, nie bardzo wiem tylko jak sie za to zabrac :?:
Mysle, ze musze zapisac dany plik (dajmy na to pdf) jako strumien a potem do bazy, ale nie wiem czy mam racje. Mial ktos moze jakiekolwiek doswiadczenia z tego typu operacjami? Z góry dziekuje za pomoc.
Dodam tylko, ze uzywany kompilator to C++ Builder 2010 a baza danych SQL Server 2008 Express Edt.
Avatar użytkownika
miko
Bladawiec
Bladawiec
 
Posty: 29
Dołączył(a): poniedziałek, 30 marca 2009, 12:11
PodziÄ™kowaÅ‚ : 1
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    Windows 7Internet Explorer 8

Re: Przechowywanie plików w bazie danych

Nowy postprzez miko » wtorek, 18 stycznia 2011, 14:13

Jak dotad udalo mi sie zapisac (tak mysle) plik do bazy w nastepujacy sposob:
Kod: Zaznacz cały
TField *field = ADOTable1->FieldByName("PLIK_1");
TBlobField *blob = dynamic_cast<TBlobField *>(field);
if (blob)
{
   if(OpenPictureDialog1->Execute())
     {
      ADOTable1->Edit();
      blob->LoadFromFile(OpenPictureDialog1->FileName);
      ADOTable1->Post();
     }
}

Widze, ze cos dodalo do bazy, kompilator nie zglasza bledu, ale nie wiem jeszcze jak to teraz odczytac...
Avatar użytkownika
miko
Bladawiec
Bladawiec
 
Posty: 29
Dołączył(a): poniedziałek, 30 marca 2009, 12:11
PodziÄ™kowaÅ‚ : 1
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    Windows 7Internet Explorer 8

Re: Przechowywanie plików w bazie danych

Nowy postprzez miko » wtorek, 18 stycznia 2011, 15:40

W sumie skonczylem na tym, ze zapisuje osobno plik jako blob, nazwe pliku jako string i po próbie otwarcia pliku
zapisuje plik w katalogu roboczym aplikacji pod oryginalna nazwa i rozszerzeniem
Kod: Zaznacz cały
blob->SaveToFile("C:\\nowy"+ADOdane->TdocsDOC_EXT->AsString);


, usuwam go przy zamknieciu aplikacji.
Jest tylko jeden problem... Wszystko chodzi mi ladnie (przetestowalem doc, docx, html, mht, bmp, jpg, gif, txt, pdf) za wyjatkiem xls.
Przy próbie otwarcia excell zglasza blad, ze plik nie jest tego samego typu co rozszerzenie :oops: i czy mimo wszystko chce otworzyc. Po kliknieciu 'Tak' wszystko ladnie sie wyswietla... tylko ten denerwujacy dialog... gdyby nie to byloby wrecz idealnie :)
Avatar użytkownika
miko
Bladawiec
Bladawiec
 
Posty: 29
Dołączył(a): poniedziałek, 30 marca 2009, 12:11
PodziÄ™kowaÅ‚ : 1
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    Windows 7Internet Explorer 8

Re: Przechowywanie plików w bazie danych

Nowy postprzez Ho88it » piÄ…tek, 18 marca 2011, 01:33

Nie wiem czy to zadziała... ale ... spróbuj zakodować pliki szyfrem base64... takie dane powinny być bardziej przystępne dla bazy danych. Tak zakodowane pliki mają postać tekstu. Problem może stanowić zwiększona objętość takiego pliczku. Oczywiście nazwę pliku i rozszerzenie będziesz musiał przypisać do danego ciągu znaków żeby to jakoś po rozkodowaniu można było użyć. Co do twojego xls to możliwe że jakiś znak z nagłówka pliku został podczas odtwarzania "przeinaczony" przy zapisywaniu.
Internet Explorer to program, który służy do przeglądania internetu z twojego komputera i na odwrót.
Avatar użytkownika
Ho88it
Homos antropiczny
Homos antropiczny
 
Posty: 63
Dołączył(a): niedziela, 10 sierpnia 2008, 20:53
PodziÄ™kowaÅ‚ : 2
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: brak systemu
Kompilator: Visual Studio 2008
Visual Studio 2010
Gadu Gadu: 0
    Windows 7Firefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Bazy danych

Kto przeglÄ…da forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 5 gości

cron