Autor Téma: vlozenie obrazku do db  (Přečteno 4129 krát)

Offline dee

  • Plnoletý
  • ***
  • Příspěvků: 116
  • Karma: 0
    • Verze Delphi: D7, XE7
vlozenie obrazku do db
« kdy: 11-06-2016, 10:15:23 »
ahojte, ako mozem nahrat obrazok do databazy ? teda mam bmp obrazok a chem ho insertnut do db tak aby som ho mohol prehliadat cez dbimage ? a ake formaty obrazkov delphi podporuje ?
dik

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2873
  • Karma: 27
    • Verze Delphi: XE7 professional
Re:vlozenie obrazku do db
« Odpověď #1 kdy: 12-06-2016, 17:23:34 »
Nikto nereaguje a ja som to nikdy nerobil :)  ale niečo skúsim z cudzích hláv.
Citace
ako mozem nahrat obrazok do databazy ? teda mam bmp obrazok a chem ho insertnut do db tak aby som ho mohol prehliadat cez dbimage ? a ake formaty obrazkov delphi podporuje ?
Najlepšie cez USB ;D
A teraz vážne. Nedal si žiadnu technickú informáciu. Aká DB, ktoré Delphi...
Na takéto účely slúži pole typu BLOB. Keď som niekde niečo pozeral ohľadom DB, tak skoro vždy som narazil na ukážku práce s obrázkami. Ty nie?
Keďže práca s poliami typu BLOB nebýva práve najjednoduchšia a obrázky zvyknú veľmi zväčšovať DB, tak sa používa iná technika.

Obrázky si uložíš na disk a do DB si vložíš odkaz na ne. Potom si ich v programe načítaš priamo zo súborov.
A tie podporované formáty si si mohol dávno pozrieť. Tak lenivý nie som ani ja ;)


Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline dee

  • Plnoletý
  • ***
  • Příspěvků: 116
  • Karma: 0
    • Verze Delphi: D7, XE7
Re:vlozenie obrazku do db
« Odpověď #2 kdy: 12-06-2016, 18:25:09 »
ide o sqlite a chcem ich davat do toho blobu. natiahnut ich viem to je pekne ulazane v deme fishfact ale ako ich tam dostat to uz nie.
na nete su nejake clanky ale castokrat mi to pride akesi komplikovane

Offline mjseven

  • Mladík
  • **
  • Příspěvků: 64
  • Karma: 5
    • Verze Delphi: D7, D2006, XE2, Lazarus
Re:vlozenie obrazku do db
« Odpověď #3 kdy: 13-06-2016, 10:10:07 »
Jak je nahrát do DB záleží na tom jaké používáš komponenty nebo wrapper pro připojení.
Musí podporovat práci s Blob sloupci. Bez konkrétních informací jak se k SQLite připojuješ ti víc poradit nikdo nedokáže.

Každopádně u SQLite bych spíš použil variantu kdy jsou obrázky uloženy ve složce na disku a do DB ukládal jen cestu k obrázku.



Offline dee

  • Plnoletý
  • ***
  • Příspěvků: 116
  • Karma: 0
    • Verze Delphi: D7, XE7
Re:vlozenie obrazku do db
« Odpověď #4 kdy: 13-06-2016, 18:27:52 »
pouzivam firedac, ale ved blob by mal byt vsade to iste, len ako natiahnut binarne data z obrazku a nasukat to insertom do blobu tak aby sa to korektne ulozilo a dalo znovu precitat

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 1722
  • Karma: 70
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:vlozenie obrazku do db
« Odpověď #5 kdy: 14-06-2016, 10:20:05 »
Ukladat obrazky zvlast na disku je blbost a pozustatek z 90 let.

Standartne obrazky jenom BMP, pokud das do uses pngimage nebo jpegimage tak i PNG, JPG.

Nejjednodussi je  nacist do nejakeho streamu a pak je postnout do DB. Funguje u vsech DB podporovanych Delphi. Vsechno odstatni je zbytecne slozite.

Kód: [Vybrat]

uses db;
...
var
  ms:TMemoryStream;

begin
  ms := TMemoryStream.Create;
  try
    ms.LoadFromFile('nejaky obrazek png, bmp, jpg');
    ms.position := 0; // nastav se ve streamu na zacatek
 
    fdquery.SQL.Text := 'SELECT id, data FROM tabulkaobrazku WHERE id = 10'; // nebo AdoQuery nebo co pouzivas
    fdquery.Open;
      fdquery.Edit;
      (ads.FieldByName('data ') as TBlobField).LoadFromStream(ms); // nacti BLOB z memory streamu do Fieldu
      fdquery.Post; // postni data
      fdquery.Close;
    finally
      ms.Free;
    end;
Embarcadero MVP - Czech republic

Offline oxo

  • Guru
  • *****
  • Příspěvků: 696
  • Karma: 40
    • Verze Delphi: Primárně Lazarus, jinak D7 až aktuální
    • Kluug.net
Re:vlozenie obrazku do db
« Odpověď #6 kdy: 14-06-2016, 20:47:17 »
Ten TMemoryStream je zbytečný, lepší je TFileStream. Netřeba to tahat přes paměť. (Ale to je jen hnidopišství, za které mě omluv  :) )
Embarcadero Technology Partner, juj. Člen Lazarus týmu, oj.

Offline vandrovnik

  • Hrdina
  • ****
  • Příspěvků: 253
  • Karma: 5
    • Verze Delphi: 10.2
Re:vlozenie obrazku do db
« Odpověď #7 kdy: 14-06-2016, 21:01:07 »
Ukladat obrazky zvlast na disku je blbost a pozustatek z 90 let.

S tím nesouhlasím - pokud máte fotek pár (desítek) GB a dáte je všechny do databáze, bude to komplikovat život např. při zálohování, protože co záloha, to další kopie těch fotek...

Offline dee

  • Plnoletý
  • ***
  • Příspěvků: 116
  • Karma: 0
    • Verze Delphi: D7, XE7
Re:vlozenie obrazku do db
« Odpověď #8 kdy: 15-06-2016, 07:46:19 »
Ukladat obrazky zvlast na disku je blbost a pozustatek z 90 let.

Standartne obrazky jenom BMP, pokud das do uses pngimage nebo jpegimage tak i PNG, JPG.

Nejjednodussi je  nacist do nejakeho streamu a pak je postnout do DB. Funguje u vsech DB podporovanych Delphi. Vsechno odstatni je zbytecne slozite.

Kód: [Vybrat]

uses db;
...
var
  ms:TMemoryStream;

begin
  ms := TMemoryStream.Create;
  try
    ms.LoadFromFile('nejaky obrazek png, bmp, jpg');
    ms.position := 0; // nastav se ve streamu na zacatek
 
    fdquery.SQL.Text := 'SELECT id, data FROM tabulkaobrazku WHERE id = 10'; // nebo AdoQuery nebo co pouzivas
    fdquery.Open;
      fdquery.Edit;
      (ads.FieldByName('data ') as TBlobField).LoadFromStream(ms); // nacti BLOB z memory streamu do Fieldu
      fdquery.Post; // postni data
      fdquery.Close;
    finally
      ms.Free;
    end;


dik, inak co si to tie streamy vlastne ?  a ako sa pouzivaju, .... nejaka teoria, nerad pouzivam veci ktore nepoznam ? neslo by namiesto streamu pouzit napriklad obycajny stringlist ?

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2873
  • Karma: 27
    • Verze Delphi: XE7 professional
Re:vlozenie obrazku do db
« Odpověď #9 kdy: 15-06-2016, 07:50:47 »
Citace
dik, inak co si to tie streamy vlastne ?
Ty nemáš internet?
Citace
a ako sa pouzivaju, .... nejaka teoria, nerad pouzivam veci ktore nepoznam
Tak si to naštuduj. To za Teba nikto neurobí.
A keby si nevedel, tak stačí dať kurzor na daný výraz a stlačiť F1. Máš Ty ale šťastie, že reagujem ako prvý ja, taký pohoďák ;D
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 1722
  • Karma: 70
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:vlozenie obrazku do db
« Odpověď #10 kdy: 15-06-2016, 08:23:08 »
dik, inak co si to tie streamy vlastne ?  a ako sa pouzivaju, .... nejaka teoria, nerad pouzivam veci ktore nepoznam ? neslo by namiesto streamu pouzit napriklad obycajny stringlist ?

To si děláš srandu ne? Než se zeptám, tak je elementární slušnost prokázat že jsi tomu věnoval nějaký čas a ptáš se už aspoň se základní představou VOCOGO, což v tomto případě evidentně smůla. To fakt čekáš, že ti někdo bude přihrávat všechno až pod nos?

