教程

本文由qing347056贡献
doc文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。
软件程序编制规范
3.2,软件程序编制规范 3.2.1,编制程序:根据系统分析要求编制程序,要求实现代码的复用,算法的优化,程序代码的优化, 发现数据库设计不合理的及时反馈,减少循环嵌套,基础数据避免重复更新,保证进入的数据就是齐全的, 正确的. 3.2.2,程序自测:负责按测试方案进行自测,交付测试的程序不能出现不能正常运行,未按公式计算的 简单错误. 3.2.3,程序测试:将完成的程序转系统分析人员按测试方案测试. 3.2.4,开发工具的程序编制规范:详见详细规范. 3.2.5,.net 编程规范 一.安装方法: 1, 安装 IIS 与 frontpage 扩展:点击控制面板,点击添加删除程序,选择添加删除 WINDOWS 组件,选 择应用程序服务器. 点击详细信息, 选择 internet 信息服务 IIS, 点击详细信息, 选择 frontpage 2002 server extensions 与 internet 信息服务管理器,按向导提示点击下一步,然后放入系统盘. 2, 要在防火墙退出的环境下进行安装,把网线拔掉. 3, 放入第一张光盘,他会提示安装.net 必备,放入第三张光盘,根据向导提示安装.安装完第一张, 第二张就可以运行.net 了.第四,五,六张为 MSDN 帮助文件.(07.02.06 添加) 3.2.6 Delphi7.0 3.2.6,Delphi7.0 编程规范 第一部分:软件安装与控件安装方法 第一部分:软件安装与控件安装方法 控件安装 一,软件安装:光盘或网络安装后,将光盘 CRACK 目录下 dent.slip 拷贝到安装路径下.未注册信息将不 再显示. 二,基本安装: 1,对于单个控件,Componet-->install component..-->PAS 或 DCU 文件-->install; 2,对于带*.dpk 文件的控件包,File-->Open(下拉列表框中选*.dpk)-->install 即可; 3,对于带*.bpl 文件的控件包,Install Packages-->Add-->bpl 文件名即可; 4,如果以上 Install 按钮为失效的话,试试 Compile 按钮; 5,是 run time lib 则在 option 下的 packages 下的 runtimepackes 加之.如果编译时提示文件找不到的 话,一般是控件的安装目录不在 Delphi 的 Lib 目录中,有两种方法可以解决: 1,反安装的源文件拷入到 Delphi 的 Lib 目录下; 2,或者 Tools-->Environment Options 中把控件源代码路径加入到 Delphi 的 Lib 目录中即可. 注意:所安装的控件是否与你所用的 Delphi 版本相适应. 三,控件删除: 在 Component/Install Packages 中删除. 选 Component/configure Palette… 有 pages 和 components 两个区域 双击 components 区域,选中要删除得控件,下面有得 Delete 按钮 但系统提供的控件只能 Hide,不能 delete. 打开控件所在的包文件(*.dpk),从中删除控件那个文件,再重新编译该包即可 如果是整个控件包都要删除的话,project->Option->Packages,删掉那个 packages 四,详细控件安装 1, Ehlib 控件

