Zapisanie JPEGa do BLOBA

dział ogólny

Zapisanie JPEGa do BLOBA

Nowy postprzez Corvis » piÄ…tek, 17 października 2008, 21:33

Witam,

Mam problem z zapisaniem *.jpeg do bloba w bazie danych, pliki *.bmp zapisają się dobrze, ale za dużo miejsca zajmują :\
Ten kod zapisauje tylko *.bmp , ajk wczytuje tam jpg i wykonuje ten kod w bazie mam puste pole :\
Kod: Zaznacz cały
ClientDataSet1->FieldByName("blob")->Assign(Image1->Picture);



Może mi ktoś doradzić ??

Pozdrawiam
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
PodziÄ™kowaÅ‚ : 80
OtrzymaÅ‚ podziÄ™kowaÅ„: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    NieznanyNieznana

Re: Zapisanie JPEGa do BLOBA

Nowy postprzez Cyfrowy Baron » sobota, 18 października 2008, 08:53

To co podałeś powinno działać. Skoro przechowujesz w Image plik w formacie JPEG to taki powinien być umieszczony w bazie danych. Możliwe jest jednak, że ta baza danych nie obsługuje plików w formacie JPEG i można w niej umieszczać tylko bitmapy, co wydaje mi się bardzo prawdopodobne.

Możesz jednak spróbować posłużyć się klasą TJPEGImage jako pośrednikiem między obiektem Image a bazą danych:

Kod: Zaznacz cały
#include <jpeg.hpp> // <-- tą bibliotekę powinieneś już w zasadzie mieć włączoną
#include <memory>  // <-- a tÄ… trzeba dodać
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   std::auto_ptr<TJPEGImage> Jpeg(new TJPEGImage());
   Jpeg->Assign(Image1->Picture);

   ClientDataSet1->FieldByName("blob")->Assign(Jpeg);
}
//---------------------------------------------------------------------------


Jeżeli to nie zadziała, to znaczy tylko jedno - baza danych akceptuje tylko pliki graficzne w formacie Bitmapa.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Zapisanie JPEGa do BLOBA

Nowy postprzez Corvis » sobota, 18 października 2008, 09:24

Przerobiłem troszkę kod bo sie nie kompilował i już działa ;)

Miałeś racje potrzebowałem pośrednika

Kod: Zaznacz cały
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   ClientDataSet1->Append();
   TJPEGImage * Jpeg = new TJPEGImage();
   Jpeg->Assign(Image1->Picture);
   ClientDataSet1->FieldByName("blob")->Assign(Jpeg);
   ClientDataSet1->Post();
   delete Jpeg;
}
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
PodziÄ™kowaÅ‚ : 80
OtrzymaÅ‚ podziÄ™kowaÅ„: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    NieznanyNieznana

Re: Zapisanie JPEGa do BLOBA

Nowy postprzez Cyfrowy Baron » sobota, 18 października 2008, 10:32

Nie kompilował się! - to dziwne! - jakiej wersji środowiska używasz?

Użycie funkcji std::auto_ptr wymaga włączenia do projektu biblioteki #include <memory> w pliku źródłowym (np. Unit1.cpp).
Użycie tej funkcji ma tą zaletę że alokuje pamięć dla obiektu i zwalnia ja zaraz gdy obiekt nie jest już potrzebny. Podany przez Ciebie sposób, który notabene jest opisany w poradzie konwersja pliku w formacie BMP na JPEG jest jak najbardziej prawidłowy, chociaż tworzenie nowego obiektu dla tak niewielkich potrzeb wydaje się mało praktyczne.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Zapisanie JPEGa do BLOBA

Nowy postprzez Corvis » sobota, 18 października 2008, 11:34

dodałem memory błąd mam taki :

[BCC32 Error] Unit1.cpp(31): E2034 Cannot convert 'std::auto_ptr<TJPEGImage>' to 'TPersistent *'
[BCC32 Error] Unit1.cpp(31): E2342 Type mismatch in parameter 'Source' (wanted 'TPersistent *', got 'std::auto_ptr<TJPEGImage>')

bład jest w lini ładującej do bazy
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
PodziÄ™kowaÅ‚ : 80
OtrzymaÅ‚ podziÄ™kowaÅ„: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    NieznanyNieznana

Re: Zapisanie JPEGa do BLOBA

Nowy postprzez Cyfrowy Baron » sobota, 18 października 2008, 13:05

bład jest w lini ładującej do bazy


Rozumiem. Funkcja bazy danych oczekuje konkretnego obiektu, a nie alokowanego obszaru pamięci.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana


Powrót do Ogólne problemy z programowaniem

Kto przeglÄ…da forum

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