📄 main.pas
字号:
unit Main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, Chart, StdCtrls, TeEngine, TeeProcs, Debug, Series,
MemDS, DBAccess, Ora, OraScript, OraLoader, OraSmart, OraCall, OdacVcl,
Db, DBTables, ADODB, DBXpress, SqlExpr, FMTBcd, DBClient, Provider;
type
TfmMain = class(TForm)
OraSession: TOraSession;
OraQuery: TOraQuery;
scCreate: TOraScript;
scDrop: TOraScript;
Chart: TChart;
Tollbar: TPanel;
btFetchTest: TButton;
meResult: TMemo;
btConnect: TButton;
btDisconnect: TButton;
Database: TDatabase;
BDEQuery: TQuery;
btMasterDetailTest: TButton;
btSPCallTest: TButton;
Series3: TBarSeries;
Series2: TBarSeries;
Series1: TBarSeries;
cbODAC: TCheckBox;
cbBDE: TCheckBox;
cbADO: TCheckBox;
edFetchRows: TEdit;
Label1: TLabel;
btCreate: TButton;
btDrop: TButton;
ADOConnection: TADOConnection;
ADOQuery: TADOQuery;
cbMark: TCheckBox;
OraQuery1: TOraQuery;
BDEQuery1: TQuery;
ADOQuery1: TADOQuery;
ADOStoredProc: TADOStoredProc;
OraStoredProc: TOraStoredProc;
BDEStoredProc: TStoredProc;
lbODAC: TLabel;
lbBDE: TLabel;
lbADO: TLabel;
OraSQL: TOraSQL;
btDataLoadingTest: TButton;
OraLoader: TOraLoader;
cbNet: TCheckBox;
cbOCI7: TCheckBox;
cbdbExpress: TCheckBox;
lbdbExpress: TLabel;
BorlandSQLConnection: TSQLConnection;
BorlandSQLQuery: TSQLQuery;
BorlandSQLQuery1: TSQLQuery;
BorlandSQLStoredProc: TSQLStoredProc;
Series4: TBarSeries;
btnMultiExecuting: TButton;
Bevel1: TBevel;
Bevel2: TBevel;
btnInsertPost: TButton;
OraTable: TOraTable;
BDETable: TTable;
ADOTable: TADOTable;
cbSetInternalName: TCheckBox;
Splitter1: TSplitter;
DataSetProvider1: TDataSetProvider;
BorlandClientDataSet: TClientDataSet;
BorlandSQLTable: TSQLTable;
Bevel3: TBevel;
cbResultLog: TCheckBox;
Bevel4: TBevel;
Bevel5: TBevel;
procedure btConnectClick(Sender: TObject);
procedure btDisconnectClick(Sender: TObject);
procedure btFetchTestClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure edFetchRowsExit(Sender: TObject);
procedure btCreateClick(Sender: TObject);
procedure btDropClick(Sender: TObject);
procedure cbMarkClick(Sender: TObject);
procedure btMasterDetailTestClick(Sender: TObject);
procedure btSPCallTestClick(Sender: TObject);
procedure btDataLoadingTestClick(Sender: TObject);
procedure OraLoaderPutData(Sender: TOraLoader);
procedure cbNetClick(Sender: TObject);
procedure cbOCI7Click(Sender: TObject);
procedure btnMultiExecutingClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure btnInsertPostClick(Sender: TObject);
procedure cbSetInternalNameClick(Sender: TObject);
procedure cbResultLogClick(Sender: TObject);
private
TickInfo: TTickInfo;
LoadCount: integer;
procedure CheckConnected;
function FetchTest(DataSet:TDataSet; Recs:integer): integer;
function MasterDetailTest(Master: TDataSet; Detail: TDataSet; Recs: integer): integer;
function SPCallTest(StoredProc: TComponent; Count: integer): integer;
function DataLoadingTest(Loader: TComponent; Count: integer): integer;
function MultiExecutingTest(Query: TComponent; Count: integer): integer;
function InsertPostTest(Table: TDataSet; Count: integer): integer;
public
constructor Create(Owner:TComponent); override;
destructor Destroy; override;
end;
var
fmMain: TfmMain;
implementation
uses
OraClasses, variants;
{$R *.DFM}
constructor TfmMain.Create(Owner:TComponent);
begin
inherited;
TickInfo := TTickInfo.Create;
end;
destructor TfmMain.Destroy;
begin
TickInfo.Free;
inherited;
end;
procedure TfmMain.CheckConnected;
begin
if (cbODAC.Checked and not OraSession.Connected) or
(cbBDE.Checked and not Database.Connected) or
(cbADO.Checked and not ADOConnection.Connected) or
(cbdbExpress.Checked and not BorlandSQLConnection.Connected) then
raise Exception.Create('You must connect first!');
end;
function TfmMain.FetchTest(DataSet:TDataSet; Recs:integer):integer;
var
i: integer;
OpenTime: integer;
FetchTime: integer;
SQL: string;
begin
CheckConnected;
SQL := 'SELECT * FROM Detail WHERE RowNum <= :Recs';
try
if DataSet is TOraQuery then begin
meResult.Lines.Add('> ODAC');
TOraQuery(DataSet).SQL.Text := SQL;
TOraQuery(DataSet).ParamByName('Recs').AsInteger := Recs;
TOraQuery(DataSet).UniDirectional:=True;
end
else
if DataSet is TQuery then begin
meResult.Lines.Add('> BDE');
TQuery(DataSet).SQL.Text := SQL;
TQuery(DataSet).ParamByName('Recs').AsInteger := Recs;
TQuery(DataSet).UniDirectional := True;
end
else
if DataSet is TADOQuery then begin
meResult.Lines.Add('> ADO');
TADOQuery(DataSet).SQL.Text := SQL;
TADOQuery(DataSet).Parameters.ParamByName('Recs').Value := Recs;
TADOQuery(DataSet).CursorType := ctOpenForwardOnly;
end else
if DataSet is TSQLQuery then begin
meResult.Lines.Add('> dbExpress');
TSQLQuery(DataSet).SQL.Text := SQL;
TSQLQuery(DataSet).ParamByName('Recs').DataType := ftString;
TSQLQuery(DataSet).ParamByName('Recs').Value := Recs;
end;
TickInfo.Start;
DataSet.Open;
OpenTime := TickInfo.GetInterval;
meResult.Lines.Add('Opened in ' + IntervalToStr(OpenTime));
TickInfo.Start;
i := 0;
while not DataSet.EOF do begin
Inc(i);
DataSet.Next;
end;
FetchTime := TickInfo.GetInterval;
meResult.Lines.Add('Fetched ' + IntToStr(i) + ' recs in ' + IntervalToStr(FetchTime));
DataSet.Close;
Result := OpenTime + FetchTime;
finally
if DataSet is TOraQuery then
TOraQuery(DataSet).UniDirectional := False
else
if DataSet is TQuery then
TQuery(DataSet).UniDirectional := False
else
if DataSet is TADOQuery then
TADOQuery(DataSet).CursorType := ctKeyset;
end;
end;
function TfmMain.MasterDetailTest(Master:TDataSet; Detail:TDataSet; Recs:integer):integer;
var
i,j:integer;
FetchTime:integer;
SQL,SQL1: string;
begin
CheckConnected;
SQL := 'SELECT * FROM Master WHERE Code <= :Recs'; //RowNum
SQL1 := 'SELECT * FROM Detail WHERE Master = :Code';
if Master is TOraQuery then begin
meResult.Lines.Add('> ODAC');
TOraQuery(Master).SQL.Text := SQL;
TOraQuery(Detail).SQL.Text := SQL1;
TOraQuery(Master).ParamByName('Recs').AsInteger := Recs
end
else
if Master is TQuery then begin
meResult.Lines.Add('> BDE');
TQuery(Master).SQL.Text := SQL;
TQuery(Detail).SQL.Text := SQL1;
TQuery(Master).ParamByName('Recs').AsInteger := Recs;
end
else
if Master is TADOQuery then begin
meResult.Lines.Add('> ADO');
TADOQuery(Master).SQL.Text := SQL;
TADOQuery(Detail).SQL.Text := SQL1;
TADOQuery(Master).Parameters.ParamByName('Recs').Value := Recs;
end else
if Master is TSQLQuery then begin
meResult.Lines.Add('> dbExpress');
TSQLQuery(Master).SQL.Text := SQL;
TSQLQuery(Detail).SQL.Text := SQL1;
TSQLQuery(Master).ParamByName('Recs').DataType := ftString;
TSQLQuery(Master).ParamByName('Recs').Value := Recs;
end;
TickInfo.Start;
Master.Open;
if Detail is TOraQuery then
TOraQuery(Detail).Prepare
else
if Detail is TQuery then
TQuery(Detail).Prepare
else
if Detail is TADOQuery then
else
if Detail is TSQLQuery then begin
TSQLQuery(Detail).Prepared := True;
TSQLQuery(Detail).ParamByName('Code').DataType := ftString;
end;
i := 0;
j := 0;
while not Master.EOF do begin
if Detail is TOraQuery then
TOraQuery(Detail).ParamByName('Code').AsInteger := Master.FieldByName('Code').AsInteger
else
if Detail is TQuery then
TQuery(Detail).ParamByName('Code').AsInteger := Master.FieldByName('Code').AsInteger
else
if Detail is TADOQuery then
TADOQuery(Detail).Parameters.ParamByName('Code').Value := Master.FieldByName('Code').AsInteger
else
if Detail is TSQLQuery then
TSQLQuery(Detail).ParamByName('Code').Value := Master.FieldByName('Code').AsInteger;
Detail.Open;
while not Detail.EOF do begin
Inc(j);
Detail.Next;
end;
Detail.Close;
Inc(i);
Master.Next;
end;
FetchTime := TickInfo.GetInterval;
meResult.Lines.Add('Fetched ' + IntToStr(i) + ' master recs, ' +
IntToStr(j) + ' detail recs in ' + IntervalToStr(FetchTime));
if Detail is TOraQuery then
TOraQuery(Detail).UnPrepare
else
if Detail is TQuery then
TQuery(Detail).UnPrepare
else
if Detail is TADOQuery then
else
if Detail is TSQLQuery then
TSQLQuery(Detail).Prepared := false;
Master.Close;
Result := FetchTime;
end;
procedure TOraSQLExecute(Query: TComponent);
begin
TOraSQL(Query).Execute;
end;
procedure TQueryExecSQL(Query: TComponent);
begin
TQuery(Query).ExecSQL;
end;
procedure TADOQueryExecSQL(Query: TComponent);
begin
TADOQuery(Query).ExecSQL;
end;
procedure TSQLQueryExecSQL(Query: TComponent);
begin
TSQLQuery(Query).ExecSQL;
end;
type
TExecSQLProc = procedure (Query: TComponent);
function TfmMain.MultiExecutingTest(Query: TComponent; Count: integer): integer;
var
i:integer;
ExecTime:integer;
SQL: string;
ExecSQLProc: TExecSQLProc;
begin
CheckConnected;
// SQL := 'begin null; end;';
SQL := 'commit';
ExecSQLProc := nil;
if Query is TOraSQL then begin
meResult.Lines.Add('> ODAC');
TOraSQL(Query).SQL.Text := SQL;
TOraSQL(Query).Prepared := True;
ExecSQLProc := TOraSQLExecute;
end
else
if Query is TQuery then begin
meResult.Lines.Add('> BDE');
TQuery(Query).SQL.Text := SQL;
TQuery(Query).Prepared := True;
ExecSQLProc := TQueryExecSQL;
end
else
if Query is TADOQuery then begin
meResult.Lines.Add('> ADO');
TADOQuery(Query).SQL.Text := SQL;
TADOQuery(Query).Prepared := True;
ExecSQLProc := TADOQueryExecSQL;
end else
if Query is TSQLQuery then begin
meResult.Lines.Add('> dbExpress');
TSQLQuery(Query).SQL.Text := SQL;
TSQLQuery(Query).Prepared := True;
ExecSQLProc := TSQLQueryExecSQL;
end;
TickInfo.Start;
for i := 1 to Count do
ExecSQLProc(Query);
ExecTime := TickInfo.GetInterval;
meResult.Lines.Add('Executed ' + IntToStr(Count) + ' count ' + IntervalToStr(ExecTime));
Result := ExecTime;
end;
function TfmMain.InsertPostTest(Table: TDataSet; Count: integer): integer;
var
i:integer;
ExecTime:integer;
TableName: string;
begin
CheckConnected;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -