回 帖 发 新 帖 刷新版面

主题:用Delphi编写一个自动生成编号!!

以下这个程序编写出来之后用第一次可以,但第二次用时也就是当数据库中有一条记录时会出错,不是我想要的结果,请高手加以指点!!
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  s,m: String;
  i: integer;
begin
  s:= 'PH'+ FormatDateTime('yyyymmdd',Now());
  With Query1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('select max(bh) as ss From hwmc ');
    Open;
  end;
  If Query1.FieldByName('ss').Value = null then
    s := s + '001'
  else
  begin
    m:= Trim(Query1.FieldByName('ss').Value) ;
    i:= StrToInt(Trim(Copy(m,11,5))) ;
    if i<10 then
      s:= s + '00'+ InttoStr(i +1)
    else if i<100 then
      s:= s + '0'+ InttoStr(i +1)
    else
      s:= s +InttoStr(i +1);
  end;
  Label7.Caption := s;
end;

回复列表 (共3个回复)

沙发

这个实例还不错,只是我看不出来有什么地方错了,还是得高手指点啊,我也是碰到这种问题,数据库中有一个字段ID是自动编号的(access),不知道怎样对它操作啊

板凳

i:= StrToInt(Trim(Copy(m,11,5))) ;检查你的数据库的BH字段定义,可能你编写的程序与实际不太相符,把数据库相关定义贴出来..

3 楼

程序本身没有错,只是你写的条件有点逻辑思维问题
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  s,m: String;
  i: integer;
begin
  s:= 'PH'+ FormatDateTime('yyyymmdd',Now());
  With Query1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('select max(bh) as ss From hwmc ');
    Open;
  end;
  If Query1.FieldByName('ss').Value = null then
    s := s + '001'
  else
  begin
    m:= Trim(Query1.FieldByName('ss').Value) ;
    i:= StrToInt(Trim(Copy(m,11,5))) ;
    if (0>i) andi <10 then
      s:= s + '00'+ InttoStr(i +1)
    else if (i <10O) and (i<100) then
      s:= s + '0'+ InttoStr(i +1)
    else
      s:= s +InttoStr(i +1);
  end;
  Label7.Caption := s;

我来回复

您尚未登录,请登录后再回复。点此登录或注册