⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 objects.pas

📁 Oracle Data Access Components Source Code ODAC v.6.70.0.45
💻 PAS
字号:
unit Objects;

interface

uses
{$IFDEF LINUX}
  SysUtils, Types, Classes, QGraphics, QControls, QForms, QDialogs, QStdCtrls,
  QDBCtrls, QComCtrls, QExtCtrls, QGrids, QDBGrids, QButtons, OdacClx,
{$ELSE}
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  DBCtrls, ExtCtrls, Grids, DBGrids, StdCtrls, ToolWin, ComCtrls, Buttons,
  OdacVcl,
{$ENDIF}
  Db, MemUtils, Ora, DBAccess, OraScript, MemDS, OraSmart, OdacDemoFrame, OdacDemoForm,
  DAScript;

type
  TObjectsFrame = class(TOdacDemoFrame)
    ToolBar1: TPanel;
    DBGrid: TDBGrid;
    dsData: TDataSource;
    Query: TSmartQuery;
    OraSQL: TOraSQL;
    spGetName: TOraStoredProc;
    Panel1: TPanel;
    btOpen: TSpeedButton;
    btClose: TSpeedButton;
    DBNavigator1: TDBNavigator;
    btCallMethod: TSpeedButton;
    btCloneObject: TSpeedButton;
    btAddRecord: TSpeedButton;
    btShowCountry: TSpeedButton;
    cbObjectView: TCheckBox;
    Panel2: TPanel;
    procedure btOpenClick(Sender: TObject);
    procedure btCloseClick(Sender: TObject);
    procedure cbObjectViewClick(Sender: TObject);
    procedure btShowCountryClick(Sender: TObject);
    procedure btAddRecordClick(Sender: TObject);
    procedure btCloneObjectClick(Sender: TObject);
    procedure btCallMethodClick(Sender: TObject);
  private
    { Private declarations }
  public
    procedure Initialize; override;
    procedure SetDebug(Value: boolean); override;
  end;

implementation
uses
  OraCall, OraClasses, OraObjects;

{$IFDEF CLR}
{$R *.nfm}
{$ENDIF}
{$IFDEF WIN32}
{$R *.dfm}
{$ENDIF}
{$IFDEF LINUX}
{$R *.xfm}
{$ENDIF}

procedure TObjectsFrame.btOpenClick(Sender: TObject);
begin
  dsData.DataSet.Open;
end;

procedure TObjectsFrame.btCloseClick(Sender: TObject);
begin
  dsData.DataSet.Close;
end;

procedure TObjectsFrame.Initialize;
begin
  inherited;

  Query.Connection := Connection;
  OraSQL.Connection := Connection;
  spGetName.Connection := Connection;

  cbObjectView.Checked := dsData.DataSet.ObjectView;
end;

procedure TObjectsFrame.cbObjectViewClick(Sender: TObject);
begin
  if not dsData.DataSet.Active then
    dsData.DataSet.ObjectView := cbObjectView.Checked
  else
    cbObjectView.Checked := dsData.DataSet.ObjectView;
end;

procedure TObjectsFrame.SetDebug(Value: boolean);
begin
  Query.Debug := Value;
  OraSQL.Debug := Value;
  spGetName.Debug := Value;
end;

procedure TObjectsFrame.btShowCountryClick(Sender: TObject);
var
  Value: string;
begin
  if Query.ObjectView then
    Value := TADTField(TADTField(
      Query.FieldByName('PERSON')).
      Fields.FieldByName('ADDRESS')).
      Fields.FieldByName('COUNTRY').AsString
  else
    Value := Query.FieldByName('PERSON.ADDRESS.COUNTRY').AsString;

  Value := Query.GetObject('PERSON').AttrAsString['ADDRESS.COUNTRY'];

  Application.MessageBox(PChar(Value), 'Country'{$IFNDEF LINUX}, MB_OK{$ENDIF});
end;

procedure TObjectsFrame.btAddRecordClick(Sender: TObject);
begin
  OraSQL.SQL.Text := 'INSERT INTO ODAC_Emp (PERSON, JOB, HIREDATE, SAL)' +
                     'VALUES (:PERSON, :JOB, : HIREDATE, :SAL)';

  with OraSQL.ParamByName('Person').AsObject do begin
    AllocObject(OdacForm.OraSession.OCISvcCtx, 'TPerson');
    AttrAsString['Name'] := 'JON';
    AttrAsString['Address.Country'] := 'USA';
    AttrAsString['Address.City'] := 'Boston';
    AttrAsInteger['Address.Apartment'] := 133;
    AttrAsDateTime['BirthDate'] := EncodeDate(1970, 7, 23);
  end;
  OraSQL.ParamByName('Job').AsString := 'MANAGER';
  OraSQL.ParamByName('HireDate').AsDateTime := EncodeDate(1998, 5, 14);
  OraSQL.ParamByName('Sal').AsInteger := 1700;
  OraSQL.Execute;

  Query.Refresh;
end;

procedure TObjectsFrame.btCloneObjectClick(Sender: TObject);
var
  OraObject: TOraObject;
begin
  if not Query.IsEmpty then begin
    OraObject := Query.GetObject('Person');

    OraSQL.SQL.Text := 'INSERT INTO ODAC_Emp (PERSON)' +
                       'VALUES (:PERSON)';

    OraSQL.ParamByName('Person').AsObject := OraObject;
    OraSQL.Execute;

    Query.Refresh;
  end;
end;

procedure TObjectsFrame.btCallMethodClick(Sender: TObject);
begin
  if not Query.IsEmpty then begin
    spGetName.ParamByName('Self').AsObject := Query.GetObject('Person');
    spGetName.Execute;
    Application.MessageBox(PChar(spGetName.ParamByName('Result').AsString), 'Country'{$IFNDEF LINUX}, MB_OK{$ENDIF});
  end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -