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

📄 main.pas

📁 ODAC 5.7.0.28
💻 PAS
📖 第 1 页 / 共 3 页
字号:

  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 + -