ПредишенСледващото

Особености на използване на BLOB полета в dbExpress до MySQL Пример

Използвайте новите компоненти dbExpress удобни. Въпреки това, прилагателното "нови" носи не само радост ... решаване на проблемите се забави в продължение на много часове и дни. На интернет помощта уви не се надяваме, защото информация dbExpress там не толкова много. Едно от тези предизвикателства - работа с BLOB полета. Използвайте родния SQL за работа с BLOB не винаги е възможно, така че трябва да се използват други, алтернативни методи.

За да работите с BLOB полета в Делфи, има няколко класа:

  • TBlobStream;
  • TClientBlobStream;
  • TBlobField;
  • TGraphicField;
  • TMemoField;

Също така тук може да се дължи функция TCustomClientDataSet.CreateBlobStream, но тя се изпълнява от TClientBlobStream клас. Класове TGraphicField TMemoField и са получени от TBlobField. не TBlobStream подходящ за използване с dbExpress и се прилага само при манипулация на данни чрез BDE.

По този начин да се работи с BLOB полета чрез dbExpress са две ключови класове: TBlobField и TClientBlobStream. Затова може би два, коренно различни, начини за достъп до BLOB полета: чрез потоци и чрез свойствата на даден обект. Както е посочено в системата за помощ при работа с BLOB полета като цяло и по-специално dbExpress удобно достатъчно са променливи от тип String.

Всъщност, максималният размер на данните, съхранявани в променливите от този тип е 2 GB, което е равно на максималния размер на петно-областта в MySQL (23/3/47). Strings са достатъчно удобни за стрийминг, както и има много функции, за да работят с тях. Проблеми при работа с BLOB полета, тъй като има две: четене на данни и запис. Нека разгледаме всеки от вариантите.

№1 проблем. Четене на данни от петно ​​полета

За да работите с BLOB полета трябва да бъдат причислени към TCustomClientDataSet.FetchOnDemand собственост, за да Вярно е, както и необходимостта да се проучи внимателно Опции собственост параметър poFetchBlobsOnDemand на. Тези настройки са необходими, за да се получат данни от петно ​​полета в заявката на клиента. Изтегляне на данните е възможно с помощта на метод FetchBlobs.

Използване на свойствата на TDataSet.FieldValues

Използване на свойствата на TBlobField.Value

№2 проблем. Писане на данни в BLOB поле.

Когато записвате данни в BLOB поле, имайте предвид, че за да се промени към метод Публикацията не е достатъчно. За да прехвърлите данни към таблицата, след като методът на публикация трябва да се обадите TCustomClientDataSet.ApplyUpdates метода. Заедно с този метод е полезен TCustomClientDataSet.ChangeCount собственост, която включва редица промени, направени от потребителя. В помощната система на Delphi дава пример за това как да споделят тази собственост и ApplyUpdates метод.

Преди създаването на потока трябва винаги да предизвика метод FetchBlobs за изтегляне на данни от петно ​​полета, в противен случай възниква грешка. Когато се работи с областта с помощта на поток, трябва да следвате правилото:

Един пост - един поток.

Ако искате да обработва нов запис, резбата трябва да се създаде наново. Разбира се, ние не трябва да забравяме своевременно чрез унищожаване на потоци.

По неизвестни причини, този код не работи. Точни данни се предават в потока, но не записват в базата данни. В този случай, няма грешка се издава (тя може бъг, или може би нещо в този кодекс не се взема под внимание). Във връзка с това, ако искате да използвате теми, трябва да създадете междинна поток, а след това да го изтеглите на данните, а след това прехвърляне на данните в низова променлива, която впоследствие записва в базата данни. Този метод не е най-добрият, но тя работи перфектно.

Подкрепете проекта - споделете линка, благодаря!