第 1 页 共 22 页
运行 Ehlib.v3.4.for.Delphi5678\Ehlib v3.4\Delphi7\DclEhLib70.dpk 文件,在弹出窗口中点击 Conpile,再点击 install,提示安装成功后在 Delphi—Tools—Environment Options—Library—Library Path 中添加路径 Ehlib.v3.4.for.Delphi5678\Ehlib v3.4\Delphi7\ 2, Fastreport 控件 分别运行 fastreport 2.53\source\fr7.dpk, fastreport 2.53\source\ado\ FRADO7.dpk, fastreport 2.53\source\BDE\FRBDE7.dpk, fastreport 2.53\source\DBX\FRDBX7.dpk fastreport 2.53\QueryBuilder\Source\dclOQB70.dpk fastreport 2.53\QueryBuilder\Source\ADO\dclOQBADO70.dpk fastreport 2.53\QueryBuilder\Source\BDE\dclOQBBDE70.dpk fastreport 2.53\QueryBuilder\Source\DBX\dclOQBDBX70.dpk, fastreport 2.53\QueryBuilder\Source\IBX\dclOQBIBX70.dpk 文件, 在弹出窗口中点击 Conpile,再点击 install; 安装完毕后,在 Delphi—Tools—Environment Options—Library—Library Path 中添加路径: fastreport 2.53\source fastreport 2.53\source\ado fastreport 2.53\source\bde fastreport 2.53\source\dbx fastreport 2.53\source\ibx fastreport 2.53\QueryBuilder\Source fastreport 2.53\QueryBuilder\Source\ado fastreport 2.53\QueryBuilder\Source\bde fastreport 2.53\QueryBuilder\Source\dbx fastreport 2.53\QueryBuilder\Source\ibx 3,Raize 控件 分别运行 Raize\RC3\Source\Rz30Ctls_Dsgn70.dpk,Raize\RC3\Source\ Rz30DBCtls_Dsgn70.dpk,在弹 出窗口中点击 Compile, 再点击 install; 安装完毕后, Delphi—Tools—Environment Options—Library 在 —Library Path 中添加路径:Raize\RC3\Source 4,VirtualTreeview 控件 VirtualTreeview4.0.12\VirtualTreeview\Packages\VirtualTreesD7D.dpk 文件,在弹出窗口中点击 Compile, 再点击 install; 安装完毕后, Delphi—Tools—Environment Options—Library—Library Path 在 中添加路径:VirtualTreeview4.0.12\VirtualTreeview\Packages 5,xlreport 控件 分别运行 xlreport\xlr4pro123.exe 和 xlreport\xlr4dfull123.exe,注意安装过程中只保留 delphi7 和 demo 两个选项即可,安装完毕后将安装路径下的 AfalinaSoft\XL Report 4\Source 文件夹的所有文件拷 到 AfalinaSoft\XL Report 4\d7units 中,运行 d7XLR4_D.dpk 文件;同样将 AfalinaSoft\ProOptionPack\Source 内的所有文件拷到 AfalinaSoft\ProOptionPack\d7units 中,运行 d7OPack.dpk 文件 五,第三方控件的下载与安装:用到的第三方控件在了解其用途后,经主任审批后,方可进行安装. 六,控件功能的学习方法:凡第三方提供的控件均有 DEMO 的演示示例,可根据所学知识查看其属性设置 及事件,运行演示结果,便可学习控件的功能,领会其功能,做到灵活运用. 七,将经常用到的控件直接拖动放在前面,使用起来比较方便.
第 2 页 共 22 页
部分: 程序设计要求: 第二部分: 程序设计要求: 一,所有代码必须有注释.所有代码单行的注释用(//),多行的注释用{},注释用中文.每段程序的注 释说明要简洁明确,说明程序编制的目的及主要功能,按照系统分析文件的

功能节点进行分段注释.每段 开头与结尾分别用一行'/'包括.在每个功能段内部根据具体情况进行分段注释,每段开头与结尾分别 用一行'/'包括. 1,程序(unit)头的注释:标明对应的系统分析文件名和最早开始编制时间. 2, 函数(过程)(function, procedure)头的注释内容包括: (1)函数(过程)的目的(purpose). (2)函数(过程)返回值(结果集)(return value)的类型及含义(程序标准事件不用标明). (3)函数(过程)参数(parameters)的类型及含义列表(程序标准事件不用标明). (4)函数(过程)中使用的临时变量(var)的类型及含义列表. 二,所有项目,窗口,单元,控件,菜单等按照命名规范命名. 1,项目命名:"P"+项目描述的第一个声码. 2,Form 命名:使用系统分析文件的程序名拼音头字母命名窗口.如结存查询,窗口命名为 jccx.再往下 一级延伸的,在上级窗口名后加能区分要求的拼音头字母来命名. 3,Unit 命名:Unit 的名称(name)用字母 U 后跟相应的 Form 名称. 4,自定义过程,函数(procedure, function)命名:使用函数目的的拼音头字母命名. 5,简单变量,参数命名:使用变量含义的拼音头字母命名. 6,控件命名:一般情况下延用默认名.Query 控件命名:query 有复用的情况,命名时用 qy1,qy2…标准 命名,特定的 query,命名时用"qy"+对应表名. 7,菜单命名:延用默认名,含右键菜单. 三,所有直接调用 DBGridEh 的录入类程序必须添加标准右键菜单. 四,所有查询类程序必须有序号,合计,合计用页脚方式,动态形成序号,必须添加标准右键菜单,窗口 必须有 caption,必须标明系统分析人员,程序编制人员,所有录入类,循环计算类不得出现 MESSAGE 框 为 SQL 语句代码,所有编译后的程序设置的断点要清除. 五,所有窗口均按照 1024X768 设置,窗口显示位置为桌面居中位置(设置 position 属性为 poDesktopCenter),大小为占桌面屏幕的 1/4 为适,所有窗口必须设置为置前属性(设置 Formstyle 属性 为 fsStayOnTop),保证调用子窗口时显示在最前. 六,Dbgrideh 的菜单使用右键标准菜单,包含筛选,升序,降序,多行合计,导出 excel,基础库维护时 还要有多行替换功能. 七,所有月份数据要形成月份表,如 qcsjb,mksyjlb,并同时修改查询程序,利用通用的月份查询函数, 每个月底要进行结转. 八,所有连接非 SQL 数据库的表(接口程序除外),必须建立 SQL 表,维护后导出,不允许直接读写. 九,编制程序要充分考虑输入时的出错情况:判断是否输入了空格,是否输入了不合规则的内容,判断大 小写,在程序中做出判断和限制.如包装入库数据,导出 VFP 时必须为大写,可以直接将录入的内容转换 在大写,再如进入结存数据,先判断录入的产品是否是存在的产品,否则造成结存表中的数据不正确. 十,所有单位引用统一,维护一致,显示顺序按

照包装,加工,库……显示,考核汇报除外. 十一,对基础库维护信息都要记录,除记录字段更换信息外,还要求录入员和更新时间. 十二,实时计划,外贸业务,成本管理各类程序增加一级界面(点击主窗口按钮即显示的界面)时,均增 加记录使用人,使用机器 IP,使用计数信息,具体方法:在新增 form 的 onshow 事件中增加程序类型(ssjh,unit1,cbgl)+'.jrmk(self.Caption)'; onclose 事件中增加程序类型(ssjh,unit1,cbgl)+'.lkmk(self.Caption)'; 语句,用于记录模块使用信息. 十三,用程序实现的数据更改,在程序试运行前必须经主任审批,主任不在时由代理人员审批. 十四,所有录入类,查询类中的必须录入项,如没有录入必须提示,否则不能执行.
第 3 页 共 22 页
十五,所有计算类程序实现,先查看数据类型,用 QY 连接实现公式计算的,参照 SQL 函数使用方法,用 DELPHI 连接字段或变量计算的,参照 DELPHI 函数使用方法. 十六,代码必须采用缩进格式表示嵌套,多层嵌套的也遵循此规则.标准格式,如下: 缩进快捷键:CTRL+SHIFT+I 为向后,CTRL+SHIFT+U 为向前,选中部分块后可以直接按快捷键操作.输写 各层嵌套时可先将 BEGIN……END 对应,然后再进行嵌套. while do begin if then begin if then begin end else begin end; end else begin end; end; 十七,跳转语句语法: 1,if 语句:会计算一个表达式,并根据计算结果决定程序流程.If 保留字后跟随一个生成 boolean 值 True 或 False 的表达式.一般用"="作为关系运算符,比较产生一个布尔型值.当表达式为 True 时,执 行 Then 后的语句.否则执行 else 后的代码,if 语句也可以不含 else 部分,表达式为 False 时自动跳到 下一行程序.If 语句可以嵌套,当使用复合语句表达时,复合语句前后需加上 begin……end.Else 保留 字前不能加 "; 而且, ", 编译器会将 ELSE 语句视为属于最靠近的 IF 语句. 必要时, 须使用 begin……end 保留字来强迫 else 部分属于某一级的 if 语句. (1),单个条件: if 条件 then A,待执行语句单行时: 执行语句; B,待执行语句多行时: begin 语句 1… 语句 2… …… end; (2),选择条件: If (条件 1) and (条件 2) OR(条件 3)…… then (3),ELSE 使用语法: If 条件 then 语句 1 Else 语句; (4),以上可以多层嵌套,每个嵌套里面均遵循以上语法. 2,case 语句:
第 4 页 共 22 页
Case 语句适用于被判断的变量或属性是整形,字符型,枚举型或子界型时用 case 语句进行逻辑跳转比编 写复杂的 if 语句容易阅读,而且程序代码整形较快.例: Procedure Tform1.button1click(sender:Tobject); Var Number:integer; Begin Number:=strtoint(edit1.text); case number of 1,3,5,7,9:label2.caption:='奇数'; 0,2,4,6,8:label2.caption:='偶数'; 10..100: Begin Label2.caption:='在 10 到 100 之间'; Form1.color:=clblue; End; Else Label2.caption:='大

于 100 或为负数'; END; END; END. 十八,循环语句语法: 1,repeat 语句 i:=0; repeat i:=i+1; writen(i); until i=10; 2, while 条件 do begin end; 3,升序:for i:=0 to a do/降序: for i:=a downto 0 do begin end; 十九,在应用程序中所有 QY 的 connection 设置为主 FORM 中的 Adoconnection,所有的连接数据库设置均 在 INI 文件中实现. 二十,多条语句不能写在一行,一条语句过长应分行写,分行尽量做到平均,层次性与语句的完整性.例: qy2.SQL.Add('update '+bm+' set jhdh=jhdh*'+qy1.FieldByName('lb').AsString+' '+ 'where rq='''+zxrq+''' and gx='+''''+ListBox1.Items[ListBox1.ItemIndex]+''' '+ 'and charindex(xm,'+''''+qy1.FieldByName('sm').AsString+''')>0'); 二十一,程序流程要清晰,一条 sql 语句实现的功能要单一.Sql 查询结果使用虚拟表保存的,使用前后 清除虚拟表. 二十二,使用 else 语句时要避免语句过长,造成 if else 混乱. 二十三,多个系统调用的模块,要形成 DLL 文件,要有模块使用记录,更新时同步更新. 二十四,遇到需要与 VFP 接口的程序,要将 VFP 表维护好以后形成 SQL 表,不能直接连 VFP 表,导出 VFP 表后在原程序中使用. 二十五,sql 与 delphi 常用函数对照,使用方法及注意事项:
第 5 页 共 22 页
on SQLConfigDataSource(hwndParent: Integer; fRequest: Integer;lpszDriverString: String; lpszAttributes: String): Integer; stdcall; external 'ODBCCP32.DLL'; (2),在执行导入数据程序的事件名称后声明 const ODBC_ADD_SYS_DSN=1;
第 16 页 共 22 页
(3), 在执行导入的程序中首先带入参数, 执行 SQLConfigDataSource 函数, 例如: SQLConfigDataSource(0, ODBC_ADD_SYS_DSN, 'Microsoft Visual FoxPro Driver'+ CHR(0), 'dsn=dz' + CHR(0) + 'BackgroundFetch=Yes' + CHR(0)+ 'Description=descripcion de la conexion' + CHR(0)+ 'Exclusive=Yes' + CHR(0) +'sourceDB=C:\'+ CHR(0) +'Sourcetype=DBF'); 定义了接口程序所有 ODBC 的名称为 dz,连接属性为 Microsoft Visual FoxPro Driver,连接路径为 C:\, 连接文件类型为 DBF 文件. (4),新建 ADOconnection 控件 ADOconnection2 连接 ODBC 名称 dz:首先点击 ADOconnection2 的 connectionstring 属性,选择提供程序为 ODBC Drivers,并设置数据源名称为 dz 后,测试连接. (5),新建 query 控件 qydz,设置其 connection 属性为 ADOconnection2,再通过 query 的标准用法就可 以查询出对应 dbf 文件名的内容. 2,将 SQL 数据导出为 vfp 表的应用 (1),删除对应路径下,文件名为导出的 dbf 类型的文件,例如:DeleteFile('c:\'+bm1); (2),新建 ADOConnection 控件 ADOConnection2,并动态设置其连接属性,将要导出的内容导出到固定的 vfp 表,例如:ADOConnection2.ConnectionString:= 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\;'+'Extended Properties=dBase 5.0'; ADOConnection2.Execute('select * into kq from kqhz IN [ODBC] [ODBC;Driver=SQL Server;UID=aa;PWD=aaa;Server=jnmd;DataBase=ckyw] '); ADOConnection2.Close; 十四, 控

件使用方法 十四,Treeview 控件使用方法 1,设置 items 属性: (1),new item:增加新的节点; (2),new subitem 为当前节点增加新的子节点; (3),delete 删除当前节点; (4),load 导入节点; (5),TEXT:显示文字; (6),Image Index:显示图形序号; (7),Selected Index:选中时的序号; (8),State Index:状态序号; 2,新增 RZPageControl 控件,并添加多个 TabSheet 页面,使 treeview 控件的每个节点都有对应一个 TabSheet 页面. 3,在 TreeView1Click 事件中写入点击每个节点时的响应事件,例如 with Treeview1.Selected do begin jcwh:=Treeview1.selected; with RZPageControl1 do begin case jcwh.SelectedIndex of 1:begin ActivePage:=TabSheet1; …… end; 2:begin ActivePage:=TabSheet2; …… end; ……
第 17 页 共 22 页
end; 4,根据界面设计需要,多页显示的控件可设置可视不可视,以达到美化界面的效果. 十五,chart 控件使用方法:控件Additional 十五,chart 控件使用方法:控件--Additional 1,双击 chart 控件,在 chart 页 title 页,录入显示内容,以湿压强度为例:可以录入湿压强度曲 线图. 2,在 chart 页 series 页,点击 ADD,会显示各种图,根据需要进行设置,在下面的框 3D 前打勾,为 3D 模式,否则为普通模式. 3,设置 SERIES 页中 datasource 属性,设置为 randomValue. 4,用 query 控件搜出相应的记录,通过循环和 DBChart1.Series[0].add()函数,将每一条记录加 载 series 中,例如: qy1.Close; qy1.SQL.Clear; qy1.sql.Add('select rq,avg(syqd) as syqd from xssjb '+ 'where sydw=''铸造一车间'' and rq>=''06.12.01'' and rq<=''06.12.31'' '+ 'group by rq'); qy1.Open; qy1.First; DBChart1.Series[0].Clear; while not qy1.Eof do begin BChart1.Series[0].add(qy1.fieldbyname('syqd').AsFloat,qy1.fieldbyname('rq').AsStr ing,200); qy1.Next; end; add 有三个参数:第一个参数为图表 y 轴的数值;第二个参数为图表 x 轴的数值;第三个参数为图表 中该点的颜色(clteecolor 为默认颜色红色) . 5. add 函 数 标 准 形 式 : function addxy(const axvalue,ayvalue:double;const axlabel:string;acolor:tcolor)):longint;其中,参数 axvalue,zyvalue 表示点的横坐标和值,axlabel 为横坐标签,acolor 为点的颜色. 6,常用的 series 类型: 1)line:用折线将各点连接起来的形式绘制图表; 2)area:用这项将序列各点连接起来,还要将折线与 x 轴之间进行填充. 3)point:用一组点的形式显示 series 中各个点. 4)bar:用垂直的直方图绘制图形,每一个直方条代表一个 series 点. 5)Horizontal bar:与 bar 相似,只不过是用水平方向的直方图绘制图形. 6)pie:用圆饼图绘制图形,每一个 series 点是圆饼中的一个扇形. 7,常用属性: 1)active:设置序列是否在图表上显示. 2)datasource:设置为序列提供的数据的数据源. 3)xvalues:序列的横坐标数据. 4)yvalues:序列的纵坐标数据. 5)xlablessource:序列的横坐标标签的数据来源. 6)seriescolor:绘制序列是所用

