Lucrul cu câmpuri de tip BLOB

Domenii BLOB (Binary Large Object), proiectat să conțină dimensiunea datelor neop-determinare. câmp BLOB într-un set de date de înregistrare poate conține 3 octeți de date, în timp ce un domeniu similar într-o altă înregistrare poate conține







3 Kbytes de date. Aceste domenii sunt cele mai potrivite pentru stocarea unor mari cantități de tech

o sută, sau desen astfel de tipuri de date imprevizibile, cum ar fi obiecte OLE.

Clasa TBlobField și tipuri de câmpuri

Așa cum am menționat mai devreme în acest capitol, în biblioteca VCL acolo de clasa TBlobField, derivată dintr-o clasă TField și proiectat special pentru încapsularea câmpurilor BLOB. Clasa TBlobField conține tip BlobType TBlobType de proprietate, care este mapat exact ce tip de date sunt stocate în BLOB său domeniu. TBlobType tip este definit în unitatea DB după cum urmează:

Toate tipurile posibile de obiecte și date care pot lua câmp BLOB, sunt prezentate în tabelul. 7.4.

Tabelul 7.4. Tipuri de TBlobField câmpuri de clasă

Tip de câmp Tip de date

ftBlob de date sau fără tipuri definite de utilizator

câmp MEMO ftGraphic Raster Grafica pentru Windows ftFmtMemo într-un paradox ftParadoxOle format OLE Object

ParadoxOkonchanie Table. 7.4.

Tip de câmp Tip de date

ftDBaseOLE OLE obiect dBASE

ftTypedBinary Orice date nestructurate

ftCursor..ftDataSet Inacceptabil BLOB ftOraBlob Fields tabele BLOB Oracle8 ftOraClob Fields tabele CLOB Oracle8

De obicei, cele mai multe dintre lucrările în eșantion și plasarea datelor în clasa TBlobField componentele pot fi realizate atunci când încărcarea sau salvarea unui fișier, sau prin componenta de clasă TBlobStream. Clasa TBlobStream prezintă Xia specializate derivate din clasa TStream care utilizează un câmp BLOB în tabel ca o alocare flux locație fizică. Pentru a demonstra metodele de interacțiune cu TBlobField componentă clasa onnoe a crea aplicații demonstrative.

câmp EXEMPLU folosind BLOB

După cum este descris în continuare proiectul a creat o aplicație care permite utilizatorului să salveze fișiere audio (.wav) într-un tabel de baze de date, și apoi le reda direct din tabel. Începeți proiectul prin crearea formei principale cu componentele prezentate în Fig. 7.9. componenta TTable poate descrie Wavez de masă aranjate în conformitate cu DDGUtils alias, sau propria Tsu Tabley cu structură similară. tabel structura Wavez este prezentată mai jos.

Fig. Formularul 7.9.Glavnaya pentru masa

Wavez - un exemplu de utilizare câmpuri BLOB







Butonul Add este folosit pentru a descărca fișierul audio de pe disc și adăugați-l la masă. manipulare evenimente de rutină OnClick butonul Adăugați este după cum urmează:

Procedura TMainForm.sbAddClick (Expeditor: TObject);

în cazul în care începe apoi OpenDialog.Execute

În această procedură, prima încercare de a executa metoda OpenDia- log. Dacă această operațiune are succes, sursa de date tblSound ne reklyuchaetsya în Append domeniu modul filename și tipuri de câmpuri BLOB de nume Wave este populat cu datele din fișierul specificat parametrul OpenDialog. Observați cât de utile sunt metoda TBlobField nuri de încărcare FromFile și cât de ușor se pare ca fișier de cod de descărcare într-un câmp BLOB clasa.

În mod similar, faceți clic pe butonul Salvați rezultatele în păstrarea externe

Acesta sunet conținutul fișierului, situat în Wave Field. codul de tulpină

riu pentru această cheie este după cum urmează:

Procedura TMainForm.sbSaveClick (Expeditor: TObject);

cu SaveDialog do începe

Metoda folosește chiar mai puține cod. Object SaveDialog ziruetsya initializa valoarea FILENAME câmpului. În cazul în care procedura de SaveDialog se realizează pe experiențe de succes, pentru a păstra conținutul câmpului BLOB într-un fișier numit metoda Salvare- ToFile obiecta tblSoundsWave.

Joaca buton handler citește datele audio din domeniul BLOB, și transmite-le să funcționeze PlaySound API () pentru redare. Codul pentru acest handler este dat nici un fel. Vă rugăm să rețineți că acest cod este un pic mai complicat codul de mai sus la butonul Save.

Procedura TMainForm.sbPlayClick (Expeditor: TObject);

// Crearea unui flux BLOB

B: = TBlobStream.Create (tblSoundsWave, bmRead);

Screen.Cursor: = crHourGlass; // Afișarea clepsidra

M: = TMemoryStream.Create; // Crearea unui flux de memorie

// Încercați să reproducă sunetul. transmisie excepții,

// dacă ceva nu este la fel ar trebui să fie.

Win32Check (PlaySound (M.Memory, 0, SND_SYNC sau SND_MEMORY));

B.Free; // Eliberarea

În primul rând, această metodă creează o instanță a TBlobStream clasa numit B, folosind tabelul tblSoundsWave câmp BLOB. Primul parametru a trecut la metoda TBlob- Stream.Create (), un câmp BLOB obiect, iar al doilea parametru indică modul de a deschide fluxul. De obicei, BLOB de cotitură flux numai în citire ispol'uet valoare Zuy bmRead, și utilizat pentru a înregistra valoarea bmReadWrite.

Pentru a deschide flux TBlobStream cu date CCD parametru bmReadWrite utilizat trebuie să fie în modul Edit, Inserare sau Append.

Se creează apoi o instanță de clasă de debit M TMemoryStream. În acest moment, normale Cursorul mouse-ului la o clepsidră, care indică utilizatorului pe durata operațiunii. Alimentare B a fost apoi copiat funcția M. PlaySound flux (), folosit pentru a reda fișierul audio ca primul parametru care urmează să fie transmis numele fișierului sau pointer la zona de memorie. Clasa TBlobStream nu oferă acces la fluxul de date utilizând indexul și clasa TMemoryStream oferă această capacitate cu memoria de proprietate. Folosind acest lucru, puteți apela funcția PlaySound () pentru datele reproducând, un pointer cu cea conținută în proprietatea M.Memory. După finalizarea avea această funcție, trebuie să eliberați fluxul și de a restabili aspectul cursorul mouse-ului. Codul complet al modulului principal al proiectului este prezentată în Listarea 7.4.

Listarea 7.4. Modulul principal al proiectului Wavez

Unitatea principală; folosește interfața

Ferestre, Mesaje, SysUtils, Clase, grafică, controale, Formulare,

Dialoguri, ExtCtrls, DBCtrls, DB, DBTables, StdCtrls, Masca,