代码之家  ›  专栏  ›  技术社区  ›  Mike Pone

为Access中的链接表选择@@Identity返回0

  •  0
  • Mike Pone  · 技术社区  · 15 年前

    我使用的是Access2007,并且有一些链接到MySQL数据库的表。我正在使用DAO将记录插入到MySQL链接表中,并尝试使用select@@标识检索插入的pk,但该select返回0。

      Dim sql As String
    
      Dim oDB As Database
      Set oDB = CurrentDb 
    
      sql = "INSERT INTO Quotes ( CustomerID ) SELECT 1 AS Expr1;" 
    
      oDB.Execute sql 
    
      If oDB.RecordsAffected <> 1 Then 
        MsgBox "cannot create new quote"
        Exit Function
      End If
    
      Dim rsNewID As DAO.Recordset
      Set rsNewID = oDB.OpenRecordset("SELECT @@IDENTITY")  ' Create a recordset and SELECT the new Identity
    
      Dim intNewID As Long
      intNewID = rsNewID(0).Value ' Store the value of the new identity in variable intNewID
      'This value is 0, why?
    

    我见过 another question like this, 我还没有满意的回答

    3 回复  |  直到 15 年前
        1
  •  2
  •   fredrik alexandresoli    15 年前

    选择最后一个插入ID()。

        2
  •  1
  •   Mike Pone    15 年前

    Fredrik获得了MySQL语句的部分学分。需要注意的是,我使用的是DAO,所以语句是由Jet引擎处理的,它不支持此语句。不过,这需要在Access中作为传递查询运行才能正常工作。在我用fredrik的select语句进行了一个传递查询之后,这就实现了。我从DAO代码中调用了这个访问传递查询,它起作用了。

        3
  •  0
  •   shahkalpesh    15 年前

    我没有使用MySQL。所以,翻译我对MySQL的看法。

    customerid是一个标识列吗(即,它自己生成ID吗)?
    如果是,请使用返回上次生成的ID的函数。

    @@标识函数是人们在SQL Server中使用的。我不知道MySQL中的等价物。
    this

    查看上面的代码,您不需要打开第二个记录集。这个 rsNewID1 应该有助于获取最后插入的ID。

    希望这有帮助。