C++ BUILDER, RAD STUDIO IDE.

Задание: Замени в коде Edit3 на TMemo, адаптируй использование Memo1.

Добавь проверку на пустые поля Edit1, Memo1, Edit3.

Код:
``` cpp
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include "Unit108.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm108 *Form108;
TADOConnection *ADOConnection1;
TADOQuery *ADOQuery1;
TDBGrid *DBGrid1;
TDataSource *DataSource1;


//---------------------------------------------------------------------------
__fastcall TForm108::TForm108(TComponent* Owner)
	: TForm(Owner)
{

}
//---------------------------------------------------------------------------

void __fastcall TForm108::FormCreate(TObject *Sender)
{
	// создание базы данных / таблицы, если их ещё не существует
	String s;
	s = "CREATE DATABASE IF NOT EXISTS `catalog`";
	ADOQuery1->SQL->Text = s;
	ADOQuery1->ExecSQL();
	s = "CREATE TABLE IF NOT EXISTS `catalog`.`products` (`ID` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(255) NOT NULL, `price` FLOAT(8, 2) NOT NULL, `description` TEXT NOT NULL, `image` LONGBLOB NOT NULL, PRIMARY KEY (`ID`))";
	ADOQuery1->SQL->Text = s;
	ADOQuery1->ExecSQL();

	ADOQuery1->Close();
    ADOQuery1->SQL->Text = "SELECT * FROM `catalog`.`products`";
	ADOQuery1->Open();
}
//---------------------------------------------------------------------------

void __fastcall TForm108::Button2Click(TObject *Sender)
{
    // Проверка на загрузку изображения
    if (OpenPictureDialog1->FileName.IsEmpty())
    {
		ShowMessage("Пожалуйста, загрузите изображение!");
        return;
    }
try
{
	TFileStream *fs = new TFileStream(OpenPictureDialog1->FileName, fmOpenRead);
    try
    {
        // Указываем параметры для запроса
        ADOQuery1->SQL->Text = "INSERT INTO `catalog`.`products` (`name`, `price`, `description`, `image`) VALUES (:name, :price, :description, :image)";
        ADOQuery1->Parameters->ParamByName("name")->Value = Edit1->Text;
        ADOQuery1->Parameters->ParamByName("price")->Value = StrToFloat(Edit2->Text);
        ADOQuery1->Parameters->ParamByName("description")->Value = Edit3->Text;

        // Создаем поток для передачи изображения в базу данных
		TMemoryStream *stream = new TMemoryStream();
        try
		{
			stream->CopyFrom(fs, 0);
            stream->Position = 0;
            ADOQuery1->Parameters->ParamByName("image")->LoadFromStream(stream, ftBlob);

			ADOQuery1->ExecSQL();
		}
        __finally
        {
            delete stream;
        }
    }
	__finally
	{
		delete fs;
	}

    // Очистка полей ввода
    Edit1->Clear();
    Edit2->Clear();
    Edit3->Clear();

    // Очистка изображения
    Image1->Picture->Assign(NULL);

	// Обновление данных в таблице
    ADOQuery1->Close();
    ADOQuery1->SQL->Text = "SELECT * FROM `catalog`.`products`";
	ADOQuery1->Open();
}
catch (Exception &e)
{
    ShowMessage("Ошибка при добавлении товара: " + e.Message);
}
}
//---------------------------------------------------------------------------


void __fastcall TForm108::Button3Click(TObject *Sender)
{
    if (OpenPictureDialog1->Execute())
	{
        Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);
    }
}
//---------------------------------------------------------------------------

void __fastcall TForm108::Button1Click(TObject *Sender)
{
    int id = ADOQuery1->FieldByName("ID")->AsInteger;
    if (OpenPictureDialog1->Execute())
    {
        TFileStream *fs = new TFileStream(OpenPictureDialog1->FileName, fmOpenRead);
        TMemoryStream *stream = new TMemoryStream();
        try
        {
            fs->Position = 0; // сброс позиции в потоке
            stream->CopyFrom(fs, 0); // скопировать содержимое потока fs в stream
            stream->Position = 0;

            ADOQuery1->SQL->Text = "UPDATE `catalog`.`products` SET `image` = :image WHERE `ID` = :ID";
            ADOQuery1->Parameters->ParamByName("ID")->Value = id;
            ADOQuery1->Parameters->ParamByName("image")->LoadFromStream(stream, ftBlob);
            ADOQuery1->ExecSQL();
        }
        __finally
        {
            if (stream != NULL) {
                delete stream;
            }
            if (fs != NULL) {
                delete fs;
            }
        }
        ADOQuery1->Close();
        ADOQuery1->SQL->Text = "SELECT * FROM `catalog`.`products`";
        ADOQuery1->Open();

        Image1->Picture->Assign(NULL);
    }
}
//---------------------------------------------------------------------------



void __fastcall TForm108::Edit2KeyPress(TObject *Sender, System::WideChar &Key)
{
    String dict="0123456789,";

	if (dict.Pos(Key)>0)
	{
		Key=Key;
	}

	else if (Key==8)
	{
		Key=8;
	}

	else
	{
		Key=0;
	}
}
//---------------------------------------------------------------------------

``` cpp