代码之家  ›  专栏  ›  技术社区  ›  arthurprs

clientdataset[delphi]中的“密钥冲突”自动增量字段

  •  1
  • arthurprs  · 技术社区  · 14 年前

    这是我在这里的第三个问题,到目前为止回答得很好^^

    我在浏览、编辑数据和插入方面没有问题…

    我的疑问是: 在财务/股票软件中,我有创建新订单的表单,
    当然,我需要在 T-阶 桌子
    并在中插入项目 TY有序项 表与 有序的 字段链接到中的行 T-阶

    CREATE TABLE `t_orders` (
        `orderId` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
        `clientId` INT(10) UNSIGNED NOT NULL,
        ...)
    
    CREATE TABLE `t_orderitems` (
        `orderitemId` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
        `orderId` INT(10) UNSIGNED NOT NULL,
        ...)
    
    --> INDEXES AND FOREIGN KEYS OMITTED <--
    

    如何将itemOrders添加到网格中,最后在“FinalizeOrder”按钮中单击

    • 创建订单 T-阶
    • 插入项目 TY有序项 链接到该订单

    使用ADO建立连接。

    我不确定是否可以这样做,在这种情况下,我应该怎么做?

    编辑:我尝试使用嵌套的clientdataset,它可以部分工作,但我仍然不知道如何获取插入的订单ID

    编辑2:
    现在我有另一个问题,我不能向clientdataset中添加多个项。
    因为所有项目的orderitemid都是空的(我只能在数据库插入时获取该值),所以当我尝试添加第二个项目时,它会给我键值冲突,有什么想法吗??

    如果我将updateMode设置为与upWhereKeyOnly不同的值,并将pfinkey设置为false,它会起作用,但我认为这不是一个选项。

    有什么想法吗?

    事先谢谢!
    亚瑟。

    4 回复  |  直到 14 年前
        1
  •  1
  •   Mason Wheeler    14 年前

        2
  •  1
  •   vcldeveloper    14 年前

    SELECT * FROM t_orderitems WHERE OrderID = :OrderID
    

        3
  •  0
  •   arthurprs    14 年前

    with DataModule1.ADOQuery1 do
    begin
      SQL.Text := 'SELECT LAST_INSERT_ID()';
      Open();
      First();
      LastInsertId := Fields[0].Value;
      Close();
    end;