delphi使用ODAC控件TOraQuery操作表数据

使用TOraQuery控件操作数据修改

指定数据修改更新的目标表

查询中包含多个表关联,对其中一个表数据进行修改更新,需要设置目标表名

property UpdatingTable: string;  //数据修改更新的表名

代码

  OraQuery1.SQL.Text := 'SELECT Usert.userno, Usert.username, Dept.deptno, Dept.deptName ' +
                     ' FROM Usert, Dept WHERE Usert.deptno = Dept.deptno ';
  OraQuery1.UpdatingTable := 'Dept';
  OraQuery1.Open;
  OraQuery1.Edit;
  OraQuery1.FieldByName('deptName').AsString := 'NewDept';
  OraQuery1.Post;

备注

如果未设置UpdatingTable属性,则默认查询中使用的第一个表为更新目标。

 

主键字段

更新表时,根据主键字段生成更新的WHERE条件

property KeyFields: string;
  //表Dept 主键deptno

  //设置了主键,生成的WHERE条件中会包含设置的字段
  OraQuery1.Close;
  OraQuery1.SQL.Text := 'SELECT deptName FROM Dept WHERE deptno = 1';
  OraQuery1.KeyFields := 'deptno';
  OraQuery1.Open;
  //会生成DELETE FROM Dept WHERE deptno = 1的语句
  OraQuery1.Delete;

  //如果查询的语句中包含主键,生成的WHERE条件中会包含主键
  OraQuery1.Close;
  OraQuery1.SQL.Text := 'SELECT * FROM Dept WHERE deptno = 2';
  OraQuery1.Open;
  //会生成DELETE FROM Dept WHERE deptno = 2的语句
  OraQuery1.Delete;

  //如果查询的语句中不包含主键,生成的WHERE条件中会包含所有查询的字段
  OraQuery1.Close;
  OraQuery1.SQL.Text := 'SELECT deptName, address FROM Dept WHERE deptno = 3';
  OraQuery1.Open;
  //会生成DELETE FROM Dept WHERE deptName = 'work' AND address = 'floor' 的语句
  OraQuery1.Delete;

备注

多个主键时,用分号“;”隔开

 

插入时序列

插入数据时,根据设置的序列,自动更新主键

property KeySequence: string;

代码

  OraQuery1.Close;
  OraQuery1.SQL.Text := 'SELECT * FROM Dept';
  OraQuery1.KeyFields := 'deptno';
  OraQuery1.KeySequence := 'DEPT_SEQ';
  OraQuery1.Open;
  OraQuery1.Append;
  OraQuery1.FieldByName('deptName').AsString := '新科室';
  OraQuery1.Post;
  {会生成SQL
  begin
    SELECT DEPT_SEQ.NEXTVAL INTO :DEPTNO FROM Dual;
    INSERT INTO DEPT(DEPTNO, DEPTNAME)
    VALUES(:DEPTNO, :DNAME);
  end;
  }

备注

必须设置KeyFields属性才起作用

posted @ 2020-12-20 14:18  txgh  阅读(543)  评论(0编辑  收藏  举报