286 lines
8.5 KiB
ObjectPascal
286 lines
8.5 KiB
ObjectPascal
{*********************************************************}
|
|
{ }
|
|
{ Zeos Database Objects }
|
|
{ Blobs Example Application }
|
|
{ }
|
|
{ Originally written by Sergey Seroukhov }
|
|
{ }
|
|
{*********************************************************}
|
|
|
|
{@********************************************************}
|
|
{ Copyright (c) 1999-2006 Zeos Development Group }
|
|
{ }
|
|
{ License Agreement: }
|
|
{ }
|
|
{ This library is distributed in the hope that it will be }
|
|
{ useful, but WITHOUT ANY WARRANTY; without even the }
|
|
{ implied warranty of MERCHANTABILITY or FITNESS FOR }
|
|
{ A PARTICULAR PURPOSE. See the GNU Lesser General }
|
|
{ Public License for more details. }
|
|
{ }
|
|
{ The source code of the ZEOS Libraries and packages are }
|
|
{ distributed under the Library GNU General Public }
|
|
{ License (see the file COPYING / COPYING.ZEOS) }
|
|
{ with the following modification: }
|
|
{ As a special exception, the copyright holders of this }
|
|
{ library give you permission to link this library with }
|
|
{ independent modules to produce an executable, }
|
|
{ regardless of the license terms of these independent }
|
|
{ modules, and to copy and distribute the resulting }
|
|
{ executable under terms of your choice, provided that }
|
|
{ you also meet, for each linked independent module, }
|
|
{ the terms and conditions of the license of that module. }
|
|
{ An independent module is a module which is not derived }
|
|
{ from or based on this library. If you modify this }
|
|
{ library, you may extend this exception to your version }
|
|
{ of the library, but you are not obligated to do so. }
|
|
{ If you do not wish to do so, delete this exception }
|
|
{ statement from your version. }
|
|
{ }
|
|
{ }
|
|
{ The project web site is located on: }
|
|
{ http://zeos.firmos.at (FORUM) }
|
|
{ http://zeosbugs.firmos.at (BUGTRACKER) }
|
|
{ svn://zeos.firmos.at/zeos/trunk (SVN Repository) }
|
|
{ }
|
|
{ http://www.sourceforge.net/projects/zeoslib. }
|
|
{ http://www.zeoslib.sourceforge.net }
|
|
{ }
|
|
{ }
|
|
{ }
|
|
{ Zeos Development Group. }
|
|
{********************************************************@}
|
|
|
|
unit ZBlobsMain;
|
|
|
|
interface
|
|
|
|
uses
|
|
|
|
SysUtils, {$IFDEF VER140}Types, {$ENDIF}Classes, DB,
|
|
{$IFDEF LINUX}
|
|
QGraphics, QControls, QForms, QDialogs,
|
|
QStdCtrls, QExtCtrls, QDBCtrls, QGrids, QDBGrids,
|
|
{$ELSE}
|
|
Graphics, Controls, Forms, Dialogs,
|
|
StdCtrls, ExtCtrls, DBCtrls, Grids, DBGrids,
|
|
{$ENDIF}
|
|
ZConnection, ZDataset,
|
|
ZDbcMySQL, ZDbcPostgreSQL, ZDbcInterbase6, ZDbcCache, ZSqlUpdate, ZSqlMetadata,
|
|
ZDbcIntfs;
|
|
|
|
type
|
|
{** Defines the main form of the application. }
|
|
TfrmMain = class(TForm)
|
|
pnControl: TPanel;
|
|
pnMain: TPanel;
|
|
navMain: TDBNavigator;
|
|
gdMain: TDBGrid;
|
|
pnDetail: TPanel;
|
|
splMain: TSplitter;
|
|
splDetail: TSplitter;
|
|
memText: TDBMemo;
|
|
lblProtocol: TLabel;
|
|
cbxProtocol: TComboBox;
|
|
lblHostName: TLabel;
|
|
edtHostName: TEdit;
|
|
lblDatabase: TLabel;
|
|
edtDatabase: TEdit;
|
|
lblUserName: TLabel;
|
|
edtUserName: TEdit;
|
|
edtPassword: TEdit;
|
|
lblPassword: TLabel;
|
|
btnConnect: TButton;
|
|
btnDisconnect: TButton;
|
|
btnOpen: TButton;
|
|
btnClose: TButton;
|
|
btnApplyUpdates: TButton;
|
|
btnCancelUpdates: TButton;
|
|
dsMain: TDataSource;
|
|
imgBlob: TDBImage;
|
|
lblTableName: TLabel;
|
|
edtTableName: TEdit;
|
|
lblMemoColumn: TLabel;
|
|
edtMemoColumn: TEdit;
|
|
lblBlobColumn: TLabel;
|
|
edtBlobColumn: TEdit;
|
|
btnLoadImage: TButton;
|
|
dlgOpenFile: TOpenDialog;
|
|
cbxOidAsBlob: TCheckBox;
|
|
procedure cbxOidAsBlobClick(Sender: TObject);
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure btnConnectClick(Sender: TObject);
|
|
procedure btnDisconnectClick(Sender: TObject);
|
|
procedure btnOpenClick(Sender: TObject);
|
|
procedure btnCloseClick(Sender: TObject);
|
|
procedure btnApplyUpdatesClick(Sender: TObject);
|
|
procedure btnCancelUpdatesClick(Sender: TObject);
|
|
procedure PropertiesChange(Sender: TObject);
|
|
procedure btnLoadImageClick(Sender: TObject);
|
|
private
|
|
FConnection: TZConnection;
|
|
FDataset: TZQuery;
|
|
FMetadata: TZSqlMetadata;
|
|
public
|
|
property Connection: TZConnection read FConnection write FConnection;
|
|
property Metadata:TZSqlMetadata read FMetadata write FMetadata;
|
|
property Dataset: TZQuery read FDataset write FDataset;
|
|
end;
|
|
|
|
var
|
|
frmMain: TfrmMain;
|
|
|
|
implementation
|
|
|
|
{$IFDEF VER140}
|
|
{$R *.xfm}
|
|
{$ELSE}
|
|
{$R *.dfm}
|
|
{$ENDIF}
|
|
|
|
{**
|
|
Initializes this form properties.
|
|
@param Sender an event sender object reference.
|
|
}
|
|
procedure TfrmMain.FormCreate(Sender: TObject);
|
|
begin
|
|
Connection := TZConnection.Create(Self);
|
|
|
|
Dataset := TZQuery.Create(Self);
|
|
Dataset.Connection := Connection;
|
|
Dataset.ReadOnly := False;
|
|
// Dataset.CachedUpdates := True;
|
|
|
|
dsMain.Dataset := Dataset;
|
|
PropertiesChange(Self);
|
|
end;
|
|
|
|
{**
|
|
Updates database properties.
|
|
@param Sender an event sender object reference.
|
|
}
|
|
procedure TfrmMain.PropertiesChange(Sender: TObject);
|
|
Var iIndex: Integer;
|
|
begin
|
|
Connection.Protocol := cbxProtocol.Text;
|
|
Connection.HostName := edtHostName.Text;
|
|
Connection.Database := edtDatabase.Text;
|
|
Connection.User := edtUserName.Text;
|
|
Connection.Password := edtPassword.Text;
|
|
|
|
Dataset.SQL.Text := 'SELECT * FROM ' + edtTableName.Text;
|
|
memText.DataField := edtMemoColumn.Text;
|
|
imgBlob.DataField := edtBlobColumn.Text;
|
|
|
|
cbxOidAsBlob.Enabled := (pos('postgre', cbxProtocol.Text) <> 0);
|
|
|
|
if cbxOidAsBlob.Enabled then
|
|
cbxOidAsBlobClick(Sender)
|
|
else
|
|
Connection.Properties.Clear;
|
|
|
|
end;
|
|
|
|
{**
|
|
Establishes a connection to SQL server.
|
|
@param Sender an event sender object reference.
|
|
}
|
|
procedure TfrmMain.btnConnectClick(Sender: TObject);
|
|
begin
|
|
Connection.Connect;
|
|
end;
|
|
|
|
{**
|
|
Closes a connection to SQL server.
|
|
@param Sender an event sender object reference.
|
|
}
|
|
procedure TfrmMain.btnDisconnectClick(Sender: TObject);
|
|
begin
|
|
Connection.Disconnect;
|
|
end;
|
|
|
|
{**
|
|
Opens a SQL query object.
|
|
@param Sender an event sender object reference.
|
|
}
|
|
procedure TfrmMain.btnOpenClick(Sender: TObject);
|
|
var sTyp: String;
|
|
begin
|
|
Dataset.Open;
|
|
end;
|
|
|
|
{**
|
|
Closes a SQL query object.
|
|
@param Sender an event sender object reference.
|
|
}
|
|
procedure TfrmMain.btnCloseClick(Sender: TObject);
|
|
begin
|
|
Dataset.Close;
|
|
end;
|
|
|
|
{**
|
|
Posts cached update to database from SQL query.
|
|
@param Sender an event sender object reference.
|
|
}
|
|
procedure TfrmMain.btnApplyUpdatesClick(Sender: TObject);
|
|
begin
|
|
Dataset.Post;
|
|
// Dataset.CommitUpdates;
|
|
end;
|
|
|
|
{**
|
|
Cancel all previously made update in SQL query.
|
|
@param Sender an event sender object reference.
|
|
}
|
|
procedure TfrmMain.btnCancelUpdatesClick(Sender: TObject);
|
|
begin
|
|
// Dataset.CancelUpdates;
|
|
end;
|
|
|
|
{**
|
|
Load an image from file and stores it into the blob column.
|
|
@param Sender an event sender object reference.
|
|
}
|
|
procedure TfrmMain.btnLoadImageClick(Sender: TObject);
|
|
var
|
|
BlobStream: TStream;
|
|
FileStream: TStream;
|
|
begin
|
|
if Dataset.Active then begin
|
|
dlgOpenFile.Filter := 'Bitmap files (*.bmp)|*.BMP';
|
|
if dlgOpenFile.Execute then begin
|
|
begin
|
|
if Dataset.State <> dsEdit then
|
|
Dataset.Edit;
|
|
|
|
BlobStream := Dataset.CreateBlobStream(
|
|
Dataset.FieldByName(edtBlobColumn.Text), bmWrite);
|
|
try
|
|
FileStream := TFileStream.Create(dlgOpenFile.FileName, fmOpenRead);
|
|
try
|
|
BlobStream.CopyFrom(FileStream, FileStream.Size);
|
|
finally
|
|
FileStream.Free;
|
|
end;
|
|
finally
|
|
BlobStream.Free;
|
|
end;
|
|
|
|
Dataset.Post;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmMain.cbxOidAsBlobClick(Sender: TObject);
|
|
begin
|
|
if cbxOidAsBlob.Checked then
|
|
Connection.Properties.Add('oidasblob=true')
|
|
else
|
|
Connection.Properties.Clear;
|
|
end;
|
|
|
|
end.
|
|
|
|
|