使用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属性才起作用