Caracteristicile folosirii câmpurilor BLOB în dbExpress folosind MySQL ca exemplu
Utilizați convențional noile componente dbExpress. Cu toate acestea, adjectivul "nou" aduce nu numai bucurie ... Soluția problemelor emergente poate fi amânată pentru ore și zile îndelungate. Din păcate, nu este necesar să sperăm pentru ajutorul internetului. Nu există prea multe informații despre dbExpress. Una dintre aceste probleme lucrează cu câmpurile BLOB. Utilizați SQL nativ pentru a lucra cu BLOB nu este întotdeauna posibil, deci trebuie să utilizați alte metode alternative.
Există mai multe clase pentru a lucra cu câmpuri BLOB în Delphi:
- TBlobStream;
- TClientBlobStream;
- TBlobField;
- TGraphicField;
- TMemoField;
De asemenea, aici pot fi atribuite funcției TCustomClientDataSet.CreateBlobStream, dar este implementat de clasa TClientBlobStream. Clasele TGraphicField și TMemoField sunt derivate din TBlobField. TBlobStream nu este potrivit pentru lucrul cu dbExpress, dar se folosește numai când se manipulează date prin BDE.
Astfel, pentru a lucra cu BLOB-domenii prin intermediul dbExpress sunt două clase principale: TBlobField și TClientBlobStream. Prin urmare, există probabil două opțiuni fundamentale diferite pentru accesarea câmpurilor BLOB: prin fluxuri și prin proprietățile obiectului. Așa cum este indicat în sistemul de ajutor atunci când lucrăm cu câmpurile BLOB în general și dbExpress în particular, variabilele de tip String sunt destul de convenabile.
Într-adevăr, dimensiunea maximă a datelor stocate în variabilele de acest tip este de 2 GB, care este egală cu dimensiunea maximă a BLOB-câmp în MySQL (3.23.47). Linile sunt destul de la îndemână pentru a lucra cu fire, și există câteva funcții pentru a lucra cu ele. Problemele cu lucrul cu câmpurile BLOB există, de asemenea, două: citirea datelor și scrierea acestora. Să luăm în considerare fiecare dintre opțiunile posibile.
Numărul problemelor 1. Citirea datelor dintr-un câmp BLOB
Pentru a lucra cu BLOB-câmpuri trebuie să fie atribuit TCustomClientDataSet.FetchOnDemand proprietate Adevărat, și necesitatea de a examina cu atenție Opțiuni de proprietate parametru poFetchBlobsOnDemand. Aceste setări sunt necesare pentru a obține date din câmpul BLOB la aplicația client. Puteți încărca date utilizând metoda FetchBlobs.
Utilizând proprietatea TDataSet.FieldValues
Utilizând proprietatea TBlobField.Value
Problemă numărul 2. Înregistrați datele în câmpul BLOB.
Când scrieți date într-un câmp BLOB, este necesar să luați în considerare faptul că pentru efectuarea modificărilor la o metodă, Post nu este suficient. Pentru a transfera datele în tabel după metoda Post, trebuie să apelați metoda TCustomClientDataSet.ApplyUpdates. Împreună cu această metodă este proprietatea TCustomClientDataSet.ChangeCount utilă, care cuprinde o serie de modificări efectuate de către utilizator. Sistemul de ajutor Delphi oferă un exemplu despre modul de partajare a acestei proprietăți și a metodei ApplyUpdates.
Înainte de a crea un fir, trebuie să apelați întotdeauna metoda FetchBlobs pentru a încărca datele din câmpul BLOB, în caz contrar apare o eroare. Când lucrați cu un câmp folosind un flux, trebuie să respectați regula:
O intrare este un fir.
Dacă trebuie să procesați o nouă înregistrare, firul trebuie recreat. Firește, nu trebuie să uităm să distrugem fluxurile create în timp util.
Din motive necunoscute, acest cod nu funcționează. Mai precis, datele din flux sunt transmise, dar nu sunt scrise în baza de date. În acest caz, nu sunt emise erori (poate că este vorba de un bug și poate că ceva în acest cod nu este luat în considerare). În legătură cu acest lucru, dacă doriți să utilizați fire, trebuie să creați un flux de intermediar, și apoi descărcați-l la datele, și apoi se transferă datele într-o variabilă șir de caractere, care ulterior înregistrate în baza de date. Această metodă nu este cea mai optimă, dar funcționează perfect.