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

📄 testaorasql.pas

📁 delphi通过OCI访问ORACLE
💻 PAS
📖 第 1 页 / 共 2 页
字号:
  CheckEquals(0, SQL.CurrentRecord);
  CheckEquals('kkkkkkkkkk', SQL.FieldByIndex[0].AsString[SQL.CurrentRecord]);
  CheckEquals(77777.7878, SQL.FieldByIndex[1].AsDouble[SQL.CurrentRecord], 0.0000005);
  CheckEquals('one', SQL.FieldByIndex[2].AsString[SQL.CurrentRecord]);
//  CheckEquals(12121212121212121212.0, SQL.FieldByIndex[3].AsDouble[SQL.CurrentRecord], 0.0000005);
  CheckEquals(SQL.CurrentRecord, SQL.FieldByIndex[4].AsDouble[SQL.CurrentRecord]);
  CheckEquals(0.0000000000000000006, SQL.FieldByIndex[5].AsDouble[SQL.CurrentRecord], 0.0000005);

  SQL.Next;
  CheckEquals(False, SQL.EOF);
  CheckEquals(2, SQL.RecordCount);
  CheckEquals(1, SQL.CurrentRecord);
  CheckEquals('qqqqqqqqqq', SQL.FieldByIndex[0].AsString[SQL.CurrentRecord]);
  CheckEquals(77777.7878, SQL.FieldByIndex[1].AsDouble[SQL.CurrentRecord], 0.0000005);
  CheckEquals('two', SQL.FieldByIndex[2].AsString[SQL.CurrentRecord]);
//  CheckEquals(12121212121212121212.0, SQL.FieldByIndex[3].AsDouble[SQL.CurrentRecord], 0.0000005);
  CheckEquals(SQL.CurrentRecord, SQL.FieldByIndex[4].AsDouble[SQL.CurrentRecord]);
  CheckEquals(0.0000000000000000006, SQL.FieldByIndex[5].AsDouble[SQL.CurrentRecord], 0.0000005);

  SQL.Next;
  CheckEquals(False, SQL.EOF);
  CheckEquals(3, SQL.RecordCount);
  CheckEquals(2, SQL.CurrentRecord);
  CheckEquals('cccccccccc', SQL.FieldByIndex[0].AsString[SQL.CurrentRecord]);
  CheckEquals(77777.7878, SQL.FieldByIndex[1].AsDouble[SQL.CurrentRecord], 0.0000005);
  CheckEquals('three', SQL.FieldByIndex[2].AsString[SQL.CurrentRecord]);
//  CheckEquals(12121212121212121212.0, SQL.FieldByIndex[3].AsDouble[SQL.CurrentRecord], 0.0000005);
  CheckEquals(SQL.CurrentRecord, SQL.FieldByIndex[4].AsDouble[SQL.CurrentRecord]);
  CheckEquals(0.0000000000000000006, SQL.FieldByIndex[5].AsDouble[SQL.CurrentRecord], 0.0000005);

  SQL.Next;
  CheckEquals(False, SQL.EOF);
  CheckEquals(4, SQL.RecordCount);
  CheckEquals(3, SQL.CurrentRecord);
  CheckEquals('gggggggggg', SQL.FieldByIndex[0].AsString[SQL.CurrentRecord]);
  CheckEquals(77777.7878, SQL.FieldByIndex[1].AsDouble[SQL.CurrentRecord], 0.0000005);
  CheckEquals('four', SQL.FieldByIndex[2].AsString[SQL.CurrentRecord]);
