Delphi自动生成编码

原文地址:Delphi自动生成编码作者:Halu小红

unit CreateOrderNum;

interface

uses
 Windows,SysUtils,ADODB,StrUtils,Messages,Dialogs;

  Function Create_OrderNum(BH_FieldName,TableName,RQ_FieldName,orderFirst:string):string;
  Function Create_RecordNum(BH_FieldName,TableName,RecordFirst:string):string;
  Function GetNewBHStr(BHTableName, BHFieldName, BHFirst:string; BHLength:Integer):string;//获取唯一编号

implementation

// 注意: 此函数要通过DataModule中的ADOConnection1与数据库相连

uses DataModule;

 

Function Create_OrderNum(BH_FieldName,TableName,RQ_FieldName,orderFirst:string):string;
//-----------------------  Create_OrderNum 函数说明  ------------------------//
//----- 函数作用: 根据时间和数据库已有记录自动生成单据编号               ----//
//----- 参数说明: BH_FieldName(表的编号字段名),TableName(表名),          ----//
//-----           RQ_FieldName(日期字段名),orderFirst(单据开头标识)      ----//
//----- 调用方法: Create_OrderNum('YFK_BH','TDD_YFK','YFK_RQ','YFK');    ----//
//----- 返回值:  字符串类型 如:FKD_201008100001                        ----//
//----- 作者:   苏贵阳    2010-8-10                                    ----//
//-----------------------------------------------------------------------------//
var
  adoQ_temp : TADOQuery;
begin
  adoQ_temp:= TADOQuery.Create(nil);                    //生成临时的ADOQuery变量
  adoQ_temp.Connection := DataModule1.ADOConnection1 ;  //将adoQ_temp与ADOConnection1相连
  with adoQ_temp do
  begin
    Close;
   SQL.Clear;
   SQL.Add(Format('select %s from %s where %s=:rq',[BH_FieldName,TableName,RQ_FieldName]));
   Parameters.ParamByName('rq').Value := DateToStr(date());
    Open;
    if not adoQ_temp.IsEmpty then
   begin  //如果当天已有记录,则取出最大的编号,然后最后流水号加1
     Last;
     Result:=Format ('%s_%s',[orderFirst,IntToStr(StrToInt64(RightStr(Fields[0].AsString,12))+1)]);
    end
   else   //如果当天尚无记录,则生成一个当天的初始编号
    begin
      Result:=Format('%s_%s',[orderFirst,(FormatDateTime('yyyymmdd',date())+'0001')]);
    end;
    close;
  end;
 adoQ_temp.free;   //释放临时ADOQuery变量
end;
//---------------------------- 常见问题 -----------------------------//
//---- 问题:编号无法自动累加                                   ----//
//---- 解答:请检查该表中日期字段的格式                         ----//
//----      正确的格式如:  2010-08-10 00:00:00.000            ----//
//-------------------------------------------------------------------//

 


Function Create_RecordNum(BH_FieldName,TableName,RecordFirst:string):string;
//-----------------------  Create_RecordNum 函数说明  ----------------------//
//----- 函数作用: 自动生成单据编号,新生成的编号为已有最大编号的下一个   ----//
//----- 参数说明: BH_FieldName(表的编号字段名),TableName(表名),          ----//
//-----           orderFirst(单据开头标识)                               ----//
//----- 调用方法: Create_RecordNum('DTJ_BH','TCP_DTJ','DTJ')             ----//
//----- 返回值:  字符串类型 如:DTJ_0001                                ----//
//----- 作者:   苏贵阳    2010-8-12                                    ----//
//-----------------------------------------------------------------------------//
var
  str : string;
  adoQ_temp : TADOQuery;
begin
  adoQ_temp:= TADOQuery.Create(nil);                    //生成临时的ADOQuery变量
  adoQ_temp.Connection := DataModule1.ADOConnection1 ;  //将adoQ_temp与ADOConnection1相连
  with adoQ_temp do
  begin
    Close;
   SQL.Clear;
   SQL.Add(Format('select %s from %s',[BH_FieldName,TableName]));
    Open;
    if not adoQ_temp.IsEmpty then
   begin   //取出最大的编号,然后最后流水号加1
     Last;
     str := IntToStr(StrToInt64(RightStr(Fields[0].AsString,4))+1);
     case  Length(str) of
       1: str :=Format('000%s',[str]);
       2: str :=Format('00%s',[str]);
       3: str :=Format('0%s',[str]);
       4: str :=Format('%s',[str]);
     end;
     Result:=Format ('%s_%s',[RecordFirst,str]);
    end
   else   //如果尚无记录,则生成一个初始编号
    begin
      Result:=Format('%s_%s',[RecordFirst,'0001']);
    end;
    close;
  end;
  adoQ_temp.free;
end;

Function GetNewBHStr(BHTableName, BHFieldName, BHFirst:string; BHLength:Integer):string;//获取唯一编号
//-----------------------  GetNewBHStr 函数说明  ---------------------------//
//----- 函数作用: 自动生成单据编号,新生成的编号为已有最大编号的下一个   ----//
//----- 参数说明: BHTableName(表名),BHFieldName(表的编号字段名),         ----//
//-----           BHFirst(单据开头标识),BHLength(流水号长度)             ----//
//----- 调用方法: GetNewBHStr('TCP_CPXX','CPXX_BH','CPX',4);             ----//
//----- 返回值:  字符串类型 如:CPX_0001                                ----//
//----- 作者:                                                            ----//
//-----------------------------------------------------------------------------//
var
  BHStr, BHLen, BHNumStr: string;
  IPos, BHNum, I: Integer;
  adoQ_temp : TADOQuery;
begin
  adoQ_temp:= TADOQuery.Create(nil);                    //生成临时的ADOQuery变量
  adoQ_temp.Connection := DataModule1.ADOConnection1 ;  //将adoQ_temp与ADOConnection1相连
  with adoQ_temp do
  begin
    Close;
   SQL.Clear;
   SQL.Add(Format('select %s from %s',[BHFieldName,BHTableName]));
    Open;
    if not adoQ_temp.IsEmpty then
   begin  //如果当天已有记录,则取出最大的编号,然后最后流水号加1
     Last;
     BHStr:=Fields[0].AsString;
     IPos :=Pos ('_',BHStr);
     if IPos>0 then
     begin
       BHLen:=Copy (BHStr,IPos+1,Length (BHStr));
       BHStr:=Copy (BHStr,1,IPos);
       BHNumStr:=IntToStr(StrToIntDef(BHLen,1)+1);
       while Length (BHNumStr)
       BHStr:=BHStr+BHNumStr;
     end else
     begin
       BHStr:=Format ('%s_%d',[BHFirst,8888]);
     end;
    end
   else   //如果当天尚无记录,则生成一个当天的初始编号
    begin
     BHNumStr:=IntToStr (1);
     while Length (BHNumStr)
     BHStr:=Format('%s_%s',[BHFirst,BHNumStr]);
    end;
    close;
  end;
  Result:=BHStr;
  adoQ_temp.free;
end;
end.

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Delphi是一种编程语言和开发环境,广泛用于软件开发。通过使用Delphi,我们可以生成代码流程图来帮助我们更好地理解和分析程序的执行过程。 在Delphi中生成代码流程图通常有以下几个步骤: 1. 设计程序结构:在Delphi中,我们使用可视化界面来设计程序的界面和功能,可以拖拽各种控件到窗体上进行布局。同时,我们可以在界面上添加按钮、菜单等事件控件,以及组织代码的结构,例如模块划分、函数和过程定义等。 2. 编写代码:在Delphi中,我们可以使用Pascal语言编写代码。根据程序的需求,我们可以在各个事件和过程中编写相应的代码,实现程序的功能。编写代码时,我们可以通过代码补全和代码提示等功能提高编码效率。 3. 执行程序:在编写完代码后,我们可以通过编译程序来生成可执行文件。运行程序时,我们可以观察程序的执行过程,调试程序的错误,并根据需要进行相应的修改和优化。 4. 生成代码流程图:在Delphi中,有一些工具可以帮助我们生成代码流程图,例如FlowChart插件。通过安装并使用这些工具,我们可以将已编写的代码转换为图形化的流程图。在流程图中,我们可以清晰地看到程序中各个部分的执行顺序和逻辑关系,有助于我们更好地理解程序的执行流程。 总的来说,在Delphi中生成代码流程图是一项有助于程序设计和分析的工作。通过生成代码流程图,我们可以更好地了解和掌握程序的执行过程,进而进行必要的优化和调试。这样可以提高程序的质量和效率,同时也便于其他开发者理解和维护我们的代码。 ### 回答2: Delphi是一种广泛使用的集成开发环境(IDE),用于以对象为基础的编程。它提供了一个强大的工具集,包括快速生成代码和流程图的功能。 使用Delphi生成代码的流程如下: 1. 首先,使用Delphi的可视化界面设计工具创建一个新的窗体或其他控件。在设计界面上,可以使用各种控件和组件,如按钮、文本框、复选框等,来构建用户界面。 2. 在设计界面上的控件上双击,进入事件处理程序的代码编辑器。在代码编辑器中,可以编写执行该控件特定事件时所需的代码。例如,在按钮的单击事件中编写代码,实现按钮被单击时执行的操作。 3. 使用Delphi的对象浏览器来查找并选择需要的类、函数和方法。对象浏览器提供了一个组织和浏览Delphi库中各种对象的界面。 4. 在代码编辑器中编写代码来创建、修改和操作对象。Delphi使用Pascal语言作为基础,所以需要熟悉Pascal语法和相关的Delphi库函数。 5. Delphi还提供了一组强大的调试工具,可以帮助定位和解决代码中的错误。可以使用单步调试、断点等功能来逐行执行代码,并观察代码中变量的值和状态。 6. 在编写代码的过程中,可以随时生成流程图来可视化代码的结构和逻辑。这可以帮助理清程序的执行路径,发现潜在的问题或改进程序的可读性。 通过以上步骤,可以在Delphi中生成代码并创建一个完整的应用程序。Delphi的集成开发环境使得代码生成和调试过程更加简化和高效。无论是初学者还是有经验的开发者,都可以使用Delphi来创建功能丰富且高效的应用程序。 ### 回答3: Delphi是一种流行的编程语言和集成开发环境(IDE),可用于开发桌面、移动设备和Web应用程序。Delphi提供了一套强大的工具和库,能够帮助开发者快速构建功能强大的应用程序。Delphi开发过程中,生成代码和流程图是非常重要的一环。 首先,Delphi的代码生成是通过使用Delphi IDE中的设计窗口和代码编辑器来实现的。在设计窗口中,开发者可以使用可视化设计器来创建界面、布局和组件等。设计窗口提供了丰富的工具和组件库,使开发者能够轻松定制和编辑应用程序的外观和行为。 在创建界面和布局后,开发者需要编写相应的代码来实现应用程序的逻辑和功能。在Delphi中,代码编辑器提供了代码编写和编辑的环境,开发者可以使用Pascal语言来编写代码。Pascal是Delphi的主要编程语言,它具有简单易懂和结构化的特点,使得代码编写更加方便和高效。 代码生成的流程一般包括以下几个步骤: 1. 设计应用程序的界面和布局,选择和放置所需的组件。 2. 在设计窗口中设置组件的属性和事件,以确定它们的外观和行为。 3. 在代码编辑器中编写所需的代码,实现应用程序的逻辑和功能。 4. 编译和运行应用程序,测试其功能和效果。 5. 根据需要进行调试和优化,修复可能存在的错误和问题。 在代码生成过程中,Delphi IDE提供了许多辅助工具和功能,如代码自动完成、调试器、版本控制和集成测试等,使开发者能够更加高效地完成代码编写和调试工作。 在生成代码的同时,Delphi IDE还可以自动生成应用程序的流程图。这可以通过使用Delphi的集成调试器来实现,调试器可以跟踪代码的执行流程并可视化显示。开发者可以在代码编辑器中设置断点,以便在调试过程中观察应用程序的执行路径和变量取值等信息。根据调试器提供的信息,开发者可以生成应用程序的流程图,以便更好地理解和分析代码的执行过程。 总之,通过Delphi的代码生成和流程图,开发者可以更加有效地开发和调试应用程序。Delphi的强大工具和功能使得代码编写、调试和优化变得更加简单和高效,同时提高了开发效率和代码质量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值