Jinak jak se používají streamy je jasné z toho co jsem napsal, případně co poznamenal oxo.
Embarcadero MVP - Czech republic

Offline František

  • Hrdina
  • ****
  • Příspěvků: 260
  • Karma: 2
    • Verze Delphi: XE5, 10.1 starter (BDS2006, XE)
Re:vlozenie obrazku do db
« Odpověď #11 kdy: 16-06-2016, 07:51:52 »
Citace
To si děláš srandu ne? Než se zeptám, tak je elementární slušnost prokázat že jsi tomu věnoval nějaký čas a ptáš se už aspoň se základní představou VOCOGO, což v tomto případě evidentně smůla. To fakt čekáš, že ti někdo bude přihrávat všechno až pod nos?
všetci sme nejako začínali

ale toto: ja práve uvažujem o vkladaní videí do DB (cca 60MB jedno) ... je to stale vhodné, alebo radšej použiť pozostatok z 90. let - dôvod? aby si ich užívateľ nemohol ľahko skopírovať
« Poslední změna: 16-06-2016, 07:56:04 od František »

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2873
  • Karma: 27
    • Verze Delphi: XE7 professional
Re:vlozenie obrazku do db
« Odpověď #12 kdy: 16-06-2016, 08:34:33 »
Môžeš použiť aj šifrovanie. Ale netuším koľko času by si to žiadalo na jeden súbor.
Alebo spakovať, či sa zmení veľkosť neviem ??? , pod heslom.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 1796
  • Karma: 77
    • Verze Delphi: D2007, XE3, DX10
Re:vlozenie obrazku do db
« Odpověď #13 kdy: 16-06-2016, 08:52:38 »
všetci sme nejako začínali
To sem snad ani nepis...

Citace
ale toto: ja práve uvažujem o vkladaní videí do DB (cca 60MB jedno) ... je to stale vhodné, alebo radšej použiť pozostatok z 90. let - dôvod? aby si ich užívateľ nemohol ľahko skopírovať
Vyclenenim dat mimo DB si zadelavas na problemy a nemam s tim dobre zkusenosti:

- Emajlovy klient Opera - v DB si drzel rejstrik zprav a pak mel v adresarove strukture soubory s MIME obsahem, 1 emajl - 1 soubor. A pri jedne aktualizaci, kdy vyclenili emajl z browseru, se jim to nejak posr*lo a pres veskerou moji snahu to nejak zotavit jsem prisel o emajly za nekolik let - teda zustaly mi ty MIME soubory, ale do klienta uz jsem je zpatky nedostal => zanevrel jsem definitivne na Operu a presel na Thunderbird

- vlastni zkusenost: mam webovou aplikaci, ktera exportuje ruzne reporty napr. v XLS, ktere si BFU stahne do browseru a ma je u sebe v download folderu. A na strane serveru jsem udelal jejich archiv: v DB mam rejstrik exportu pristupny pres web a pool souboru na disku, odkud si je BFU muze znovu stahnout. Ale jsou s tim organizacni problemy: kdyz nekomu v teamu davam napr. novejsi DB, tak musim pamatovat, ze mu k tomu musim dat i ty soubory a on si je musi dat na server na spravne misto... V provozu na webovem serveru s pravidelnou zalohou to nicemu vadit nebude.

Osobne bych preferoval BLOB v DB, pokud je to s ohledem na objemy dat mozne

Offline mics

  • Nováček
  • *
  • Příspěvků: 5
  • Karma: 0
    • Verze Delphi: XE, 10.1 Berlin
Re:vlozenie obrazku do db
« Odpověď #14 kdy: 16-06-2016, 12:38:27 »
My ukládáme soubory do filesystemu a žádné problémy s tím nejsou, naopak.  V DB je udržován seznam souborů, tzn. DB je primární "zdroj" pro metadata, do filesystemu se šahá už pouze pro fyzický soubor. Důvodem proč to použít jsou jednoznačně objemy dat při zálohování, kdy filesystem (v našem případě) stačí zálohovat inkrementálně, zatímco záloha DB se může verzovat.

Určitě bych to nenazýval návratem do 90. let. Má to prostě svoje výhody i nevýhody (jako vše).

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Upozornění: do tohoto tématu bylo naposledy přispěno před 120 dny.
Zvažte prosím založení nového tématu.

Jméno: E-mail:
Ověření:
Datový typ v Delphi, který má True a False: