Delphi világ - a blob mezők dbexpress használatával a mysql használatával
Példa a BLOB mezők DBExpress használatára a MySQL használatával
Használja kényelmesen az új dbExpress komponenseket. Az "új" jelző azonban nem csak örömöt hoz létre ... A felmerülő problémák megoldása hosszú órákra és napokra késleltethető. Sajnos, nem kell reménykedni az internet segítségével. A dbExpress-ral kapcsolatban nincs sok információ. Az egyik ilyen probléma a BLOB mezőkkel való együttműködés. A natív SQL használata a BLOB használatához nem mindig lehetséges, ezért más, alternatív módszereket kell használnia.
A Delphi BLOB mezőkkel dolgozik több osztály:
- TBlobStream;
- TClientBlobStream;
- TBlobField;
- TGraphicField;
- TMemoField;
Itt is lehetséges a TCustomClientDataSet.CreateBlobStream funkció, de a TClientBlobStream osztály segítségével valósul meg. A TGraphicField és TMemoField osztályok a TBlobField-ből származnak. A TBlobStream nem alkalmas a dbExpress használatára, de csak akkor használatos, ha adatokat manipulál a BDE segítségével.
Így a BLOB mezők segítségével a dbExpress segítségével két kulcscsoport létezik: a TBlobField és a TClientBlobStream. Ezért valószínűleg két, alapvetően eltérő, a BLOB mezők elérésére vonatkozó lehetőség: a patakok és az objektum tulajdonságai révén. Amint azt a súgórendszerben általánosságban elmondható, a BLOB mezők általában és különösen a dbExpress segítségével, a String típusú változók meglehetősen kényelmesek.
Valójában az ilyen típusú változókban tárolt adatok maximális mérete 2 GB, ami megegyezik a BLOB mező maximális méretével a MySQL-ben (3.23.47). A vonalak nagyon hasznosak a szálakkal való munkához, és van néhány funkció, hogy velük dolgozzanak. A BLOB-mezőkkel való munkavégzés problémái is léteznek: az adatok olvasása és írása. Vegyük fontolóra mindegyik lehetséges opciót.
1. probléma. Az adatok olvasása BLOB mezőből
Együttműködik BLOB-mezőket kell rendelni az ingatlan TCustomClientDataSet.FetchOnDemand True, és annak szükségességét, hogy alaposan vizsgálja meg a tulajdonság beállítások paraméter poFetchBlobsOnDemand. Ezek a beállítások szükségesek ahhoz, hogy adatokat kapjunk a BLOB mezőtől az ügyfélalkalmazásig. Feltölthet adatokat a FetchBlobs módszerrel.
A TDataSet.FieldValues tulajdonság használata
A TBlobField.Value tulajdonság használata
2. probléma. Adatok rögzítése BLOB mezőben.
Az adatok BLOB mezőre történő írása során figyelembe kell venni, hogy az egyik módszer módosítása esetén a Post nem elegendő. A Post módszernek az adatokat az asztalra való átviteléhez meg kell hívnia a TCustomClientDataSet.ApplyUpdates metódust. Ezzel a módszerrel hasznos a TCustomClientDataSet.ChangeCount tulajdonság használata, amely tartalmazza a felhasználó által végrehajtott módosítások számát. A Delphi súgórendszer példát nyújt a tulajdonság és az ApplyUpdates módszer megosztására.
A szál létrehozása előtt mindig hívja a FetchBlobs módszert az adatok BLOB mezőből való betöltésére, különben hiba történik. Amikor egy mezőt használ egy patak használatával, kövesse a szabályt:
Egy bejegyzés egy téma.
Ha új rekordot kell feldolgoznia, a szálat újra kell készíteni. Természetesen nem szabad megfeledkeznünk arról, hogy a létrehozott patakokat időben elpusztítjuk.
Néhány ismeretlen oknál fogva ez a kód nem működik. Pontosabban, a Stream adatait továbbítják, de nem íródnak az adatbázisba. Ebben az esetben nem ad ki hibákat (talán hiba, és talán valamit ebben a kódban nem veszik figyelembe). Ebben a tekintetben, ha szálakat szeretne használni, létre kell hoznia egy köztes szálat, majd be kell töltenie az adatokat, majd át kell adnia ezeket az adatokat egy stringváltozóra, amelyet azután hozzáad az adatbázishoz. Ez a módszer nem a legoptimálisabb, de hibátlanul működik.