DBGrid取不到datasource

padiu01 2009-06-12 05:00:50
2个Form,Form1(含DBGrid1),Form2(含DBGrid2),两个DBGrid是一样的,Form1中,建立了Connection,ADO,并且和DBGrid1绑定,可以正常显示数据,Form2中,不关联数据库,想同样显示DBGrid2,和Form1中的DBGrid1达到一样的效果。
就是DBGrid,不想使用StringGrid
在Form2中,包含了Form1的头文件,并且得到了Form1的ADO

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赋值

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出来的,错误的原因到底是在哪里呢?希望高手指点
两种做法应该都有解决方案吧...

...全文
85 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
padiu01 2009-06-15
  • 打赏
  • 举报
回复
是的,妖哥判断的很对
确实是因为DBGrid2的问题,应该是我没有给他赋上DataSource的原因
ccrun.com 2009-06-12
  • 打赏
  • 举报
回复
引发AV的原因,可能是DBGrid2所使用的字段为NULL,使用DBGrid2->Fields前,先判断DBGrid1->FieldCount是否大于0
padiu01 2009-06-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ccrun 的回复:]
其实象这种多窗体访问数据库的工程,建议在工程中添加一个数据模块(DataModule),将数据组件(Connection,Query,DataSource等)放在DataModule上,其他的单元include以后,就可以共用这些资源了。
[/Quote]
是的,我也有这种想法,肯定要建共通的,要不很难管理,问题就是我刚学C++,BCB也是第一次使用,确实不太会,想先做完一个小系统之后再优化
妖哥能解释下第二种做法出现错误的原因吗?哪怕是可能的原因都行
padiu01 2009-06-12
  • 打赏
  • 举报
回复
请问ccrun,在Form2中,为什么会出现指针错误呢?
ccrun.com 2009-06-12
  • 打赏
  • 举报
回复
其实象这种多窗体访问数据库的工程,建议在工程中添加一个数据模块(DataModule),将数据组件(Connection,Query,DataSource等)放在DataModule上,其他的单元include以后,就可以共用这些资源了。
ccrun.com 2009-06-12
  • 打赏
  • 举报
回复
在Form1上添加一个TDateSource,然后设置其DataSet为ADO1,将Form1->DBGrid1的DataSource设为这个DateSource

至于Form2上的DBGrid,动态的给其DataSource属性赋Form1->DataSource1就行了。

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