我的程序使用的是加密的ACCESSS2000数据库:
  1、我想使用DATAGRID控件显示表1的内容,并能在DATAGRID中直接对表1进行添加、删除、修改记录等操作,不知该怎么实现?
  2、数据库中表2和表3的记录通过主键ID关联,怎样实现:在DATAGRID1中显示表2的内容(不显示ID字段),当鼠标点击DATAGRID1中的某行记录时,在DATAGRID2中显示表3中与该行记录ID相同的记录?

解决方案 »

  1.   

    对于第二问
    dim cn as new ado.connection
    dim rs as new ado.recordset
    cn.open "provider=microsoft.jet.oledb.3.51;persist security info=false;data source=db;user id=username;password=pws"
    rs.open table2name      
    set datagrid1.datasource=rs
    datagrid1.column(idpos).visible=false  'idpos为id在表2中的字段位置(从0开始)
    在datagrid1的RowColChange事件中加入以下语句
    rs.move datagrid1.row+1,adBookFirst
    dim rs2 as new ado.recordset
    set rs2=cn.execute("select * from table3name where table3name.id='" & rs!id & "'"
    datagrid2.datasource=rs2
    datagrid2.refresh
      

  2.   

    程序在执行"set datagrid1.datasource=rs"时提示"单条记录集不能用于网格标签"?
      

  3.   

    引用ADO2.5以上
    Public CN As ADODB.Connection
    Public RS As New ADODB.Recordset  
    Set CN = New Connection
    CN.Open "DRIVER={Microsoft Access Driver (*.mdb)};" & _
             "DBQ=数据库名.mdb;" & _
             "DefaultDir=" & App.Path & ";" & _
             "UID=admin;PWD=密码;"
    CN.CursorLocation = adUseClient
    RS.Open "select * from 表 where 条件 ", CN, adOpenStatic, adLockReadOnly
    Set mshflexGrid1.DataSource = RS
    rs.close
      

  4.   

    用ADO对象
    要有连接数据库的代码。
    要有增加,修改,删除按钮。
      

  5.   

    一、建立数据库因为在Visual Basic 6.0中有的数据库连接方式不支持Access 2000版本格式的数据库,为了便于说明问题,本文所提的数据库以Access 97版本数据库为例。在Microsoft Access 97中建立一个数据库,如:ssgl.mdb,并设置密码,如:“1234”,再将数据库文件和VB中创建的工程文件放在同一目录下。如果用户的计算机上只有Access 2000的话,可以先在Access 2000中建立ssgl.mdb数据库,并设置密码,再用Access 2000中的“数据库实用工具”将数据库转换成Access 97版本的格式。当然也可以直接在Visual Basic 6.0集成开发环境中通过“可视化数据管理器”来创建数据库,再到Access 97中设置密码。通过对数据库文件设置密码,一般情况下,非法用户就不能用常规的手段打开数据库了,对数据库中的信息起到了一定的安全和保密作用。 二、连接加密的Access数据库在Visual Basic 6.0中,要建立与数据库的连接,可采用的技术手段很多,如:数据控件、数据对象、数据环境设计器等。开发人员可以根据自身的条件和用户的需求进行选择。限于篇幅,下面只介绍加密的Access数据库与没有加密的Access数据库在连接时的不同之处。关于没有加密的数据库的连接及访问的方法读者可以参阅其它资料。1、使用控件① Data控件Data控件是Visual Basic 6.0中的一个内置数据控件,可以通过设置Data控件的connect、DatabaseName、RecordSource属性实现对数据库的连接和访问。通过Data控件连接加密的数据库的方法有两种:一种方法是在设计状态时,在“属性窗口”中将Data控件的connect属性的缺省值”Access”改为”; pwd=1234”即可,其它属性的设置方法与没有加密的Access数据库的连接相同。另一种方法是在运行时,通过代码对connect属性赋值来实现。如:Data1.connect=”; pwd=1234”    Data1.DatabaseName=APP.path + “\ssgl.mdb”其中,”1234”为Access数据库文件ssgl.mdb的密码,下同。②Adodc控件Adodc控件是一个ActiveX控件,它使用Microsoft ActiveX Data Objects(ADO)创建到数据库的连接。使用Adodc控件之前,要先将Adodc控件添加到控件工具箱中。方法如下:在VB 6.0种选择“工程”菜单,再点击“部件”菜单项,在弹出的“部件”对话框中选中“Microsoft ADO Data Control 6.0(OLEDB)”选项即可。通过Adodc控件连接加密的数据库的方法也有两种:一种方法是在设计状态时,在“属性窗口”中,对Adodc控件的ConnectionString属性设置一个有效的连接字符串,并在连接字符串后增加上”; Jet OLEDB: DataBase password=1234”,再设置Adodc控件的CommandType、RecordSource的属性就可以创建到加密的数据库的连接了。另一种方法是在运行时,通过代码动态地设置ConnectionString、CommandType和RecordSource属性来创建连接。 只要在ConnectionString属性的有效连接字符串后增加上”; Jet OLEDB: DataBase password=1234”即可。2、使用数据对象① DAO数据对象要能正确引用DAO数据对象来建立与数据库的连接,应先在VB集成开发环境中选择“工程”菜单,再点击“引用”菜单项,在弹出的“引用”对话框选择“Microsoft DAO 3.51 Object Library”选项来添加DAO数据对象类型库。接下来就可用如下代码来建立到加密的Access数据库ssgl.mdb的连接。Dim db AS DataBaseSet db=OpenDataBase(App.path + “\ssgl.mdb” , False , False ,  ” ; pwd=1234”)② ADO数据对象ADO是Microsoft推出的处理关系数据库和非关系数据库中信息的最新技术,也是Microsoft推崇的用于数据连接和访问的技术。在VB 6.0中,Adodc控件、ADO数据对象及DataEnvironment(数据环境设计器)都采用的是ADO技术,因而它们处理加密的Access数据库的方法类似。要能正确引用ADO数据对象,应在VB 6.0集成开发环境中选择“工程”菜单,再点击“引用”菜单项,在弹出的“引用”对话框中选中“Microsoft ActiveX Data Objects 2.1 Library”选项来添加ADO数据对象类型库。可用如下代码来建立到加密的Access数据库ssgl.mdb的连接。Dim cnn AS ADODB.ConnectionDim rst AS ADODB.RecordsetSet cnn=New ADODB.ConnectionCnn.Provider= ”Microsoft.Jet.OLEDB.3.51”Cnn.ConnectionString= ”Data Source=” & App.path & ”\ssgl.mdb;” &  _” ;Jet OLEDB:Database password=1234”cnn.Open③ 使用DataEnvironment(数据环境设计器)有两种方法可以通过DataEnvironment连接到加密的Access数据库:一种方法是在设计状态时,在DataEnvironment的connection对象的ConnectionSource属性的有效连接字符串后加上” ;Jet OLEDB: Database password=1234”。另一种方法是在DataEnvironment_Initialize()事件中编写如下代码:Private sub DataEnvironment_Initialize( )    Dim strconn AS string    Strconn=” Provider=Microsoft.Jet.OLEDB.3.51;”  & _            ”Data Source=” & App.path & “\ssgl.mdb;”  & _            ”; Jet OLEDB: Database password=1234”    DataEnvironment1.connection1.connectionstring=strconnEnd sub以上方法及相关代码笔者都已在Windows 98操作系统环境,Visual Basic 6.0中调试、验证并通过。
      

  6.   

    1:直接绑定即可
    2:
    对于第二问
    dim cn as new ado.connection
    dim rs as new ado.recordset
    cn.CursorLocation =adUseClient '一定要加这句
    cn.open "provider=microsoft.jet.oledb.3.51;persist security info=false;data source=db;user id=username;password=pws"
    rs.open table2name      
    set datagrid1.datasource=rs
    datagrid1.column(idpos).visible=false  'idpos为id在表2中的字段位置(从0开始)
    在datagrid1的RowColChange事件中加入以下语句
    rs.move datagrid1.row+1,adBookFirst
    dim rs2 as new ado.recordset
    set rs2=cn.execute("select * from table3name where table3name.id='" & rs!id & "'"
    datagrid2.datasource=rs2
    datagrid2.refresh
      

  7.   

    no 1:
    cn.open "provider=microsoft.jet.oledb.3.51;Data source=" & app.path & "yourdbname.mdb" & ";Jet OLEDB:Database password=your PWD”
    access 2000以上版本用oledb.4.0
    set datagrid1.datasource=rs
    no 2:
      根据ID识别.
      在dg1_dbclick事件中输入:
      dim rs as new adodb.recordset
      dim strSql as string
      strSql="select * from yourtable where id='" & dg1.columns(0).value & "'"
      rs.open strSql,cn,4,2
      set dg2.datasource=rs给分吧!!!
      

  8.   

    第一问:程序在执行到“set datagrid1.datasource=rs”这一句时无法通过,提示“行集合不能用作标签”。我将datagrid控件换成mshflexgrid控件后,运行正常。(我的编程环境是vb6+sp5+ado2.7).现在程序已经完成了,谢谢大家的帮助!