delphi程序 编号自动加1的问题?

数据库中一字段是文字和数字字符混合的字段(国统字[2013]12号,该文号并不是连续的,没有重复),我想在程序中实现窗体显示时,在编辑框显示的该字段自动加1,表示应该使用... 数据库中一字段是文字和数字字符混合的字段(国统字[2013]12号,该文号并不是连续的,没有重复),我想在程序中实现窗体显示时,在编辑框显示的该字段自动加1,表示应该使用的连续文号,也可以不使用该文号,手动改成跳跃的文号。如:字段内最大的文号是国统字[2013]12号,窗体显示时,编辑框显示国统字[2013]13号,如果不用13号,支持手动改成不重复的18号等,同时在另外的地方显示遗漏的号码。 展开
 我来答
改润0iT58e
推荐于2016-09-02 · TA获得超过721个赞
知道小有建树答主
回答量:823
采纳率:80%
帮助的人:535万
展开全部

思路 (首先 uses 中增加 StrUtils)

  1. 声明一个string变量 str_id, 来记录最大编号

  2. 声明一个string变量 str_newid, 来记录新编号

  3. 声明一个string变量 str_prefix, 来记录编号前缀

  4. 声明一个string变量 str_year, 来记录年度

  5. 声明一个string变量 str_postfix, 来记录编号后缀

  6. 声明一个string变量 str_manualid, 来记录手动输入编号

  7. 在窗体 OnShow事件增加代码

        with ADOQuery1 do

        begin

          Close;

          SQL.Clear;

          SQL.Add('select max [编号] from [字段] where [条件]');

          //---- 假设有记录 ----//

          Open;

          str_id := FieldByName('[编号]').AsString;  

          str_prefix := LeftStr(str_id, 3); //---- 取"国统字" ----//

          str_year := FormatDateTime(yyyy, Now); //---- 获取2013 ----//

          str_postfix := RightStr(str_id, 1); //---- 取"号" ----//

          str_newid := IntToStr(StrToInt(MidStr(str_id, 6, 2)) + 1);

          str_newid := str_prefix + '[' + str_year + ']' + str_newid + str_postfix;

        end;

        Edit1.Text := str_newid;

如果是手动输入编号, 那么要查询一次, 看看是否已经存在

  SQL.Add(' select * from [字段] where [编号] = +++'Edit1.Text'+++');

  Open;

  If not isEmpty then

  begin

    ShowMessage('编号已经存在');

  end

  else

  begin

    //---- 后续代码 ----// 

  end;

追问
用了max()后,fieldbyname('编号').asstring;后提示编号没有发现,而把他改成fields[0].asstring 才能运行。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式