的颜色. 8,常用事件: 1)afterdrawvalues:序列中的点被绘制后触发. 2)onbeforedrawvalues:序列中的点被绘制前触发.
第 18 页 共 22 页
3)onafteradd:序列中插入一个点后触发. 4)onbeforeadd:序列中插入一个点前触发. 5)onclearvalues:当调用 clear 方法或 delete 方法删除序列中的点时触发.
第四部分: 第四部分:常出错现象及原因分析 一,内存地址错误提示如下:
原因分析:在创建 FORM 时,在 PROJECT 的 VIEWSOURCE 里创建了 FORM,在整理时以减少内存已清除,调用 下级 FORM,赋初始值时,需在创建后执行语句,然后显示.修改内容如下: If Application.findcomponent('jjhzcx')=nil Then Application.CreateForm(Tjjhzcx,jjhzcx); jjhzcx.qy1.Close; jjhzcx.qy1.sql.clear; jjhzcx.qy1.sql.add('select * from #gz'); jjhzcx.qy1.open; jjhzcx.qy2.Close; jjhzcx.qy2.sql.clear; jjhzcx.qy2.sql.add('select * from #gzmx where xm=:xm'); xm=:xm'); jjhzcx.qy2.open; jjhzcx.show; 二,is not a valid floating point value 是无效的浮点值. 原因分析:可能试图将一个值转换为一个浮点数,但编译器无法将其识别为浮点值. 快速纠正:在给变量赋值前,验证该值是一个有效的浮点值. 三,Assignment to FOR-Loop Variable 给 FOR-Loop 变量<>赋值. 原因分析:在 32 位 Delphi 中,你可能试图给 For 循环(换言之,Do 之后)中的循环控制变量赋值. 快速纠正:删除 Do 保留字后面为 For 循环控制变量的赋值. 四,Cannot initialize locall variables 无法初始化局部变量. 原因分析:可能在声明一个局部变量时试图为其赋值.
第 19 页 共 22 页
快速纠正:不要在一个过程或函数的 Var 段给变量赋值.不要在一个过程或函数的 Const 段给常量分配数 据类型. 五,Cannot perform this operation on a closed database 无法对一个关闭的数据库执行这种操作. 原因分析:可能试图调用一个 TDataBase 组件的 StartTransaction 方法,而没有将其 Connected 属性设 置为 True,或者没有调用其 Open 方法. 快速纠正:调用 StartTransaction 前,在设计时或在代码中将 Connected 属性设置为 True,或者调用 TDatabase 组件的 Open 方法. 六,Cannot perform this operation on a closed dataset 无法在一个关闭的数据集上执行这种操作. 原因分析:1,可能试图刷新,编辑,清空,删除或搜索一个没有打开或激活的 TDataset 组件. 2,可能一个数据集需要的辅助数据集没有激活或者关闭. 3,可能调用了一个用于多级应用的 TClientDataSet 的 Open 方法或者将其 Active 属性设置为 True,并且 没有将 TClientDataSet 的 Provider 属性设置为一个有效的 TDataSetProvider 组件. 4,可能调用了一个用于单级应用的 TClientDataSet 的 Open 方法或者将其 Active 属性设置为 True,但没 有打开包含数据的文件. 快速纠正:1,2,执行上述操作前,打开所有需要的数据集. 3,将一个 TDataSetProvider 赋给 TCli

