unit
  FRM_BlobInserts;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls, Grids, Buttons,
  IB_Components,
  IB_Process,
  IB_Script, IB_Session, dbTables, IB_Controls, IB_Grid;
//  IB_Components,
 // IB_Script,
  //IB_Process;

type
  TfrmMP3inserts = class(TForm)
    btn_TestIt: TBitBtn;
    btn_Cancel: TBitBtn;
    IB_Connection1: TIB_Connection;
    IB_Transaction: TIB_TransactionSingle;
    IB_Script1: TIB_Script;
    odMP3: TOpenDialog;
    bbSave: TBitBtn;
    dsMP3: TIB_DataSource;
    IB_LookupList1: TIB_LookupList;
    sdMP3: TSaveDialog;
    qmp3: TIB_Query;
    Label1: TLabel;
    procedure btn_TestItClick(Sender: TObject);
    procedure btn_CancelClick(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure IB_Connection1BeforeConnect(Sender: TIB_Connection);
    procedure bbSaveClick(Sender: TObject);
    procedure FormActivate(Sender: TObject);
  private
    fProcessRunning: boolean;
    fCancelled: boolean;
  public
  end;

var
  frmMP3inserts: TfrmMP3inserts;
  TempStream: TStream;
  MemoryStream: TMemoryStream;
  count: integer;

implementation

{$R *.DFM}

procedure TfrmMP3inserts.btn_TestItClick(Sender: TObject);
var
  mp3BLOB: TIB_Column;

  filename: string;
begin
  fProcessRunning := true;
  fCancelled := false;
  btn_Cancel.SetFocus;
  btn_Cancel.Caption := 'Cancel';
  btn_TestIt.Enabled := false;

  if odMP3.Execute then filename := ExtractFileName(odMP3.FileName)
  else exit;
  try
    qmp3.insert;
    qmp3.FieldByName('id').asinteger := 1;
    qmp3.FieldByName('mp3title').AsString := filename;
    TempStream := qMP3.CreateBlobStream(qMP3.FieldByName('mp3file'), bsmWrite);
    MemoryStream := TmemoryStream.Create;
    MemoryStream.LoadFromFile(filename);
    count := tempStream.CopyFrom(MemoryStream, 0);

    qMP3.Post;
    filename := '';
    Application.ProcessMessages;
  finally

    // Complete the process and return the screen cursor to normal.
    fProcessRunning := false;
    btn_TestIt.Enabled := true;
    btn_Cancel.Caption := 'Close';
    MemoryStream.free;
    TempStream.free;
  end;
  qmp3.refresh;
end;


procedure TfrmMP3inserts.btn_CancelClick(Sender: TObject);
begin
  // Allow the process to be cancelled if it is running.
  if fProcessRunning then begin
    fcancelled := true;
  end else begin
    IB_Transaction.Commit;

    Close;
  end;
end;

procedure TfrmMP3inserts.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  // Don't allow the form to be closed if the process is running.
  if FProcessRunning then begin
    CanClose := false;
    MessageBeep(0);
  end;
end;

procedure TfrmMP3inserts.IB_Connection1BeforeConnect(
  Sender: TIB_Connection);
begin
  // Make sure that the database file exists.
  with IB_Connection1 do begin
    if (Protocol = cpLocal) and not FileExists(Database) then begin
      IB_Script1.Execute;
    end;
  end;
end;


procedure TfrmMP3inserts.bbSaveClick(Sender: TObject);
begin
  sdMP3.FileName := qMP3.FieldByName('mp3title').asString;
  if sdMP3.Execute then
    (qmp3.FieldByName('mp3file') as TIB_ColumnBlob).SaveToFile(sdMp3.FileName);
end;

procedure TfrmMP3inserts.FormActivate(Sender: TObject);
begin
  qmp3.open;
  qmp3.active := true;
end;

end.