部分代码如下:
procedure TForm1.Button3Click(Sender: TObject);
var
        ADOquery1:TadoQuery;
begin
      Form2.Show;
      Adoquery1:=Tadoquery.create(form2);      Adoquery1.connectionstring:='Provider=SQLOLEDB.1;Password="";Persist Security Info=True;User ID=sa;Initial Catalog=数据库管理系统;Data Source=HLG-440-B05';
      Adoquery1.sql.add('select * from 工作人员表');
      Form2.DataSource1.DataSet:=Adoquery1; //这一句很不爽!
      Adoquery1.Open;
end;
如果在不爽的那句改为:Form2.DataSource1.DataSet.assign(Adoquery1);
会出错,并且用try 捕捉错误都不行!
为什么?
好象我以前在DLL中也遇见过同样的问题!
希望力所能及的GJ帮忙!

解决方案 »

  1.   

    还有create之后,自己不删除,会怎么样!
    呵呵!
      

  2.   

    不是每个控件都可以使用Assign这个函数的。对于TDataSource来说,属性DataSet只能用
    赋值号来赋值,不能使用Assign。Assign是TPersistent的一个虚拟函数,由TPersistent
    派生的控件,必须重载这个虚拟函数后才能使用Assign,而TDataSource并没有重载Assign
      

  3.   

    还有create之后,自己不删除,会怎么样!自己看内存管理器,内存会一直上涨!^_^
      

  4.   

    请问那该如何知道该方法是否override?
      

  5.   

    1.Assign仅仅限于对象之间赋值,而:=可以适用于普通类型,指针类型(含对象指针)和对象属性的赋值
    2.对象的Assign方法用于拷贝另一个类型兼容对象的内容到本对象,而对象之间的:=操作只对对象指针进行赋值,之后两个变量将指向同一个对象。
    3.对象的属性比较特殊(比如TForm.Font),:=操作实际上调用的是与属性相对应的write方法,而一般来说write里面是调用Assign的(比如FFont.Assign(Value)),所以这个时候Assign和:=具有相似的含义。
    楼上的所说不完全正确,只有Font1是一个对象的属性的时候才能这样赋值,如果是独立对象应该使用Assign方法。 
      

  6.   

    =是一个指针指向另一个数据集,
    assign是内容赋值
      

  7.   

    可以用DataSet.Clone方法复制数据。