entDataSet 组件. 4,在对数据工作前,或者设置 TClientDataSet 的 FileName 属性,或者调用 LoadFromFile.在 Delphi 6 及以上版本中,可以以一种或两种格式保存数据("传统"或"典型"的 ClientDataSet 二进制格式,带 有.CDS 扩展名;或者以 XML 格式,带有一个.XML 扩展名). Cannot perform this operation on an open database 无法在一个打开的数据库上执行此操作. 原因分析:1,可能在一个 TTable 的 Active 属性为 True 时,试图将其 Exclusive 属性设置为 True. 2,可能在一个 TTable 的 Active 属性为 True 时,试图给其 TableName 属性赋一个值. 3,可能在数据库的 Connected 属性设置为 True 时,试图给 TDatabase 的 Alias 或 DatabaseName 属性赋 值. 4,可以在 TDatabase 组件的 Connected 属性设置为 True 时,试图将 TSession 组件的 Active 或 AutoSessionName 属性设置为 True. 快速纠正:1-4,在试图进行这种操作前,确保 TTable 或 TDatabase 没有激活. 七,Cannot perform this operation on an open dataset 无法对一个打开的数据集执行此操作. 原因分析: 可能当表打开时, 1, 试图修改一个 TTable 的 Exclusive, ReadOnly, DatabaseName, TableName, TableType 或 SessionName 属性. 2,可能在进行查询时,调用了一个 TQuery 的 Unprepare 方法. 3,可能在一个 SQLQuery 组件的 Active 属性设置为 True 时,修改了其 SQL 属性. 快速纠正:1,修改上述提到的任何属性前要关闭 TTable. 2,调用 Unprepare 前关闭 TQuery. 3,在再次打开/激活数据集前,先将它的 Active 属性设置为 False,或者调用其 Close 方法,然后进行修 改. 八,Division by zero:被零除. 原因分析:可能试图用零除一个数. 快速纠正:在除法操作前确保除数不为零,或者将除法操作封入一个 Try…Except 块中. 九,Field index out of range:字段索引越界. 原因分析:1,可能试图通过一个索引元素访问一个表的索引,但该索引元素大于表定义的最大索引元素 数.
第 20 页 共 22 页
2,可以正使用 TTable 的 FimdKey 或 FindNearest 方法作用于 dBASE 表和表达式索引. 3,可能试图索引一个计算出的字段,其 FieldKind 属性为 fkCalculated. 4,可能有一个 Master/Detail 关系,但没有将 Detail 表的 IndexName 属性与 Master 表匹配. 快速纠正:1,记住,索引元素通常是从零开始的. 2,使用 TTable 组件的 GoToNearest 方法作用于 dBASE 表和表达式索引. 3, 如果想基于一个计算出的字段排序, 则将字段的 FieldKind 属性由 fkCalculated 改为 fkInternalCalc. 4,设置 Detail 表的外部键(与 Master 表的主键匹配)作为其 IndexName 属性. 十,For loop control variable must have ordinal type For 循环控制变量必须是序数类型. 原因分析:可能你试图使用一个非序数类型(Boolean,Char,WideChar,Integer,枚举,子界)的数据 类型作为一个 For 循环的控制变量. 快速纠正:使用一个序数类型作为 For 循环的控制