//  CheckEquals(12121212121212121212.0, SQL.FieldByIndex[3].AsDouble[SQL.CurrentRecord], 0.0000005);
  CheckEquals(SQL.CurrentRecord, SQL.FieldByIndex[4].AsDouble[SQL.CurrentRecord]);
  CheckEquals(0.0000000000000000006, SQL.FieldByIndex[5].AsDouble[SQL.CurrentRecord], 0.0000005);

  SQL.Next;
  CheckEquals(False, SQL.EOF);
  CheckEquals(5, SQL.RecordCount);
  CheckEquals(4, SQL.CurrentRecord);
  CheckEquals('iiiiiiiiii', SQL.FieldByIndex[0].AsString[SQL.CurrentRecord]);
  CheckEquals(77777.7878, SQL.FieldByIndex[1].AsDouble[SQL.CurrentRecord], 0.0000005);
  CheckEquals('five', SQL.FieldByIndex[2].AsString[SQL.CurrentRecord]);
//  CheckEquals(12121212121212121212.0, SQL.FieldByIndex[3].AsDouble[SQL.CurrentRecord], 0.0000005);
  CheckEquals(SQL.CurrentRecord, SQL.FieldByIndex[4].AsDouble[SQL.CurrentRecord]);
  CheckEquals(0.0000000000000000006, SQL.FieldByIndex[5].AsDouble[SQL.CurrentRecord], 0.0000005);

  CheckEquals(4, SQL.CurrentRecord);
  SQL.Next;
  CheckEquals(True, SQL.EOF);
  CheckEquals(5, SQL.CurrentRecord);
  SQL.Next;
  CheckEquals(True, SQL.EOF);
  CheckEquals(SQL.RecordCount, SQL.CurrentRecord);
  SQL.Prev;
  CheckEquals(False, SQL.EOF);
  CheckEquals(4, SQL.CurrentRecord);
  SQL.Prev;
  CheckEquals(False, SQL.EOF);
  CheckEquals(3, SQL.CurrentRecord);

  SQL.Next;
  CheckEquals(False, SQL.EOF);
  CheckEquals(4, SQL.CurrentRecord);
  SQL.Next;
  CheckEquals(True, SQL.EOF);
  CheckEquals(SQL.RecordCount, SQL.CurrentRecord);

  SQL.Prev;
  CheckEquals(False, SQL.EOF);
  CheckEquals(4, SQL.CurrentRecord);
  SQL.Prev;
  CheckEquals(False, SQL.EOF);
  CheckEquals(3, SQL.CurrentRecord);
  SQL.Prev;
  CheckEquals(False, SQL.EOF);
  CheckEquals(2, SQL.CurrentRecord);
  SQL.Prev;
  CheckEquals(False, SQL.EOF);
  CheckEquals(1, SQL.CurrentRecord);
  SQL.Prev;
  CheckEquals(False, SQL.EOF);
  CheckEquals(0, SQL.CurrentRecord);
  SQL.Prev;
  CheckEquals(False, SQL.EOF);
  CheckEquals(0, SQL.CurrentRecord);

  SQL.First;
  CheckEquals(False, SQL.EOF);
  CheckEquals(5, SQL.RecordCount);
  CheckEquals(0, SQL.CurrentRecord);
  CheckEquals('kkkkkkkkkk', SQL.FieldByIndex[0].AsString[SQL.CurrentRecord]);
  CheckEquals(77777.7878, SQL.FieldByIndex[1].AsDouble[SQL.CurrentRecord], 0.0000005);
  CheckEquals('one', SQL.FieldByIndex[2].AsString[SQL.CurrentRecord]);
//  CheckEquals(12121212121212121212.0, SQL.FieldByIndex[3].AsDouble[SQL.CurrentRecord], 0.0000005);
  CheckEquals(SQL.CurrentRecord, SQL.FieldByIndex[4].AsDouble[SQL.CurrentRecord]);
  CheckEquals(0.0000000000000000006, SQL.FieldByIndex[5].AsDouble[SQL.CurrentRecord], 0.0000005);

  FreeAndNil(SQL);
end;

procedure TTestAOraSQL.testAOraSQLUniDirectonal1;
begin
  fillTestTable;

  SQL.UniDirectional := True;
  SQL.SetQuery('select * from test order by f5');
  SQL.FetchCount := 1;
  SQL.LoadFields();
  CheckEquals(6, SQL.FieldCount);
  CheckEquals(True, SQL.UniDirectional);

  SQL.Open;

  CheckEquals(-1, SQL.CurrentRecord);
  CheckEquals(0, SQL.RecordCount);
  CheckEquals(False, SQL.EOF);

  SQL.Next;
  CheckEquals(False, SQL.EOF);
  CheckEquals(1, SQL.RecordCount);
  CheckEquals(0, SQL.CurrentRecord);
  CheckEquals('kkkkkkkkkk', SQL.FieldByIndex[0].AsString[SQL.CurrentRecord]);
  CheckEquals(77777.7878, SQL.FieldByIndex[1].AsDouble[SQL.CurrentRecord], 0.0000005);
  CheckEquals('one', SQL.FieldByIndex[2].AsString[SQL.CurrentRecord]);
//  CheckEquals(12121212121212121212.0, SQL.FieldByIndex[3].AsDouble[SQL.CurrentRecord], 0.0000005);
  CheckEquals(SQL.CurrentRecord, SQL.FieldByIndex[4].AsDouble[SQL.CurrentRecord]);
  CheckEquals(0.0000000000000000006, SQL.FieldByIndex[5].AsDouble[SQL.CurrentRecord], 0.0000005);

  SQL.Next;
  CheckEquals(False, SQL.EOF);
  CheckEquals(2, SQL.RecordCount);
  CheckEquals(1, SQL.CurrentRecord);
  CheckEquals('qqqqqqqqqq', SQL.FieldByIndex[0].AsString[SQL.CurrentRecord]);
  CheckEquals(77777.7878, SQL.FieldByIndex[1].AsDouble[SQL.CurrentRecord], 0.0000005);
  CheckEquals('two', SQL.FieldByIndex[2].AsString[SQL.CurrentRecord]);
//  CheckEquals(12121212121212121212.0, SQL.FieldByIndex[3].AsDouble[SQL.CurrentRecord], 0.0000005);
  CheckEquals(SQL.CurrentRecord, SQL.FieldByIndex[4].AsDouble[SQL.CurrentRecord]);
  CheckEquals(0.0000000000000000006, SQL.FieldByIndex[5].AsDouble[SQL.CurrentRecord], 0.0000005);

  SQL.Next;
  CheckEquals(False, SQL.EOF);
  CheckEquals(3, SQL.RecordCount);
  CheckEquals(2, SQL.CurrentRecord);
  CheckEquals('cccccccccc', SQL.FieldByIndex[0].AsString[SQL.CurrentRecord]);
  CheckEquals(77777.7878, SQL.FieldByIndex[1].AsDouble[SQL.CurrentRecord], 0.0000005);
  CheckEquals('three', SQL.FieldByIndex[2].AsString[SQL.CurrentRecord]);
//  CheckEquals(12121212121212121212.0, SQL.FieldByIndex[3].AsDouble[SQL.CurrentRecord], 0.0000005);
  CheckEquals(SQL.CurrentRecord, SQL.FieldByIndex[4].AsDouble[SQL.CurrentRecord]);
  CheckEquals(0.0000000000000000006, SQL.FieldByIndex[5].AsDouble[SQL.CurrentRecord], 0.0000005);

  SQL.Next;
  CheckEquals(False, SQL.EOF);
  CheckEquals(4, SQL.RecordCount);
  CheckEquals(3, SQL.CurrentRecord);
  CheckEquals('gggggggggg', SQL.FieldByIndex[0].AsString[SQL.CurrentRecord]);
  CheckEquals(77777.7878, SQL.FieldByIndex[1].AsDouble[SQL.CurrentRecord], 0.0000005);
  CheckEquals('four', SQL.FieldByIndex[2].AsString[SQL.CurrentRecord]);
