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 集合中。
如上说的,是在JOIN方法生成的Recordset才有效
您的Select语句并没有JOIN方法

解决方案 »

  1.   

    gump2000(阿甘) 说的对,用select table1.id,table1.f1,table2.* form table1 left join table2 on table1.id=table2.id
      

  2.   

    用select table1.id,table1.f1,table2.* form table1 left join table2 on table1.id=table2.id
    仍然不行,错误依旧。
    将Rs.Properties.Item("Unique Table").Value = "table1"放在Open前也不行。有没有个例子看看?
      

  3.   

    请您仔细看
    "设置 Unique Table 后,AddNew、Delete、Resync、Update 和 UpdateBatch 方法只能影响到所命名的表。"
      

  4.   

    Resync Command 属性 — 动态
          指定用户提供的命令字符串,Resync 方法发出该字符串用于刷新在由 Unique Table 动态属性所命名的表中的数据。设置和返回值设置或返回字符串,是命令字符串。说明Recordset 对象是对多个基本表执行 JION 操作的结果。受影响的行取决于 Resync 方法的 AffectRecords 参数。如果没有设置 Unique Table 和 Resync Command 属性,将执行标准的 Resync 方法。Resync Command 属性的命令字符串是唯一标识正在被刷新的行的参数化命令或存储过程,并返回包含相同列的数目和顺序的单个行作为要刷新的行。命令字符串包含在 Unique Table 中每个主键列的参数,否则将返回运行时错误。参数将以要刷新行的主键值自动填充。两个基于 SQL 的范例如下:1) Recordset 由命令定义:SELECT * FROM Customers JOIN Orders ON 
    Customers.CustomerID = Orders.CustomerID
    WHERE city = ‘Seattle’
    ORDER BY CustomerID
    Resync Command 属性设置为:"SELECT * FROM 
    (SELECT * FROM Customers JOIN Orders 
    ON Customers.CustomerID = Orders.CustomerID
    city = ‘Seattle’ ORDER BY CustomerID)
    WHERE Orders.OrderID = ?"
    Unique Table 为 Orders,其主键 OrderID 被参数化。子选择提供简单的方法,在程序中确保返回的列具有与使用原始命令相同的数目和顺序。2) Recordset 由存储过程定义:CREATE PROC Custorders @CustomerID char(5) AS 
    SELECT * FROM Customers JOIN Orders ON 
    Customers.CustomerID = Orders.CustomerID 
    WHERE Customers.CustomerID = @CustomerID Resync 方法应该执行如下存储过程:CREATE PROC CustordersResync @ordid int AS 
    SELECT * FROM Customers JOIN Orders ON 
    Customers.CustomerID = Orders.CustomerID    
    WHERE Orders.ordid  = @ordidResync Command 属性设置为:"{call CustordersResync (?)}"
    又一次,Unique Table 为 Orders,其主键 OrderID 被参数化。当把 CursorLocation 属性设置为 adUseClient 时,Resync Command 是追加到 Recordset 对象的 Properties 集合的动态属性。
      

  5.   

    gump2000(阿甘) (  ) 真是好玩
    贴了这么多========================
    动态属性的设置
    unique table必须用join豫剧打开的记录集才能设置
    这个属性是一个表的名称,设置好以后新增、删除、修改操作只对该表有效
    ==============================================
    动态属性会在记录集关闭或requery时被清除
    如果你要在纪录集打开的时候获取最新数据,那么请用Resync 方法
    resync方法需要设定 resync command动态属性
    方法如下;1) Recordset 由命令定义:SELECT * FROM Customers JOIN Orders ON 
    Customers.CustomerID = Orders.CustomerID
    WHERE city = ‘Seattle’
    ORDER BY CustomerID
    Resync Command 属性设置为:"SELECT * FROM 
    (SELECT * FROM Customers JOIN Orders 
    ON Customers.CustomerID = Orders.CustomerID
    city = ‘Seattle’ ORDER BY CustomerID)
    WHERE Orders.OrderID = ?"
    Unique Table 为 Orders,其主键 OrderID 被参数化。子选择提供简单的方法,在程序中确保返回的列具有与使用原始命令相同的数目和顺序。
      

  6.   

    客户端的Recordset对象的 Unique Table 动态属性,只在联结删除中有用。对于使用联结的修改和插入操作,ADO忽略Unique Table 动态属性以及相关的Unique Schema 和 Unique Catalog动态属性。