DBGrid取不到datasource
2个Form,Form1(含DBGrid1),Form2(含DBGrid2),两个DBGrid是一样的,Form1中,建立了Connection,ADO,并且和DBGrid1绑定,可以正常显示数据,Form2中,不关联数据库,想同样显示DBGrid2,和Form1中的DBGrid1达到一样的效果。
就是DBGrid,不想使用StringGrid
在Form2中,包含了Form1的头文件,并且得到了Form1的ADO
- C/C++ code
Form1->ADO1->SQL->Clear();Form1->ADO1->SQL->Add("select * form tb_.. where ..");Form1->ADO1->Open();在给DBGrid2赋值的时候,我想通过两种方式来实现,可以都有问题(Form2是new出来的,Form1是appliction的)
1.直接给DBGrid2赋一个datasource,我的想法
this->DBGrid2->DataSource = Form1->ADO1->DataSource;
这种做法的问题是,Form1->ADO1->DataSource为空,ADO1是有值的
2.逐行给DBGrid2赋值
- C/C++ code
int recordcount = Form1->ADO1->RecordCount; //记录的总条数for(int i=0;i<RecordCount;++i){ this->DBGrid2->Fields[0]->Text = Form1->ADO1->FieldByName("Field1")->AsString; this->DBGrid2->Fields[1]->Text = Form1->ADO1->FieldByName("Field2")->AsString;......}问题是:this->DBGrid2->Fields[0]->Text 出错
错误提示:Access violation at address ××× in module ,这个是指针访问越界?没初始化?
Form2是我new出来的,错误的原因到底是在哪里呢?希望高手指点
两种做法应该都有解决方案吧...
[解决办法]
在Form1上添加一个TDateSource,然后设置其DataSet为ADO1,将Form1->DBGrid1的DataSource设为这个DateSource
至于Form2上的DBGrid,动态的给其DataSource属性赋Form1->DataSource1就行了。