我有一发票,但作为唯一标识的单号我有一困难,怎样使RZDBLABEL1(Trzdblabel) 中在每次单击“新单”时,总能产生一个永不重复的单号?
这里要用到SQL 语句吗/能不能不用SQL 语句而用一函数来实现呀?
因我是一水平低的人,请各位写的尽详细一些。
我类似的例子也可以发到[email protected]先谢了。

解决方案 »

  1.   

    用GUID好了,这辈子都重不了。
      

  2.   

    调用CoCreateGUID可以得到唯一的GUID
      

  3.   

    别外有一点,是这个组成这个单号的前面几位就是DBEDIT1中的字符,接着就是日期的纯数字格式,后面的几位由自已次定,只要单号不重复就好。
      

  4.   

    使用cocreateGUID
    或者使用递增啊
      

  5.   

    本机做一个INI用以保存单号单号为:本机编号+年月日+时分+校验每产生一条就写入INI,呵呵,一定重不了
      

  6.   

    能不能给我具体的代码或一些例子发到[email protected]尽量详细一点吧!
      

  7.   

    能不能把GUID解释一下?
    怎么能产生此号?(最好举一个例子,用程式,)
    多谢了。
    另外DELPHI中有没有比毫秒更精确的时间表达方法呀?如有该怎样写?多谢!
      

  8.   

    怎样使EDIT1中每点一次BUTTON时便产生一个GUID?
    我试了多次怎么都不行。
      

  9.   

    有没有好的方法解决这个问题呀?
    最好代码写下面。
    THANKS!
      

  10.   

    如果你的表单号的头几个标识符是固定的话就好办。
    现取出当前的最大号码:select max(表单号) from Trzdblabel
    然后取出这个表单号的后几个数字,递增后加上标识符头,就是一个
    不重复的表单号了。
    但是如果有多个客户端操作的话就不行了。
      

  11.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      tempstr, year, month, day : string;
      sqlstr : string;
      newno : string;
    begin
      tempstr:=datetostr(datetimepicker1.date);
      year:=copy(tempstr,1,4);
      delete(tempstr,1,5);
      month:=copy(tempstr,1,pos('-',tempstr)-1);
      if (strtoint(month)<10) then
        month:='0'+month;
      delete(tempstr,1,pos('-',tempstr));
      if (strtoint(tempstr)<10) then
        day:='0'+tempstr
      else
        day:=tempstr;
      tempstr:=dbedit1.text+year+month+day;  sqlstr:='select no from tablename where no like '+QuotedStr(tempstr+'%')+' order by no desc;
      adoquery1.close;
      adoquery1.SQL.Clear;
      adoquery1.SQL.Add(sqlstr);
      adoquery1.Open;
      if adoquery1.Fields[0].IsNull then
        newno:=tempstr+'001'
      else
        newno:=inttostr(strtoint(adoquery1.Fields[0].AsString)+1);
    end;newno就是将要产生的no
      

  12.   

    newno:=inttostr(strtoint(adoquery1.Fields[0].AsString)+1);我想定是这句有问题,上面 dyf2001() 的那个方法我试了一下,总提示TI20021020001 is a valid integer value,怎样方可便之无错误呢?请帮助。
      

  13.   

    不过我觉得guid够长的,128bit;配合mac地址没问题;
    p.s.学校现在强制按mac地址收人头税,真受不了;要是能修改mac地址就好了;function something:int64;
    asm
      RDTSC
    end;
    能返回时间(cou内置计数器)到cpu主频级的精度,够你用的;秒级明显不够精确;
      

  14.   

    mac+当时系统时间+循环子(互斥读,足够大).
      

  15.   

    你可以在数据库端写一个触发器,定义在向表中插入一条新记录时,让数据库
    检索一下最后的单号,然后对其作相应的处理即可。
    如:
    create or replace trigger set_no_table1
    before insert on Table1
    for each row
    begin
    //对新的单号作处理。
    end;
      

  16.   

    上面的这位是不是冯老兄呀,我现在也没有找到一个好的方法来实现这个功能,上面dyf2001写的那个还可以,不过有一些总是提示出错,需我自己改下了,你有没有好的方法实现些功能呀,给我实现此功能的源吗好吗,感谢。