子
子瑜
Unregistered / Unconfirmed
GUEST, unregistred user!
AdoDataSet1和AdoDataSet2两个数据集结构一样,主键为字段Ryid,每个库均有2000个以上记录,现要求一个最高效率的算法:比较两个数据集中的记录,如果AdoDataSet1中的记录AdoDataSet2中没有,则把这条记录添加至AdoDataSet2中。 因为数据集来源有些字段不是来自表,不能用SQL语句来比较记录来合并不同值。 <br> 我用传统的算法: <br> var <br> ls_ryid:string; <br> i:Integer; <br> begin <br> AdoDataSet1.First; <br> AdoDataSet2.First; <br> while Not AdoDataSet1.Eof do <br> begin <br> ls_ryid:=AdoDataSet1.FieldbyName( "Ryid ".AsString; <br> if Not AdoDataSet2.Loacte(Ryid,ls_ryid,[]) then <br> AdoDataSet2.Append; <br> for i:=0 to AdoDataSet2.Fields.Count-1 do <br> AdoDataSet2.Fields .value:=AdoDataSet1.Field.value; <br> AdoDataSet1.Next; <br> end; <br> end; <br> <br><br>这样很慢,原因有3: <br>1,对AdoDataSet1进行了所有记录的循环。 <br>2,对AdoDataSet2进行了Loacte方法 <br>3,对字段赋值进行了逐一字段的赋值: AdoDataSet2.Fields.value:=AdoDataSet1.Field.value; <br><br>以上是问题所在, <br>谁能帮忙想想,有提高效率的更好方法吗?