变量,通常使用一个声明为 i 的整型. 十一,Invalid floating point operation 无效的浮点操作. 原因分析:1,可能试图将一个过长的数字赋给一个浮点数据类型. 2,可能试图使用 Round 或 Trunc 函数反一个实型数转化为整型,但这个数太大,以致于没有合适的整数 与之对应. 3,计算机可能缺少算术协处理器. 快速纠正:1,保证没有赋一个很大的数,可以通过编码显式禁止,也可以把赋值语句写在 Try…Except 块中. 2,把 Round 或 Trunc 调用放在 Try…Except 块中. 3,可以升级计算机,使其包含算术协处理器.或者在单元开始处设置{$N-}编译命令. 十二,Label declared and referenced,but not set 标号已声明并引用,但没有设置. 原因分析:可能已经声明并调用了标号(在 GoTo 语句中),但是标号没有定义. 快速纠正:必须使用一个 GoTo 语句可以到达的位置. 十三,Line too long[more than 255 characters] String[直接量]至多 255 个元素 原因分析:1,可能声明了一个短字符串,它包含的元素多于 255 个. 2,可能给一个把一个多于 255 个元素的字符串赋给一个短字符串. 3, 在代码编辑器中有一行赋了一个多于 255 个元素的字符串 (这种情况下, 即使长字符串也会发生错误) . 4,可能声明的字符串常量长度超过 255 个字符. 快速纠正:1,使用 ShortString 时,保证它的大小小于 256. 2,不要把一个大于 255 个元素的字符串赋给一个 ShortString 变量. 3,使用字符串连接操作符(+)把字符串分割为多行. 4,减少字符串常量的大小,或者声明多个常量,然后进行连接. 十四,Missing connection or Connection String 缺少连接或者连接字符串. 原因分析:1,可能已经对 TADODataSet,TADOTable 或者 TADOQuery 组件初始化了 Fields Editor(从上下 文菜单中选择 Fields Editor,或者双击),然后从 Fields Editor 的上下文菜单中选择 Add Fields 或者 Add All Fields,但是 Connection 属性或 ConnectionString 属性中没有有效的项. 2, 可能试图执行一个 SQL 语句, 但没有指定 TADOQuery 和 TADODataset 组件对应的 TADOConnection 组件. 快速纠正:1-2,通过指定 TADOQuery 和 TADODataset 组件的 Connection 属性使其与 TADOConnection 组 件相连. 十五,Not enough actual parameters:没有足够的实参. 原因分析:1,可能调用了一个函数或过程,但是没有提供所有需要的参数.
第 21 页 共 22 页
2,可能试图覆盖父类方法,但是没有提供父类中声明的所有参数. 3,可以试图检查事件句柄是否有效,即检查 event 属性的值是否为 nil. 4,可能在调用过程或者函数的时候用分号代替了逗号. 快速纠正:1,提供缺少的参数. 2,删除构造函数定义的 inherited 部分以创建新的构造函数,而不是从 TComponent 的构造函数中继承. 为了继承 TComponent 的构造函数,在声明,定义和调用中添加参数. 3,使用 Assigned 函

