的确是这样的:如果改变params里的参数值后ADOQuery的确会自动调用UnPrepare()方法置属性Prepared为false,其实这是有好处的。另外在程序里Inprice公司的手册也推荐用户显式的调用Prepare()来初始化参数(把用户的params里的参数解析并赋值给底层执行语句),在处理数据量大时特别扩用,因为如果是隐含由系统调用则每次查询都会Prepare()一次,而如果用户显式的在一个循环前面调用Prepare(),在循环体里就不会再自动执行Prepare(),只执行了一次,效率很高。example:     ...    
     if ADOQuery.Prepared=false then ADOQuery.Prepare();
     while(...)
     begin
           ADOQuery.Open();
           ...//处理语句
           ADOQuery.Close();
     end;
     ...