在VC++下借助DBGird控件显示数据库记录信息产业部电子第二十二研究所青岛分所 郎锐  一、 引言 
 
随着数据库技术的进一步发展,我们在生活、办公时越来越多地同各式各样的数据库前台程序打着交道,这就要求数据库 
前台程序必须拥有良好的人机界面,使用户能有一种好的心情方便的同程序进行交互。Microsoft 的Office系列产品之所以能 
得到广泛的认同,也是与其良好的人机界面分不开的。数据库最基本的单位--表包含有若干条数据记录,而每一条记录又包含 
有许多的字段,如何能方便、美观的将这些数据记录显示给用户,并能方便实用的同用户进行交互操作便成为一个程序能否为 
人接受的重要因素了。Microsoft的Access 97/2000在这方面就做的相当不错,用一个网格式表单容纳了表中所有的数据,显得 
清晰简洁。而我们在用Visual C++开发的数据库前台程序中如要实现类似的表格就不得不借助于提供的ActiveX控件--DBGrid  
Control来实现,因为自己重新开发类似的功能无疑是比较困难而又烦琐的。本文着重对该控件的使用做了介绍。 
 
二、 程序的设计实现 
 
本程序采用ODBC接口同Access 97数据源相连,并将数据库中的记录数据通过网格的形式显示给用户,并能完成同Access表单 
类似的诸如添加记录、删除记录等功能。在开始编制程序之前首先要通过控制面板的32位ODBC数据源设置我们待操作的后台 
Access数据源,建立名称为"雇员"的系统DSN,并将其指向Employee.mdb。为简单计,数据库中有一个"雇员表",内含5个字段: 
"雇员ID","雇员姓名"、"所在部门","职务","备注"等,并预先填充几条记录备用。 
 
在用VC创建工程时,需要在第二步确认提供了对ActiveX控件的支持。需要有后台数据库的支持,并通过"DataSource"按扭选 
择刚才注册过的ODBC数据源。此时编译运行程序,通过工具条上的数据库导航条可以移动数据库的记录指针,说明此时已经同数据 
库建立了连接,但由于没有控件(编辑框或其他)同数据库的字段相棒定,此时还无法显示数据库中的记录。我们先插入网格控件 
DBGrid Control,方法如下: 
 
1)选择菜单->Project->Add to Project->Components and Controls Gallery 
 
2)在部件选择对话框中进入Registered ActiveX Controls 
 
3)选择DBGrid Control,单击Insert按钮,确认后对类进行配置(可以按默认),我们不做任何修改单击OK按钮,插入完成。 
 
在VC工作区的ResourceView中可以如同使用标准控件一样将刚添加来的DBGird网格控件拖入到对话框中,并对其属性进行设置。 
下面将主要的属性列表如下: 
 
属性名称 值 说明 
Caption 雇员表 设定DBGird控件的网格标题 
AllowAddNew True 是否允许添加记录 
AllowDelete True 是否允许删除记录 
AllowDelete True 是否允许更新记录 
ColumnHeaders True 是否显示每列的标题 
DefColWidth 100 设定每列的宽度 
RowHeight 11 设定每行高度 
DataSource 设定绑定的数据源 
BackColor 0x8000000E 设定网格的背景色 
 
再次运行程序,可以看到类似Access表格风格的DBGird控件以按我们的属性设定显示了出来,但并没有数据库记录的显示,而且我 
们注意到刚才设定数据源属性DataSource时,下拉选项只有一项,而并没有我们所希望的ODBC数据源"雇 
员"的存在。所以我们还要继续添加一些辅助的控件来完成同数据库源的绑定。用同插入DBGird控件一样的步骤,插入Microsoft  
RemoteData Control控件,同样也要对其属性进行设置: 
 
属性名称 值 说明 
ID IDC_REMOTEDATACTL1 控件ID 
Caption 人事管理系统--雇员表 设定导航条的标题 
UserName 由于没有指定用户及密码,设为空 
Password 同上 
SQL SELECT * FROM "雇员表" 待执行的SQL结构化查询语言 
 
在RemoteData控件里用SQL语言将ODBC数据源的"雇员表"打开并选取里面的所有字段,也即显示表里的所有记录信息。这时再打开 
DBGird控件的DataSource属性就会发现下拉条里多了一个"IDC_REMOTEDATACTL1",正是RemoteData的ID号。此次编译运行程序就在网格 
控件内显示了数据源指定表的所有记录信息,而且可以方便的添加、删除记录以及调整字段尺寸等。 
 
运行结果表明,在RemoteData控件的中介作用下实现了DBGird控件同ODBC数据源之间的交互。该程序设计实现过程是可靠、实用的。 
 
小结:DBGrid数据网格控件以其短小精悍而深受大家的喜爱,,本文将在VC下使用DBGrid的具体步骤和方法作了简要地介绍。其它类似的 
表格控件也可以大致参考这个过程,希望本文能有所启迪与帮助。在Windows 98下,由Microsoft Visual C++ 6.0编译测试通过。后台 
数据源为Microsoft Access 97。 

解决方案 »

  1.   

    右键,"Insert ActiveX Control”,选择”microsoft ADO Data Control”;
    同样选择”Microsoft Data Grid Control”
    打开ADODC1的属性对话框,单击”ControlBuild”,选择”Microsoft OLE DB Provider for ODBC Driver”, 单击next; 在use data source name选ms access 97 DataBase, Enter the initial catlog to use下填入*.mdb,按TestConnection测试连接;如果成功,在RecordSourceCommand Text(SQL)下填写MATERIAL,确认;
    打开DataGrid1,DataSource:IDC_ADODC1
      

  2.   

    试试以下这个例子吧.
    TForm1 = class(TForm)
      dbGrid: TDBGrid;
    private
      FDatabase: TDatabase;
      FQuery: TQuery;
      FDatasource: TDatasource;
      procedure ConnectionDb;
    public
      constructor create(AOwner: TComponent;DatabaseName; string);overload;
    end;
    constructor TForm1.create(AOwner: TComponent;DatabaseName; string);
    begin
      FDatabase := TDatabase.Create(self);
      FDatabase.DatabaseName := DatabaseName;
      FQuery := TQuery.Create(self);
      FQuery.DatabaseName := DatabaseName;
      FDatasource := TDatasource.create(self);
      dbGrid.Datasource := FDatasource;
      ConnectionDb;
      inherited Create(AOwner);
    end;procedure TForm1.ConnectionDb;
    begin
      FDatabase.DriverName := 'STANDARD';
      FDatabase.params.clear;
      FDatabase.Params.add('PATH=.\DATAS');
      FDatabase.Connected := true;
      FQuery.SQL.Clear;
      FQuery.SQL.Text := 'SELECT * FROM MYTABLE';
      FQuery.Open;
    end;
      

  3.   

    dbgrid1.datasource:=adoquery1;
    这样不行吗?
      

  4.   

    Dbgrid的datasource属性是TDatasoure类型,而Adoquery是dataset类型,这怎么行呢?
      

  5.   

    menliwxj(有缘) 你的程序是线程安全的吗,我要是在一个独立的线程中这么做有问题吗?