可以同时检索多个表,但是保存的时候需要注意.如下检索两个表: adoquery1.sql.clear; adoquery1.sql.add('select * from table1, table2'); adoquery1.open;保存的时候,可以在BeforeUpdate中自己定义多个adoquery,然后对每个记录开始执行更新操作. 也可以使用一个控件,忘了是什么了.如果你使用ClientDataSet,那么可以在DataProvider的BeforeOnUpdate中对每个记录执行sql.
不能保存多个数据集吧. 你可以写SQL么.把你要的数据用一个SQL查询出来,然后返回一个数据集.
给你一个返回数据集的函数 function TdbMain.qryData(const sSqlString: WideString; var vData: OleVariant) :Boolean; begin if not cnMain.Connected then try DataModuleCreate(Self); except Result := False; end; try if cdsMain.Active then cdsMain.Close; qryMain.Close; qryMain.SQL.Text := sSqlString; qryMain.Open; //cdsMain.CommandText :=sSqlString; cdsMain.Open; vData := cdsMain.Data; Result := True; except Result := False; end; end;var sSql :String; vData :OleVariant; begin .... if qryData(sSql,vData) then begin Data := vData; end; end;
adoquery1.sql.clear;
adoquery1.sql.add('select * from table1, table2');
adoquery1.open;保存的时候,可以在BeforeUpdate中自己定义多个adoquery,然后对每个记录开始执行更新操作.
也可以使用一个控件,忘了是什么了.如果你使用ClientDataSet,那么可以在DataProvider的BeforeOnUpdate中对每个记录执行sql.
你可以写SQL么.把你要的数据用一个SQL查询出来,然后返回一个数据集.
function TdbMain.qryData(const sSqlString: WideString; var vData: OleVariant) :Boolean;
begin
if not cnMain.Connected then
try
DataModuleCreate(Self);
except
Result := False;
end;
try
if cdsMain.Active then
cdsMain.Close;
qryMain.Close;
qryMain.SQL.Text := sSqlString;
qryMain.Open;
//cdsMain.CommandText :=sSqlString;
cdsMain.Open;
vData := cdsMain.Data;
Result := True;
except
Result := False;
end;
end;var
sSql :String;
vData :OleVariant;
begin
....
if qryData(sSql,vData) then
begin
Data := vData;
end;
end;
adoquery1.sql.add('select table1.a,table2.b from table1, table2');
adoquery1.open;
然后在试图上建立instead of触发器,在执行插入的时候根据你的要求插入对应的基础表