• Firebird + FireDAC 界面操作的自增字段


    Firebird + FireDAC

    如果是在客户端程序直接使用 FireDAC 的 FdQuery 去操作数据库,大概是这样的:

    DBGrid -> DataSource -> FdQuery -> FdConnection -> FireBird 数据库;

    FireBird 数据库里面的定义:


    假设某个表 T1 有一个主键字段 F1,在 FireBird 里面定义为自增字段,其实在 FireBird 里面,就是定义了一个整数字段,创建了一个 FireBird 特有的【Generator】(生成器),还创建了一个 【Trigger】(触发器);

    触发器的代码:


    '''
    BEGIN
      IF (NEW.F1 IS NULL) THEN
          NEW.F1 = GEN_ID(T1_F1_GEN, 1);
    END
    '''

    从触发器的代码可以看出来,插入的数据(没有 T1 字段值),则在插入时,从生成器 T1_F1_GEN 获取一个新的 ID 值。FireBird 的生成器的用途就是每次调用它,就获得一个自增的唯一编号,绝对不会多个客户端同时提交数据时出现重复编号。

    在 FireBird 里面的设置,对于 FdQuery,设置其:


    1. 设计期从数据库自动创建字段;具体操作步骤,这里假设你熟悉 Delphi,不详细描述;
    2. 选择 F1 这个自增字段;
    3. 在属性面板里面,对这个 F1 字段的属性进行以下设置:
    3.1. AutoGenerateValue 属性,下拉选择:ArAutoInc;这个设置保证了新插入的记录,FdQuery 会自动帮它填写 F1 的值为 -1,-2,等等;
    4. 选择 FdQuery1,在对应的属性面板里面找到属性:UpdateOptions,下拉展开;
    4.1. 找到 AutoIncFields 属性,下来,选择 F1(设计期已经创建了静态字段,这里就能看到所有的静态字段);-- 经过测试,这里做了设置,字段 F1 的属性设置(上述 3.1)可以不用设置;
    4.2. 其它属性保持默认。其中 GeneratorName 属性如果下拉,可以看到前述在 FireBird 数据库里面创建的生成器 T1_F1_GEN 的名字。但这里不需要选择它。因为真正插入数据库的时候,数据库会调用触发器去使用它。

    ----------
    测试:

    1. FdQuery 的 CachedUpdates 属性为默认的 False 时,新插入的数据,F1 字段会自动填入 -1,往下滚动 DbGrid,此时 FdQuery 会自动 POST,也就是将数据提交给数据库,此时可以立即看到 -1 会变成数据库自动产生的新的编号值;

    2. FdQuery 的 CachedUpdates 属性为默认的 True 时,新插入的数据,F1 字段会自动变成 -1,往下滚动插入新的数据,会出现 -2, -3 等等,此时 FdQuery 没有提交到数据库。执行 FdQuery1.ApplyUpdates(0) 的代码,FdQuery1 把数据都提交到数据库,此时 DbGrid1 里面看到的 F1 字段,仍然是 -1, -2, -3,然后当 DBGrid 里面对游标进行滚动,-1,-2,-3 立即变成数据库里面新插入的记录的编号了。

    ----------
    结论:

    使用 FireBird + FireDAC 做自增字段,不需要写代码,简单设置一下就可以实现客户端的操作。

  • 相关阅读:
    第七章 文件管理【操作系统】
    设计模式之组合模式
    Java(运算符+循环)万字超详细介绍 (囊括了按位,异或,for,while等基础和疑难知识)
    八股系列——Java基础
    JMeter接口测试之文件上传(参数提取与传递)
    Riverlane联手Rigetti:解决超导量子计算机关键纠错步骤
    【面试】反问环节+面试套路
    mybatis
    前端取图片相同颜色作为遮罩或者背景
    不连续页分配器 & 每处理器内存分配器 & 页表
  • 原文地址:https://blog.csdn.net/pcplayer/article/details/134061984