数进行测试. 4,用逗号代替分号. 十六,Object or class type required:缺少对象或者类的类型. 原因分析:可能试图调用一个方法,但该方法所属类型并不是一个对象或者类. 快速纠正:将不可识别的类型用对象或者类代替. 十七,Stream read Error:流读取错误. 原因分析:可能试图在 Delphi 1 中加载在 32 位 Delphi 中创建的窗体. 快速纠正:如果可行的话,升级为 32 位 Delphi 版本,最好是最新版本.如果必须坚持使用 Delphi 1 打 开 32 位 Delphi 创建的窗体,从窗体文件(.DFM)中删除 32 位 Delphi 中的所有特性.可以在文本编辑器 (比如写字板)中编辑该文件来实现. 十八,Type mismatch for field,expecting:,actual: 字段类型不匹配,需要<字段类型>,实际为<字段类型> 原因分析:可能使用 TclientDataSet 保存(hold)数据,并以一种特定格式(比如 AsMemo)为特定列保 存数据,然后创建了另一种数据类型(比如 TStringField)的 TFieldType 派生类,随后试图在实际文件 中为 ClientDataSet 的字段赋值. 快速纠正:为磁盘存储和内存处理使用相同的数据类型. 十九,Type of expression must be BOOLEAN 表达式类型必须是 BOOLEAN 原因分析:1,可能 If,While 或者循环语句中使用了条件语句,但该语句不是一个 boolean 类型(无法 计算得出 True 或者 False). 2,当试图对 Sender 参数进行类型强制转换时,有时这个错误消息是由语法错误引起的. 快速纠正:1,保证编译器明确需要 True/False 答案的条件能够计算出 Boolean 值. 2,这里,需要在 Sender as TDBEdit 和 Tag 属性之间添加点操作符:if (sender as TDBEdit).Tag=8 then 第五部分, 第五部分,版本信息 序 号 1 2 3 4 5 6 版本 号 A-G G G G H H 修改 次数 0 1 2 3 0 1 修改内容 新版工作规范. 增加程序设计要求. 完善 Query 用法. 完善 sql 与 delphi 函数对比. 对各项内容进行规范,进行完善. 常出错原因分析. 发布日期 2007 年 7 月 1 日 2007 年 9 月 30 日 2007 年 10 月 2 日 2007 年 10 月 4 日 2007 年 11 月 17 日 2007 年 11 月 21 日
第 22 页 共 22 页

相关文档
最新文档