大家知道,用adoquery关联多个表时,更新数据时会出现问题,我现在处理的方式,只用adoquery打开要更新的表,而需要关联到别的字段时,则是新增一个Calculated字段。然后在OnCalcFields事件中写
qryFindData.close;
qryFindData.sql.clear;
qryFindData.sql.add('select name from tablename where number='''+adoquery.fieldbyname('Number').asstring+'''');
qryFindData.open;
adoquery.fieldbyname('Name').asstring:=qryFindData.fields[0].asstring;当然,通过这种方式可以满足需要,但是碰到数据量大的进修,系统打开的时候速度非常慢,我想请问大家,有没有更好的方式处理如上问题。
qryFindData.close;
qryFindData.sql.clear;
qryFindData.sql.add('select name from tablename where number='''+adoquery.fieldbyname('Number').asstring+'''');
qryFindData.open;
adoquery.fieldbyname('Name').asstring:=qryFindData.fields[0].asstring;当然,通过这种方式可以满足需要,但是碰到数据量大的进修,系统打开的时候速度非常慢,我想请问大家,有没有更好的方式处理如上问题。
TDataSetProvider可以指控那些字段可以更新到数据库中.
left join qryFind as b ON a.Number=b.Number
正常是自己写SQL集中提交,
如 你的方式 ,确实效率很底
你处理完了数据之后无非就是运行以两句来刷新一下:
Adquery1.Active:=false;
Adquery1.Active:=true;
select a.f1, a.f2, ...,a.Number, b.name from adoQuery1 as a
left join qryFind as b ON a.Number=b.Number 然后在TDATAPROVIDER里自己写一个SQL语句指定更新的内容或者字段.计算字段,增加一个就会在OPEN时,多执行一次数据库的计算,如果是来自其他的就是和LOOKUP差不多的情况下,就要增加一个SELECT的过程了,所以慢