System.SysUtils, System.Types, System.UITypes, System.Classes,
System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.Ani, FMX.Layouts,
- FMX.Gestures,
+ FMX.Gestures, FMX.Graphics, FMX.Surfaces,
FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Param,
FireDAC.Stan.Error, FireDAC.DatS, FireDAC.Phys.Intf, FireDAC.DApt.Intf,
FireDAC.Stan.Async, FireDAC.DApt, FireDAC.UI.Intf, FireDAC.Stan.Def,
System.Bindings.Outputs, FMX.Bind.Editors, Data.Bind.Components, Data.DB,
FMX.Controls.Presentation, FMX.Edit, FMX.Bind.Navigator, Data.Bind.DBScope,
FireDAC.Comp.Client, FireDAC.Comp.DataSet, FMX.Objects, FMX.StdCtrls,
- FireDAC.FMXUI.Wait, FireDAC.Comp.UI;
+ FireDAC.FMXUI.Wait, FireDAC.Comp.UI, FireDAC.Comp.BatchMove;
type
TForm2 = class(TForm)
FDGUIxWaitCursor1: TFDGUIxWaitCursor;
BindSourceDB1: TBindSourceDB;
NavigatorBindSourceDB12: TBindNavigator;
- LinkPropertyToFieldBitmap: TLinkPropertyToField;
LinkControlToField1: TLinkControlToField;
Button1: TButton;
OpenDialog1: TOpenDialog;
Label1: TLabel;
LinkPropertyToFieldText: TLinkPropertyToField;
- FDTable1id: TFDAutoIncField;
- FDTable1name: TWideStringField;
- FDTable1source: TBlobField;
+ LinkPropertyToFieldBitmap: TLinkPropertyToField;
+ FDQuery1: TFDQuery;
+ Button2: TButton;
+ Button3: TButton;
procedure Button1Click(Sender: TObject);
- procedure FDTable1BeforeInsert(DataSet: TDataSet);
- procedure FDTable1AfterInsert(DataSet: TDataSet);
procedure FormCreate(Sender: TObject);
- procedure FDTable1AfterPost(DataSet: TDataSet);
+ procedure Button2Click(Sender: TObject);
+ procedure Button3Click(Sender: TObject);
private
- pos: integer;
{ private \90é\8c¾ }
+ procedure streamToField(stream, field: TStream);
public
{ public \90é\8c¾ }
end;
procedure TForm2.Button1Click(Sender: TObject);
var
s: TStream;
+ t: TMemoryStream;
begin
if OpenDialog1.Execute = true then
begin
- Image1.Bitmap.LoadFromFile(OpenDialog1.FileName);
+ FDTable1.Edit;
s := FDTable1.CreateBlobStream(FDTable1.FieldByName('source'), bmWrite);
+ t := TMemoryStream.Create;
try
- Image1.Bitmap.SaveToStream(s);
+ t.LoadFromFile(OpenDialog1.FileName);
+ streamToField(t, s);
+ FDTable1.Post;
finally
s.Free;
+ t.Free;
end;
end;
end;
-procedure TForm2.FDTable1AfterInsert(DataSet: TDataSet);
+procedure TForm2.Button2Click(Sender: TObject);
begin
- FDTable1.FieldByName('id').AsInteger := pos;
- FDTable1.FieldByName('name').AsString := 'slide' + pos.ToString + '.jpg';
+ with FDQuery1.SQL do
+ begin
+ Clear;
+ Add('drop table images;');
+ Add('create table images(id int primary key, name varchar(30), source mediumblob);');
+ end;
+ FormCreate(Sender);
end;
-procedure TForm2.FDTable1AfterPost(DataSet: TDataSet);
+procedure TForm2.FormCreate(Sender: TObject);
+var
+ i: Integer;
+ s, t: TStream;
begin
- FDTable1.Refresh;
+ FDQuery1.ExecSQL;
+ FDTable1.Open;
+ if FDTable1.RecordCount = 0 then
+ begin
+ for i := 1 to 50 do
+ FDTable1.AppendRecord([i, Format('slide%d.jpg', [i]), nil]);
+ FDTable1.First;
+ FDTable1.CachedUpdates := true;
+ for i := 1 to 10 do
+ begin
+ FDTable1.Edit;
+ s := FDTable1.CreateBlobStream(FDTable1.FieldByName('source'), bmWrite);
+ t := TResourceStream.Create(HInstance, Format('Resource_%d', [i]),
+ RT_RCDATA);
+ try
+ streamToField(t, s);
+ FDTable1.Post;
+ finally
+ s.Free;
+ end;
+ FDTable1.Next;
+ end;
+ FDTable1.ApplyUpdates;
+ FDTable1.CommitUpdates;
+ FDTable1.CachedUpdates := false;
+ end;
+ FDTable1.First;
end;
-procedure TForm2.FDTable1BeforeInsert(DataSet: TDataSet);
+procedure TForm2.streamToField(stream, field: TStream);
+var
+ bmp: TBitmapSurface;
+ pm: TBitmapCodecSaveParams;
+ img: TBitmap;
begin
- FDTable1.Last;
- pos := FDTable1.FieldByName('id').AsInteger + 1;
+ pm.Quality := 100;
+ bmp := TBitmapSurface.Create;
+ img := TBitmap.Create;
+ try
+ img.LoadFromStream(stream);
+ bmp.Assign(img);
+ TBitmapCodecManager.SaveToStream(field, bmp, '.jpg', @pm);
+ finally
+ bmp.Free;
+ img.Free;
+ end;
end;
-procedure TForm2.FormCreate(Sender: TObject);
+procedure TForm2.Button3Click(Sender: TObject);
begin
- if FDTable1.Exists = false then
- begin
- FDTable1.CreateTable;
- FDTable1.Open;
- end;
- FDTable1.Refresh;
+ FDTable1.Edit;
+ FDTable1.FieldByName('source').Assign(nil);
+ FDTable1.Post;
end;
end.