//  CheckEquals(12121212121212121212.0, SQL.FieldByIndex[3].AsDouble[SQL.CurrentRecord], 0.0000005);
  CheckEquals(SQL.CurrentRecord, SQL.FieldByIndex[4].AsDouble[SQL.CurrentRecord]);
  CheckEquals(0.0000000000000000006, SQL.FieldByIndex[5].AsDouble[SQL.CurrentRecord], 0.0000005);

  SQL.Next;
  CheckEquals(False, SQL.EOF);
  CheckEquals(5, SQL.RecordCount);
  CheckEquals(4, SQL.CurrentRecord);
  CheckEquals('iiiiiiiiii', SQL.FieldByIndex[0].AsString[SQL.CurrentRecord]);
  CheckEquals(77777.7878, SQL.FieldByIndex[1].AsDouble[SQL.CurrentRecord], 0.0000005);
  CheckEquals('five', SQL.FieldByIndex[2].AsString[SQL.CurrentRecord]);
//  CheckEquals(12121212121212121212.0, SQL.FieldByIndex[3].AsDouble[SQL.CurrentRecord], 0.0000005);
  CheckEquals(SQL.CurrentRecord, SQL.FieldByIndex[4].AsDouble[SQL.CurrentRecord]);
  CheckEquals(0.0000000000000000006, SQL.FieldByIndex[5].AsDouble[SQL.CurrentRecord], 0.0000005);

  SQL.Next;
  CheckEquals(True, SQL.EOF);
  CheckEquals(5, SQL.CurrentRecord);
  SQL.Next;
  CheckEquals(True, SQL.EOF);
  CheckEquals(SQL.RecordCount, SQL.CurrentRecord);
  SQL.Prev;
  CheckEquals(False, SQL.EOF);
  CheckEquals(4, SQL.CurrentRecord);
  SQL.Prev;
  CheckEquals(False, SQL.EOF);
  CheckEquals(3, SQL.CurrentRecord);

  SQL.Next;
  CheckEquals(False, SQL.EOF);
  CheckEquals(4, SQL.CurrentRecord);
  SQL.Next;
  CheckEquals(True, SQL.EOF);
  CheckEquals(SQL.RecordCount, SQL.CurrentRecord);

  SQL.Prev;
  CheckEquals(False, SQL.EOF);
  CheckEquals(4, SQL.CurrentRecord);
  SQL.Prev;
  CheckEquals(False, SQL.EOF);
  CheckEquals(3, SQL.CurrentRecord);
  SQL.Prev;
  CheckEquals(False, SQL.EOF);
  CheckEquals(2, SQL.CurrentRecord);
  SQL.Prev;
  CheckEquals(False, SQL.EOF);
  CheckEquals(1, SQL.CurrentRecord);
  SQL.Prev;
  CheckEquals(False, SQL.EOF);
  CheckEquals(0, SQL.CurrentRecord);
  SQL.Prev;
  CheckEquals(False, SQL.EOF);
  CheckEquals(0, SQL.CurrentRecord);

  SQL.Next;
  SQL.Next;

  try
   SQL.First;
  except
    on E:Exception do
      CheckEquals('First method call not allowed when UniDirectional is True!', E.Message);
  end;

  FreeAndNil(SQL);
end;

