rs.open"a.id,a.id_name,a.card_id,b.card_name from db1 a,db2 b where a.card_id=b.card_id",cn
rs.addnew
rs!id="1234"
rs!id_name="刘德华"
rs!card_id="abcd123"
rs!card_name="信用卡"
rs.updatebatch
怎样才能只更新db1中的数据,谢谢

解决方案 »

  1.   

    我就不明白,如果你只是想更新db1中的数据就应该这样写rs.open"a.id,a.id_name,a.card_id from db1 as a,cn
    rs.addnew
    rs!id="1234"
    rs!id_name="刘德华"
    rs!card_id="abcd123"
    rs.update哪能向一个试图里添加一条记录后,更新,然后只要一个表的记录那
    明显矛盾啊
    对于增删改最好是对一个表操作
      

  2.   

    谢谢您,具体来说应是在datagrid中新增时,我需要用card_id查出相关的card_name中信息显示在datagrid中,但是更新rs时会对db2中记录也更新,如果不用临时表,有其它简单的办法吗,拜托!
      

  3.   

    我明白了,你要新建和数据显示分开
    '这个是添加数据
    rs.open"a.id,a.id_name,a.card_id from db1 as a,cn
    rs.addnew
    rs!id="1234"
    rs!id_name="刘德华"
    rs!card_id="abcd123"
    rs.update'下面的是数据显示,不能更新
    记得要引用adoDim WithEvents adoPrimaryRS As Recordset '数据库连接对象
    Private Sub Command1_Click()
       'strsql 是你的查询语句 你可以order by 排序的字段
       'strsql="select xh as 学号 from 表" 这里的学号就是你数据表中字段的标题
       strsql="select 字段 from 表"
       Set Db = New Connection
       Db.CursorLocation = adUseClient
       '下面的连接数据字符串你要修改一下
       Db.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\计划管理系统.mdb;Persist Security Info=False"
       Set adoPrimaryRS = New Recordset
       adoPrimaryRS.Open strsql, Db, adOpenStatic, adLockOptimistic
       Set DataGrid1.DataSource = adoPrimaryRS
    end sub
      

  4.   

    谢谢您的解答,可能是我表达得不太清楚
    Dim WithEvents adoPrimaryRS As Recordset '数据库连接对象
    Private Sub Command1_Click()
       strsql="a.id,a.id_name,a.card_id,b.card_name from db1 a,db2 b where   a.card_id=b.card_id"
       Set Db = New Connection
       Db.CursorLocation = adUseClient
       Db.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\计划管理系统.mdb;Persist Security Info=False"
       Set adoPrimaryRS = New Recordset
       adoPrimaryRS.Open strsql, Db, adOpenStatic, adLockBatchOptimistic
       Set DataGrid1.DataSource = adoPrimaryRS
    end sub我的意思是,我想在datagrid1中直接进行数据的删除,修改,新增记录,在输入card_id时从db2查询关联的card_name显示在dategrid1中,card_name栏是不能修改的,但是在调用updatebatch时也会对db2进行相应删除,修改,新增的操作,我学vb没多久,如果表达有什么失误,还请指正,感激不尽
      

  5.   

    我认为你这样的功能实现不了,为什么一定要对datagrid进行操作那,最好做成datagrid只是显示数据,不要对他操作
      

  6.   

    Unique Table、Unique Schema、Unique Catalog 属性 — 动态
    使用户能够直接控制在通过对多个基本表执行 JOIN 操所得到的 Recordset 中的特定基本表的修改。 Unique Table 指定一个允许进行更新、插入和删除的基本表的名称。
    Unique Schema 指定模式,即表的所有者的名称。
    Unique Catalog 指定目录,即包含表的数据库的名称。 
    设置和返回值设置或返回字符串值,该值是表、模式或目录的名称。说明所要的基本表通过其目录、模式和表名唯一标识。设置 Unique Table 属性后,可使用 Unique Schema 或 Unique Catalog 属性的值查找基本表。在设置 Unique Table 属性之前需要设置 Unique Schema 和 Unique Catalog 属性的其中一个属性或同时设置两个属性,但这不是必须的。Unique Table 的主键被用作整个 Recordset 的主键。该键可用于任何需要主键的方法。设置 Unique Table 后,AddNew、Delete、Resync、Update 和 UpdateBatch 方法只能影响到所命名的表。如果找不到唯一的基本表,将出现运行时错误。当把 CursorLocation 属性设置为 adUseClient 时,这些动态属性均被追加到 Recordset 对象的 Properties 集合中。Rs.Properties.Item("Unique Table").Value = "db1"我也是刚刚找到,拿出来大家分享!!!