Registriert seit: 1. Feb 2018
3.691 Beiträge
Delphi 11 Alexandria
|
AW: Datenbank für schnelle Bilder, Vorschläge bitte.
25. Apr 2018, 18:25
Die Suche ist Aufgebaut nach diesem Beispiel-Code von UIB:
Delphi-Quellcode:
unit main;
interface
uses
{$IFDEF LINUX}
libc, QForms, QStdCtrls, QControls, QGraphics, QDialogs, QExtCtrls,
{$ELSE}
Windows, Graphics, Controls, Forms, Messages, Dialogs, StdCtrls,
{$ENDIF}
SysUtils, Classes, uib, SyncObjs;
type
TForm1 = class(TForm)
DataBase: TUIBDataBase;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;
TMyThread = class(TThread)
protected
procedure Execute; override;
destructor destroy; override;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
for i := 0 to 49 do
TMyThread.Create(False);
end;
var
x: integer = 0;
{ TMyThread }
destructor TMyThread.destroy;
begin
inherited;
end;
procedure TMyThread.Execute;
var
Query: TUIBQuery;
Transaction: TUIBTransaction;
begin
FreeOnTerminate := true;
// Form1.DataBase.Lock; //simulate single thread
try
Query := TUIBQuery.Create( nil);
Transaction := TUIBTransaction.Create( nil);
try
Transaction.DataBase := Form1.DataBase;
Query.Transaction := Transaction;
Query.FetchBlobs := True;
Query.SQL.Text := ' select * from project';
Query.Open;
while not Query.EOF do
begin
Query.Next;
Sleep(10); // simulate activity
end;
finally
Query.Close(etmCommit);
Query.Free;
Transaction.Free;
end;
finally
// Form1.DataBase.UnLock; //simulate single thread
end;
end;
end.
Die Bilder hole ich mir wie in diesem UIB-Code Sample:
Delphi-Quellcode:
unit main;
interface
uses
{$IFDEF LINUX}
libc, QForms, QStdCtrls, QControls, QGraphics, QDialogs, QExtCtrls,
{$ELSE}
Windows, Graphics, Controls, Forms, Messages, Dialogs, StdCtrls, ExtCtrls,
{$ENDIF}
SysUtils, Classes, uib;
type
TMainForm = class(TForm)
Image: TImage;
LoadImage: TButton;
SaveImage: TButton;
DataBase: TUIBDataBase;
Transaction: TUIBTransaction;
Query: TUIBQuery;
OpenDialog: TOpenDialog;
procedure LoadImageClick(Sender: TObject);
procedure SaveImageClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
MainForm: TMainForm;
implementation
uses Math;
{$R *.dfm}
procedure TMainForm.LoadImageClick(Sender: TObject);
var
Stream: TMemoryStream;
begin
Query.SQL.Text := ' Select Stream from TBLOB';
Query.Params.Clear;
Query.Open;
Stream := TMemoryStream.Create;
try
Query.ReadBlob(' STREAM', Stream);
Image.Picture.Bitmap.LoadFromStream(Stream);
finally
Stream.Free;
end;
Query.Close(etmCommit);
end;
procedure TMainForm.SaveImageClick(Sender: TObject);
var Stream: TFileStream;
begin
If OpenDialog.Execute then
begin
Stream := TFileStream.Create(OpenDialog.FileName, fmOpenRead);
try
Query.SQL.Text := ' UPDATE TBLOB SET STREAM = :blob';
Query.ParamsSetBlob(' blob', Stream);
Query.ExecSQL;
finally
Stream.Free;
end;
Query.Close(etmCommit);
end;
end;
end.
Geändert von KodeZwerg (25. Apr 2018 um 18:27 Uhr)
|