procedure TTestAOraSQL.testAOraSQLUniDirectonal2;
begin
  fillTestTable;

  SQL.UniDirectional := True;
  SQL.SetQuery('select * from test order by f5');
  SQL.FetchCount := 2;
  SQL.LoadFields();
  CheckEquals(6, SQL.FieldCount);
  CheckEquals(True, SQL.UniDirectional);

  SQL.Open;

  CheckEquals(-1, SQL.CurrentRecord);
  CheckEquals(0, SQL.RecordCount);
  CheckEquals(False, SQL.EOF);

  SQL.ReadAll;

  CheckEquals(-1, SQL.CurrentRecord);
  CheckEquals(5, SQL.RecordCount);
  CheckEquals(False, SQL.EOF);

  SQL.Next;
  SQL.Next;
  CheckEquals(True, SQL.EOF);
  SQL.Prev;
  CheckEquals(False, SQL.EOF);
  SQL.Next;
  CheckEquals(True, SQL.EOF);
  SQL.Prev;
  CheckEquals(False, SQL.EOF);
  SQL.Prev;
  CheckEquals(False, SQL.EOF);
  SQL.Prev;
  CheckEquals(False, SQL.EOF);
  SQL.Prev;
  CheckEquals(False, SQL.EOF);

  try
   SQL.First;
  except
    on E:Exception do
      CheckEquals('First method call not allowed when UniDirectional is True!', E.Message);
  end;

  FreeAndNil(SQL);
end;

procedure TTestAOraSQL.testAOraSQLReadBlobAsParamEmpty;
begin
  SQL.SetQuery('delete from test3');
  SQL.ExecSQL;

  SQL.SetQuery('begin select F13 into :aaa from test3; end;');
  SQL.FetchCount := 1;
  SQL.AddParam('aaa', ftoBlob, ptoOutput);
  try
    SQL.ExecSQL;
  except
    on E:EOraError do
      CheckEquals(0, E.ErrorCode);
  end;

  FreeAndNil(SQL);
end;

procedure TTestAOraSQL.testAOraSQLReadBlobAsParam;
var
  par:TAParam;
  buf:array[1..16384] of byte;
begin
  SQL.SetQuery('delete from test3');
  SQL.ExecSQL;
  SQL.SetQuery('insert into test3 (F1, F2) values (''char'',''varchar'')');
  SQL.ExecSQL;


  SQL.SetQuery('begin select F13 into :aaa from test3; end;');
  SQL.FetchCount := 1;
  SQL.AddParam('aaa', ftoBlob, ptoOutput);
//  SQL.AddParam('aaa', ftoString, ptoOutput);

  SQL.ExecSQL;
  CheckEquals(1, SQL.ParamCount);
  par := SQL.ParamByName['aaa'];
  CheckEquals(0, par.GetLobLength);
  CheckEquals(0, par.ReadBlob(0, @buf, 16384));

  FreeAndNil(SQL);
end;

procedure TTestAOraSQL.testAOraSQLRawDataType;
begin
  SQL.SetQuery('select * from test2');
  SQL.LoadFields;

end;

procedure TTestAOraSQL.testAOraSQLUpdateRawData;
var
  buf:array[1..16384] of byte;
begin
  SQL.SetQuery('select * from test5 for update');
  SQL.LoadFields;
  SQL.OpenAll;
  StrPCopy(@buf, 'ddddddddd');
  SQL.FieldByName['F2'].WriteBlob(0, 0, @buf, 16384);

  SQL.Close;

end;

procedure TTestAOraSQL.testAOraSQLSelectNULL;
var
  i: Integer;
begin
  SQL.SetQuery('select null, t.* from test t ');
  SQL.LoadFields;
  SQL.OpenAll;
  for i := 0 to SQL.RecordCount - 1 do
  begin
    CheckEquals('', SQL.FieldByName['null'].AsString[i]);
  end;

  SQL.Close;
end;

procedure TTestAOraSQL.testAOraSQLInsertLargeCLOB;
var
  i: Integer;
  buf:array[1..16384] of byte;
begin
  SQL.SetQuery('insert into test4 (F13) values(EMPTY_BLOB())');
  SQL.ExecSQL;

  SQL.SetQuery('select F13 from test4 for update');
  SQL.LoadFields;
  SQL.OpenAll;

  for i := 0 to 1000 do
  begin
    SQL.FieldByName['F13'].WriteBlob(0, 0, @buf, 16384);
  end;

  SQL.Close;
end;

initialization
 TestFramework.RegisterTest(TTestAOraSQL.Suite);
end.

⌨️ 快捷键说明

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