部分代码如下:
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帮忙!
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帮忙!
呵呵!
赋值号来赋值,不能使用Assign。Assign是TPersistent的一个虚拟函数,由TPersistent
派生的控件,必须重载这个虚拟函数后才能使用Assign,而TDataSource并没有重载Assign
2.对象的Assign方法用于拷贝另一个类型兼容对象的内容到本对象,而对象之间的:=操作只对对象指针进行赋值,之后两个变量将指向同一个对象。
3.对象的属性比较特殊(比如TForm.Font),:=操作实际上调用的是与属性相对应的write方法,而一般来说write里面是调用Assign的(比如FFont.Assign(Value)),所以这个时候Assign和:=具有相似的含义。
楼上的所说不完全正确,只有Font1是一个对象的属性的时候才能这样赋值,如果是独立对象应该使用Assign方法。
assign是内容赋值