📄 main.pas
字号:
TableName := 'DETAIL';
OraSession.ExecSQL('TRUNCATE TABLE '+TableName, [Null]);
if Table is TOraTable then begin
meResult.Lines.Add('> ODAC');
TOraTable(Table).TableName := TableName;
end
else
if Table is TTable then begin
meResult.Lines.Add('> BDE');
TTable(Table).TableName := TableName;
end
else
if Table is TADOTable then begin
meResult.Lines.Add('> ADO');
TADOTable(Table).TableName := TableName;
end else
if Table = BorlandClientDataSet then begin
meResult.Lines.Add('> dbExpress');
BorlandSQLTable.TableName := TableName;
end;
Table.Open;
TickInfo.Start;
for i := 1 to Count do begin
Table.Insert;
Table.FieldByName('CODE').Value := i;
Table.FieldByName('Field1').AsString := '01234567890123456789';
Table.FieldByName('Field2').AsString := '12345678901234567890';
Table.Post;
end;
if Table = BorlandClientDataSet then
BorlandClientDataSet.ApplyUpdates(0);
ExecTime := TickInfo.GetInterval;
Table.Close;
meResult.Lines.Add('Inserted' + IntToStr(Count) + ' records ' + IntervalToStr(ExecTime));
Result := ExecTime;
end;
function TfmMain.SPCallTest(StoredProc:TComponent; Count:integer):integer;
var
i:integer;
ExecTime:integer;
begin
CheckConnected;
if StoredProc is TOraStoredProc then
meResult.Lines.Add('> ODAC')
else
if StoredProc is TStoredProc then
meResult.Lines.Add('> BDE')
else
if StoredProc is TADOStoredProc then
meResult.Lines.Add('> ADO');
if StoredProc is TSQLStoredProc then
meResult.Lines.Add('> dbExpress');
TickInfo.Start;
for i := 1 to Count do begin
if StoredProc is TOraStoredProc then begin
with TOraStoredProc(StoredProc) do begin
if i = 1 then begin
StoredProcName := 'Master_Insert';
Prepare;
end;
ParamByName('p_Code').AsInteger := i;
ParamByName('p_Field1').AsString := '01234567890123456789';
ParamByName('p_Field2').AsString := '12345678901234567890';
ParamByName('p_Field3').AsString := '23456789012345678901';
Execute;
end;
end
else
if StoredProc is TStoredProc then begin
with TStoredProc(StoredProc) do begin
if i = 1 then begin
StoredProcName := 'MASTER_INSERT';
Prepare;
end;
ParamByName('p_Code').AsInteger := i;
ParamByName('p_Field1').AsString := '01234567890123456789';
ParamByName('p_Field2').AsString := '12345678901234567890';
ParamByName('p_Field3').AsString := '23456789012345678901';
ExecProc;
end;
end
else
if StoredProc is TADOStoredProc then begin
with TADOStoredProc(StoredProc) do begin
if i = 1 then begin
ProcedureName := 'MASTER_INSERT';
Parameters.Refresh;
end;
Parameters.ParamByName('p_Code').Value := i;
Parameters.ParamByName('p_Field1').Value := '01234567890123456789';
Parameters.ParamByName('p_Field2').Value := '12345678901234567890';
Parameters.ParamByName('p_Field3').Value := '23456789012345678901';
ExecProc;
end;
end else
if StoredProc is TSQLStoredProc then begin
with TSQLStoredProc(StoredProc) do begin
if i = 1 then begin
StoredProcName := 'MASTER_INSERT';
Prepared := True;
end;
Params.ParamValues['p_Code'] := i;
Params.ParamValues['p_Field1'] := '01234567890123456789';
Params.ParamValues['p_Field2'] := '12345678901234567890';
Params.ParamValues['p_Field3'] := '23456789012345678901';
ExecProc;
// Prepared := false;
end;
end
end;
ExecTime := TickInfo.GetInterval;
meResult.Lines.Add('Executed ' + IntToStr(Count) + ' times in ' + IntervalToStr(ExecTime));
Result := ExecTime;
end;
function TfmMain.DataLoadingTest(Loader:TComponent; Count:integer): integer;
const
ArrSize = 100;
var
i:integer;
LoadTime:integer;
SQL:string;
Index:integer;
begin
CheckConnected;
SQL := 'INSERT INTO Loaded (Code, Field1) VALUES (:Code, :Field1)';
// SQL := 'begin null; end;';
if Loader is TOraQuery then begin
meResult.Lines.Add('> ODAC');
TOraQuery(Loader).SQL.Text := SQL;
end
else
if Loader is TOraSQL then begin
meResult.Lines.Add('> ODAC[SQL]');
TOraSQL(Loader).SQL.Text := SQL;
end
else
if Loader is TOraLoader then begin
meResult.Lines.Add('> ODAC[Loader]');
end
else
if Loader is TQuery then begin
meResult.Lines.Add('> BDE');
TQuery(Loader).SQL.Text := SQL;
end
else
if Loader is TADOQuery then begin
meResult.Lines.Add('> ADO');
TADOQuery(Loader).SQL.Text := SQL;
end;
if Loader is TSQLQuery then begin
meResult.Lines.Add('> SQL');
TSQLQuery(Loader).SQL.Text := SQL;
end;
TickInfo.Start;
Index := 1;
if Loader is TOraLoader then begin
LoadCount := Count;
TOraLoader(Loader).Load;
end
else
for i := 1 to Count do begin
if Loader is TOraQuery then begin
TOraQuery(Loader).Prepare;
TOraQuery(Loader).ParamByName('Code').AsInteger := i;
TOraQuery(Loader).ParamByName('Field1').AsString := '01234567890123456789';
TOraQuery(Loader).Execute;
end
else
if Loader is TOraSQL then begin
TOraSQL(Loader).Prepare;
TOraSQL(Loader).ArrayLength := ArrSize;
TOraSQL(Loader).ParamByName('Code').ItemAsInteger[Index] := i;
TOraSQL(Loader).ParamByName('Field1').ItemAsString[Index] := '01234567890123456789';
Inc(Index);
if (Index > ArrSize) or (i = Count) then begin
if (i = Count) and (Count mod ArrSize > 0) then
TOraSQL(Loader).Execute(Count mod ArrSize)
else
TOraSQL(Loader).Execute(ArrSize);
Index := 1;
end;
end
else
if Loader is TQuery then begin
TQuery(Loader).Prepare;
TQuery(Loader).ParamByName('Code').AsInteger := i;
TQuery(Loader).ParamByName('Field1').AsString := '01234567890123456789';
TQuery(Loader).ExecSQL;
end
else
if Loader is TADOQuery then begin
TADOQuery(Loader).Parameters.ParamByName('Code').Value := i;
TADOQuery(Loader).Parameters.ParamByName('Field1').Value := '01234567890123456789';
TADOQuery(Loader).ExecSQL;
end else
if Loader is TSQLQuery then begin
TSQLQuery(Loader).prepared := True;
TSQLQuery(Loader).ParamByName('Code').DataType := ftString;
TSQLQuery(Loader).ParamByName('Code').Value := i;
TSQLQuery(Loader).ParamByName('Field1').DataType := ftString;
TSQLQuery(Loader).ParamByName('Field1').Value := '01234567890123456789';
TSQLQuery(Loader).ExecSQL;
end;
end;
{ if Loader is TOraQuery then begin
TOraQuery(Loader).UnPrepare;
end
else
if Loader is TOraSQL then begin
TOraSQL(Loader).UnPrepare;
end
else
if Loader is TQuery then begin
TQuery(Loader).UnPrepare;
end
else
if Loader is TADOQuery then begin
end;}
LoadTime := TickInfo.GetInterval;
meResult.Lines.Add('Loaded ' + IntToStr(Count) + ' recs in ' + IntervalToStr(LoadTime));
Result := LoadTime;
end;
procedure TfmMain.FormShow(Sender: TObject);
begin
edFetchRows.Text := IntToStr(OraQuery.FetchRows);
cbNet.Checked := OraSession.Options.Net;
cbOCI7.Checked := OraSession.Options.UseOCI7;
edFetchRowsExit(nil);
end;
procedure TfmMain.btConnectClick(Sender: TObject);
begin
if not OraSession.Connected then begin
cbNet.Checked := false;
OraSession.Options.Net := false;
OraSession.Connect;
meResult.Lines.Add('ODAC connected');
end;
if cbBDE.Checked and not Database.Connected then begin
Database.Params.Values['USER NAME'] := OraSession.UserName;
Database.Params.Values['PASSWORD'] := OraSession.Password;
Database.Params.Values['SERVER NAME'] := OraSession.Server;
Database.Open;
meResult.Lines.Add('BDE connected');
end;
if cbADO.Checked and not ADOConnection.Connected then begin
ADOConnection.ConnectionString := Format('Provider=MSDAORA.1;Password=%s;User ID=%s;Data Source=%s',
[OraSession.Password, OraSession.UserName, OraSession.Server]);
ADOConnection.Open;
meResult.Lines.Add('ADO connected');
end;
if cbdbExpress.Checked and not BorlandSQLConnection.Connected then begin
BorlandSQLConnection.Params.Values['User_Name'] := OraSession.UserName;
BorlandSQLConnection.Params.Values['Password'] := OraSession.Password;
BorlandSQLConnection.Params.Values['DataBase'] := OraSession.Server;
BorlandSQLConnection.Connected := True;
meResult.Lines.Add('dbExpress connected');
end;
end;
procedure TfmMain.btDisconnectClick(Sender: TObject);
begin
OraSession.Disconnect;
BorlandSQLConnection.Connected := false;
ADOConnection.Close;
Database.Close;
meResult.Lines.Add('Disconected');
end;
procedure TfmMain.btFetchTestClick(Sender: TObject);
const
Step = 5000;
var
i: integer;
ResODAC,ResBDE,ResADO,ResdbExpress: integer;
mBDE,mADO,mdbExp: double;
begin
Chart.Title.Text.Text := 'Fetch Test';
Chart.Series[0].Clear;
Chart.Series[1].Clear;
Chart.Series[2].Clear;
Chart.Series[3].Clear;
Chart.BottomAxis.Minimum := 0;
Chart.BottomAxis.Maximum := 11 * Step;
mBDE := 0;
mADO := 0;
mdbExp := 0;
for i := 1 to 10 do begin
ResODAC := 0;
ResBDE := 0;
ResADO := 0;
ResdbExpress := 0;
meResult.Lines.Add('---------------');
// BDE
if cbBDE.Checked then begin
ResBDE := FetchTest(BDEQuery, i*Step);
Chart.Series[1].AddXY(i*Step, ResBDE/1000, '', clTeeColor);
end;
// ODAC
if cbODAC.Checked then begin
ResODAC := FetchTest(OraQuery, i*Step);
Chart.Series[0].AddXY(i*Step, ResODAC/1000, '', clTeeColor);
end;
// ADO
if cbADO.Checked then begin
ResADO := FetchTest(ADOQuery, i*Step);
Chart.Series[2].AddXY(i*Step, ResADO/1000, '', clTeeColor);
end;
// dbExpress
if cbdbExpress.Checked then begin
ResdbExpress := FetchTest(BorlandSQLQuery, i*Step);
Chart.Series[3].AddXY(i*Step, ResdbExpress/1000, '', clTeeColor);
end;
if ResODAC > 0 then begin
mBDE := ((i - 1)*mBDE + ResBDE/ResODAC)/i;
mADO := ((i - 1)*mADO + ResADO/ResODAC)/i;
mdbExp := ((i - 1)*mdbExp + ResdbExpress/ResODAC)/i;
lbODAC.Caption := FloatToStrF(1, ffGeneral, 5, 3);
lbBDE.Caption := FloatToStrF(mBDE, ffGeneral, 5, 3);
lbADO.Caption := FloatToStrF(mADO, ffGeneral, 5, 3);
lbdbExpress.Caption := FloatToStrF(mdbExp, ffGeneral, 5, 3);
lbBDE.Update;
lbADO.Update;
lbdbExpress.Update;
end;
Chart.Update;
end;
end;
procedure TfmMain.btMasterDetailTestClick(Sender: TObject);
var
i:integer;
ResODAC,ResBDE,ResADO,ResdbExp: integer;
mBDE,mADO,mdbExp: double;
begin
Chart.Title.Text.Text := 'Master/Detail Test';
Chart.Series[0].Clear;
Chart.Series[1].Clear;
Chart.Series[2].Clear;
Chart.Series[3].Clear;
Chart.BottomAxis.Minimum := 0;
Chart.BottomAxis.Maximum := 550;
mBDE := 0;
mADO := 0;
mdbExp := 0;
for i := 1 to 10 do begin
ResODAC := 0;
ResBDE := 0;
ResADO := 0;
ResdbExp := 0;
meResult.Lines.Add('---------------');
// ODAC
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -