{******************************************************************

                       JEDI-VCL Demo

 Copyright (C) 2002 Project JEDI

 Original author:

 Contributor(s):

 You may retrieve the latest version of this file at the JEDI-JVCL
 home page, located at http://jvcl.sourceforge.net

 The contents of this file are used with permission, subject to
 the Mozilla Public License Version 1.1 (the "License"); you may
 not use this file except in compliance with the License. You may
 obtain a copy of the License at
 http://www.mozilla.org/MPL/MPL-1_1Final.html

 Software distributed under the License is distributed on an
 "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
 implied. See the License for the specific language governing
 rights and limitations under the License.

******************************************************************}

unit query;

{$I jvcl.inc}
{$IFDEF COMPILER7_UP}
{$WARN SYMBOL_PLATFORM OFF}
{$ENDIF}


interface

uses
  ComObj, ActiveX, UIB_TLB, StdVcl, JvUIB, InternalItf;

type

  TOleQuery = class(TJvUIBQuery)
  private
    FTransaction: ITransaction;
  protected
    procedure SetTransaction(const Transaction: TJvUIBTransaction); override;
  end;

  TQuery = class(TAutoObject, IQuery)
  private
    FQuery: TOleQuery;
  protected
    function Get_SQL: WideString; safecall;
    procedure Set_SQL(const Value: WideString); safecall;
    function Get_FetchBlobs: WordBool; safecall;
    procedure Set_FetchBlobs(Value: WordBool); safecall;
    function Get_CachedFetch: WordBool; safecall;
    procedure Set_CachedFetch(Value: WordBool); safecall;
    function Get_QuickScript: WordBool; safecall;
    procedure Set_QuickScript(Value: WordBool); safecall;
    function Get_EOF: WordBool; safecall;
    procedure Open; safecall;
    procedure ExecSQL; safecall;
    procedure Close(Mode: Integer); safecall;
    procedure Next; safecall;
    procedure FetchAll; safecall;
    procedure SQLAddLine(const Str: WideString); safecall;
    function Get_Transaction: ITransaction; safecall;
    procedure Set_Transaction(const Value: ITransaction); safecall;
    function Get_AsVariant(Index: Word): OleVariant; safecall;
    function Get_AsInteger(Index: Word): Integer; safecall;
    function Get_AsSmallint(Index: Word): Smallint; safecall;
    function Get_AsSingle(Index: Word): Single; safecall;
    function Get_AsDouble(Index: Word): Double; safecall;
    function Get_AsInt64(Index: Word): Int64; safecall;
    function Get_AsString(Index: Word): WideString; safecall;
    function Get_ByNameAsSmallint(const Name: WideString): Smallint; safecall;
    function Get_ByNameAsInteger(const Name: WideString): Integer; safecall;
    function Get_ByNameAsSingle(const Name: WideString): Single; safecall;
    function Get_ByNameAsDouble(const Name: WideString): Double; safecall;
    function Get_ByNameAsInt64(const Name: WideString): Int64; safecall;
    function Get_ByNameAsString(const Name: WideString): WideString; safecall;
    function Get_ByNameAsVariant(const Name: WideString): OleVariant; safecall;
    function Get_FieldCount: Integer; safecall;
    function Get_AliasName(Index: Word): WideString; safecall;
    function Get_AsBoolean(Index: Word): WordBool; safecall;
    function Get_ByNameAsBoolean(const Name: WideString): WordBool; safecall;
    function Get_AsDateTime(Index: Word): TDateTime; safecall;
    function Get_ByNameAsDateTime(const Name: WideString): TDateTime; safecall;
  public
    procedure Initialize; override;
    destructor Destroy; override;
  end;

implementation

uses ComServ, JvUIBLib;

{ TOleQuery }

procedure TOleQuery.SetTransaction(const Transaction: TJvUIBTransaction);
begin
  inherited;
  if (Transaction = nil) then FTransaction := nil; // if database disconnect transaction
end;

{ TQuery }

function TQuery.Get_SQL: WideString;
begin
  Result := FQuery.SQL.Text;
end;

procedure TQuery.Set_SQL(const Value: WideString);
begin
  FQuery.SQL.Text := Value;
end;

function TQuery.Get_FetchBlobs: WordBool;
begin
  Result := FQuery.FetchBlobs;
end;

procedure TQuery.Set_FetchBlobs(Value: WordBool);
begin
  FQuery.FetchBlobs := Value;
end;

function TQuery.Get_CachedFetch: WordBool;
begin
  Result := FQuery.CachedFetch;
end;

procedure TQuery.Set_CachedFetch(Value: WordBool);
begin
  FQuery.CachedFetch := Value;
end;

function TQuery.Get_QuickScript: WordBool;
begin
  Result := FQuery.QuickScript;
end;

procedure TQuery.Set_QuickScript(Value: WordBool);
begin
  FQuery.QuickScript := Value;
end;

function TQuery.Get_EOF: WordBool;
begin
  Result := FQuery.EOF;
end;

procedure TQuery.Open;
begin
  FQuery.Open;
end;

procedure TQuery.ExecSQL;
begin
  FQuery.ExecSQL;
end;

procedure TQuery.Close(Mode: Integer);
begin
  FQuery.Close(TEndTransMode(Mode));
end;

procedure TQuery.Next;
begin
  FQuery.Next;
end;

procedure TQuery.FetchAll;
begin
  FQuery.FetchAll;
end;

procedure TQuery.SQLAddLine(const Str: WideString);
begin
  FQuery.SQL.Add(Str);
end;

destructor TQuery.Destroy;
begin
  FQuery.Free;
  inherited;
end;

procedure TQuery.Initialize;
begin
  inherited;
  FQuery := TOleQuery.Create(nil);
end;

function TQuery.Get_Transaction: ITransaction;
begin
  Result := FQuery.FTransaction;
end;

procedure TQuery.Set_Transaction(const Value: ITransaction);
begin
  if (Value = nil) then
    FQuery.SetTransaction(nil) else
    FQuery.SetTransaction((value as IDataPointer).Data);
end;

function TQuery.Get_AsVariant(Index: Word): OleVariant;
begin
  Result := FQuery.Fields.AsVariant[Index];
end;

function TQuery.Get_AsInteger(Index: Word): Integer;
begin
  Result := FQuery.Fields.AsInteger[Index];
end;

function TQuery.Get_AsSmallint(Index: Word): Smallint;
begin
  Result := FQuery.Fields.AsSmallint[Index];
end;

function TQuery.Get_AsSingle(Index: Word): Single;
begin
  Result := FQuery.Fields.AsSingle[Index];
end;

function TQuery.Get_AsDouble(Index: Word): Double;
begin
  Result := FQuery.Fields.AsDouble[Index];
end;

function TQuery.Get_AsInt64(Index: Word): Int64;
begin
  Result := FQuery.Fields.AsInt64[Index];
end;

function TQuery.Get_AsString(Index: Word): WideString;
begin
  Result := FQuery.Fields.AsString[Index];
end;

function TQuery.Get_ByNameAsSmallint(const Name: WideString): Smallint;
begin
  Result := FQuery.Fields.ByNameAsSmallint[Name];
end;

function TQuery.Get_ByNameAsInteger(const Name: WideString): Integer;
begin
  Result := FQuery.Fields.ByNameAsInteger[Name];
end;

function TQuery.Get_ByNameAsSingle(const Name: WideString): Single;
begin
  Result := FQuery.Fields.ByNameAsSingle[Name];
end;

function TQuery.Get_ByNameAsDouble(const Name: WideString): Double;
begin
  Result := FQuery.Fields.ByNameAsDouble[Name];
end;

function TQuery.Get_ByNameAsInt64(const Name: WideString): Int64;
begin
  Result := FQuery.Fields.ByNameAsInt64[Name];
end;

function TQuery.Get_ByNameAsString(const Name: WideString): WideString;
begin
  Result := FQuery.Fields.ByNameAsString[Name];
end;

function TQuery.Get_ByNameAsVariant(const Name: WideString): OleVariant;
begin
  Result := FQuery.Fields.ByNameAsVariant[Name];
end;

function TQuery.Get_FieldCount: Integer;
begin
  Result := FQuery.Fields.FieldCount;
end;

function TQuery.Get_AliasName(Index: Word): WideString;
begin
  Result := FQuery.Fields.AliasName[Index];
end;

function TQuery.Get_AsBoolean(Index: Word): WordBool;
begin
  Result := FQuery.Fields.AsBoolean[Index];
end;

function TQuery.Get_ByNameAsBoolean(const Name: WideString): WordBool;
begin
  Result := FQuery.Fields.ByNameAsBoolean[Name];
end;

function TQuery.Get_AsDateTime(Index: Word): TDateTime;
begin
  Result := FQuery.Fields.AsDateTime[Index];
end;

function TQuery.Get_ByNameAsDateTime(const Name: WideString): TDateTime;
begin
  Result := FQuery.Fields.ByNameAsDateTime[Name];
end;

initialization
  TAutoObjectFactory.Create(ComServer, TQuery, Class_Query,
    ciMultiInstance, tmApartment);
end.
