如何使用Delphi设计强大的服务器程序[1]

如何使用Delphi设计强大的服务器程序[1],第1张

现在网络的流行 使得服务器程序得到了广泛的应用 那么我们使用Delphi如何设计出强壮的服务器呢?

有人说 如果要设计服务器的话 一定要使用VC来设计 其实这个人说的有一定道理 因为如果你要使用Delphi来设计服务器的话 要想设计高效的服务器就不要使用Delphi带来的大部分的控件(最好不要使用Delphi控件) 为什么呢?下面我会告诉大家 这样的话你全部使用API来设计服务器 就同VC没有太大的区别了

使用Delphi来设计服务器程序 具体选择是使用窗体消息模式还是使用完成端口的模式 这主要看你的用户连接数量来决定 如果你的用户连接数量小于 人的话 并且处理的数据量不大的话 可以使用窗体的消息模式来进行服务器的开发 而如果大于 这样最好使用完成端口来开发服务器 我这里建议大家最好使用完成端口模式 因为你不可能保证你的用户数量不变化 同时由于你的服务器如果运行一段时间没有问题的话 最好做成WIN 的服务程序 这样可以保证后期的维护比较少

现在介绍你在开发Delphi服务器的时候需要注意地方

不要在程序中使用String变量

这个也是在实际的开发过程中发现的 我最开始开发的时候 为了简单一些 就大量使用String变量来开发程序 但程序总是在运行一段时间后出现问题 后来查原因也不太清楚 到网上查资料 发现有人介绍不要使用String来做变量 将自己的程序全部修改成数组问题就基本解决了

使用快速的加密算法如XOR 加密或DES加密等算法

服务器在与客户端传递的时候一定要进行加密 但使用什么类型的加密算法呢?不要使用那种需要大量运算的算法如RSA等算法 最好使用XOR加密或DES换位加密算法 这样主要是满足普通的加密密文的要求 又保证服务器的运算速度 你也可以使用RSA加密密文 但这会造成服务器处理变慢 而如果遇到大量的处理时候 很容易服务器就拒绝服务器

使用原ADO函数来连接数据库

服务器程序通常都与数据库想结合 那么使用Delphi开发的时候 通常使用ADO的控件来制作 但如果你学习ADO手册会发现 对于服务器其实不需要控件来完成数据的 *** 作 可以直接使用ADO相应的函数来完成 主要因为服务器程序与数据库通常都是比较简单的 *** 作 没有很复杂的 所以使用原ADO模式就可以了 这样也减少由于ADO控件带来的问题

应多使用 池

服务器在设计的过程 一定要大量的变量支持 如果不使用池这个概念 你的程序将在创建和释放变量过程中浪费大量的时间 而且容易出现问题 设计过程中尽量不要创建和释放变量 如果能考虑到的变量 都在开始的运行的时候创建完毕 这样可以加快程序的运行速度 减少冲突 具体如何使用池这个技术 以后有时间再考虑写一篇介绍一下

熟练使用指针 *** 作

如果你不熟悉指针 *** 作 那么你几乎无法设计出高效的服务器 如果你要真正的理解指针的概念 对于设计服务器来说就是如虎添翼

下面举个例子 如使用Recv接收数据到Buffer中后 你需要进行解密 *** 作 你可以使用下面的方法进行

var  a b:array [ ] of byte;  i :integer;  ResultBuffer :array [ Max] of byte;begin  for i := to Sizeof(Buffer) div do  begin    move(Buffer[(i ) + ] a );    Des(a b true);  //这里使用DES加解密处理    move(b ResultBuffer[(i ) + ] );  end;end

lishixinzhi/Article/program/Delphi/201311/24703

字段输入模式编辑器

在字段输入模式编辑中可以选择一种输入模式 而且在TestInput编辑框中输入字段值进行检验

因为TStringField类型的字段部件没有DisplayFormat属性 但是可以把EditMask属性当DisplayFormat属性使用

设定字段的显示和编辑格式

Delphi本身为某些类型的字段对象提供了设定其显示和编辑格式的例程 并且为字段部件的DisplayFormat和EditFormat属性指定了缺省值 例如对于与浮点型数值字段对应的TFloatField类型的字段部件 而且该字段部件的Currency属性设置为True 时 字段值 的显示格式为$ 编辑格式是 表 是Delphi提供了设置字段显示和编辑格式的例程

表 字段格式例程

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

例 程 名 运用的字段对象

─────────────────────────────

FormatFloat TFloatField TCurrencyField

FormatDateTime TDateField TTimeField TDateTimeField

FormatInteger TIntegerField TSmallIntField ordField

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

上述这些用于设定日期时间类型 数值型以及货币型字段的显示和编辑格式的例程 都是按国际上通行格式来设定相应类型字段的格式的 用户可以自己设置字段部件的DisplayFormat和EditFormat属性 来设定适合自己使用的格式 还可以为有关字段对象的OnGetText和OnSetText事件编写代码来设定字段的显示和编辑格式

字段部件的事件及应用

字段部件常需处理的事件如表 所示

表 字段部件的事件

━━━━━━━━━━━━━━━━━━━━━━━━━━━━

事件名 用 途

────────────────────────────

OnChange 当字段部件的字段值发生改变时 触发该事件

OnGetText 当字段部件获得字段值时 触发该事件

OnSetText 当字段部件被设置字段值时 触发该事件

OnValidata 当字值被修改或插入新的字段值时 对字段值进行有效性检验时 触发该事件

━━━━━━━━━━━━━━━━━━━━━━━━━━━━

用户想自己设定字段的显示和编辑格式时 可以编写OnGetText事件和OnSetText事件的处理过程 以达到设定字段的显示和编辑格式

字段部件的类型转换函数及使用

字段部件具有一些内部函数用于转换字段值的类型 对于不同的字段类型 这些转换函数的作用是不一样的 表 概括了不同类型的字段及转换函数的作用

表 字段部件的转换函数

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

字段类型 AsString AsInteger AsFloat AsDatetime AsBoolean

────────────────────────────────────

TStringField 转换成 转换成整数 若能转换 日期 转换成布型

Stringg型 (若能转换) 则转换成 (若能转换)

────────────────────────────────────

TIntegerField

TSmallField 字符型 整数型 浮点型 不允许 不允许转换

ordField

────────────────────────────────────

TFloatField

TCurrencyField 字符串型 舍入成整数 浮点型 不允许 不允许

TBCDField

────────────────────────────────────

TDateField

TDateTimeField 字符串 不允许 浮点数 日期型 不允许

TTimeField

────────────────────────────────────

TBooleanField 转换成Time 不允许 不允许 不允许 布尔型或False

────────────────────────────────────

lishixinzhi/Article/program/Delphi/201311/25154

关于选课系统的设计 周 虹

摘要:随着课程改革的不断深入,学校规模不断扩大、课程项目不断增多,为了解决学生选课管理上的复杂的人工 *** 作,减轻重复工作,故设计了选课系统。学校规模的扩大使得学校对每年新生入学、毕业生离校及本校各种分流机制造成的学生信息产生变动,如学籍变动、个人信息修改。为了适应课程的改革,学校在每个学期都要开设一定的课程提供给学生,让学生根据自己的情况来选择,根据学生选择结果给出课程表。本校根据教学实际,为了使教师有效地管理学生信息,设计学生信息管理系统,由此形成学生成绩管理系统,本文就此设计思路进行阐述。

关键词:选课系统 学生信息管理系统 数据流图 DFD图 E-R图 SC图 IPO图 Delphi软件

随着学校规模的不断扩大,专业、班级、学生的数量急剧增加,有关学生选课的各种信息量也成倍增长,而目前许多高校的学生选课管理仍停留在复杂的人工 *** 作上,重复工作较多,工作量大,效率低,因此,迫切需要开发基于互联网的课程信息管理系统来提高管理工作的效率。基于互联网的学生选课管理系统,在学生选课的规范管理、科学统计和快速查询方面具有较大的实用意义。它提高了信息的开放性,大大地改善了学生、教师对其最新信息查询的准确性。

一、选课系统的任务概述

1 目标

选课系统开发的目标是实现学生选课信息关系的系统化、规范化和自动化。

2 系统技术

学生选课系统要求具有信息处理的开发性,方便教师上传学生成绩、学生上网选课和查询选课信息及成绩等,因此本系统设计为基于>>

院校专业:

基本学制:四年 | 招生对象: | 学历:中专 | 专业代码:080902

培养目标

培养目标

培养目标:本专业培养德、智、体等方面全面发展,掌握自然科学和人文社科基础知识,掌握 计算科学基础理论、软件工程专业的基础知识及应用知识,具有软件开发能力以及软件开发实践 的初步经验和项目组织的基本能力,能从事软件工程技术研究、设计、开发、管理、服务等工作的 专门人才。

培养要求:本专业学生主要学习自然科学和人文社科基础知识,学习计算科学、软件工程相 关的基本理论和基本知识,接受软件工程的基本训练,具有软件开发实践的基本能力和初步经 验、软件项目组织的基本能力以及基本的工程素养,具有初步的创新和创业意识、竞争意识和团 队精神,具有良好的外语运用能力。

毕业生应获得以下几方面的知识和能力:

1.掌握基本的人文和社会科学知识,具有良好的人文社会科学素养、职业道德和心理素质, 社会责任感强;

2.掌握从事本专业工作所需的数学和其他相关的自然科学、系统科学知识以及一定的经济 学与管理学知识;

3.掌握计算学科基础理论知识和专业知识,了解本学科的核心概念、知识结构和典型方法;

4.掌握软件工程学科的基本理论和基本知识,熟悉软件需求分析、设计、实现、评审、测试、 维护以及过程与管理的方法和技术,了解软件工程规范和标准;

5.经过系统化的软件工程基本训练,具有参与实际软件开发项目的经历,具备作为软件工 程师从事工程实践所需的专业能力;

6.具备综合运用掌握的知识、方法和技术解决实际问题的能力,能够权衡和选择各种设计 方案,使用适当的软件工程工具设计和开发软件系统,能够建立规范的系统文档;

7.充分理解团队合作的重要性,具备个人工作与团队协作的能力、人际交往和沟通能力以 及一定的组织管理能力;

8.具有初步的外语应用能力,能阅读本专业的外文材料,具有一定的国际视野和跨文化交 流、竞争与合作能力;

9.了解与本专业相关的职业和行业的重要法律法规及方针与政策,理解软件工程技术伦理 的基本要求;

10了解软件工程学科的前沿技术和软件行业的发展动态,在基础研发、工程设计和实践等 方面具有一定的创新意识和创新能力;

11能够运用所学的知识、技能和方法对系统的各种解决方案进行合理的判断和选择,具备 一定的批判性思维能力;

12具备自我终身学习的能力,自觉学习随时涌现的新概念、新模型和新技术,使自己的专 业能力保持与学科的发展同步。

主干学科:软件工程。

核心知识领域:计算基础、数学和工程基础、职业实践、软件系统建模与分析、软件系统设计、 验证与确认、软件演化、软件过程、软件质量、软件管理。

核心课程示例:

示例一(括号内为理论授课+实验学时数):离散数学(64学时)、计算系统基础(64+48学 时)、计算与软件工程I(个人级软件开发)(48+48学时)、计算与软件工程Ⅱ(小组级软件开 发)(48+48学时)、计算与软件工程Ⅲ(团队软件工程实践)(16+96学时)、数据结构与算法 (64+48学时)、 *** 作系统(48+48学时)、计算机网络(48+48学时)、数据库系统(48+48学 时)、软件需求工程(32+32学时)、软件系统设计与体系结构(32+32学时)、软件构造(32+32 学时)、软件测试与质量(32+32学时)、人机交互的软件工程方法(32+32学时)、计算机组织 结构(限选)(48学时)、软件工程统计方法(限选)(48学时)、软件过程与管理(限选)(32学 时)。

示例二:程序设计基础(32学时)、面向对象的编程与设计(32学时)、数据结构(32学时)、 离散结构(32学时)、 *** 作系统(32学时)、数据库系统(32学时)、计算机网络(32学时)、软件工 程概论(32学时)、软件系统分析与设计技术(32学时)、软件体系结构(32学时)、软件项目管理 (32学时)、软件测试技术与实践(32学时)、计算机应用与编程综合实践(实验64学时)、面向对 象与交互式应用开发综合实践(实验64学时)、数据结构与算法综合实践(实验64学时)、数据 库应用系统综合实践(实验64学时)、软件系统构思综合训练(实验64学时)、软件工程综合实 践(实验64学时)。

示例三(括号内为理论授课+实验学时数):程序设计基础(60+20学时)、离散数学(64学 时)、面向对象程序设计(40+16学时)、数据结构(60+20学时)、计算机组成与结构(52 +12学 时)、 *** 作系统(62 +10学时)、数据库概论(52 +12学时)、软件工程导论(40+8学时)、网络及其 计算(56+16学时)、软件建模技术(30+10学时)、软件质量保证与测试(32+8学时)、软件项目 管理(32+8学时)、软件工程课程设计(实验80学时)。

主要实践性教学环节:课程实验、课程设计、专业实习、毕业设计(论文)等。

主要专业实验:程序设计实验、计算机网络实验、 *** 作系统实验、数据库设计实验、系统分析 与软件建模实验、软件系统设计实验、软件测试实验、专业综合实践。

修业年限:四年。

授予学位:工学学士。

职业能力要求

职业能力要求

专业教学主要内容

专业教学主要内容

《C/C++程序设计》、《Java语言程序设计》、《软件工程》、《电路与模拟电子技术》、《Linux *** 作系统与网络编程》、《WEB技术与应用》、《数据结构与算法》、《数据库开发技术》、《算法分析》、《人工智能技术》 部分高校按以下专业方向培养:JAVA、大数据、云计算、软件设计、数字媒体、金融软件开发、嵌入式应用开发、软件开发与测试、移动互联网开发、移动设备应用开发。

专业(技能)方向

专业(技能)方向

IT 类企业:JAVA工程、NET 工程、系统开发、网站开发、软件需求分析、软件开发、软件测试、技术支持、运营维护、项目管理。

职业资格证书举例

职业资格证书举例

继续学习专业举例

就业方向

就业方向

发展前景:中国的软件行业规模不是很大,些软件企业在软件制作上,也只是采用了一些软件工程的思想,距离大规模的工业化大生产比较还是一定的差距;原因有管理体制的问题,市场问题,政策问题,也有软件工程理论不全面和不完善的问题。所以软件工程的研究和应用,以及中国软件行业的进一步发展,都需要一定的既有软件工程的理论基础和研究能力,又有一定的实践经验的软件工程科学技术人员来推动。软件工程的前途是光明的。

对应职业(岗位)

对应职业(岗位)

其他信息:

软件工程是研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来的学科。 软件工程学什么 软件工程主要学习研究计算机各类软件的构造、设计、开发方法、测试、维护等相关的知识和技术,涉及程序设计语言、数据库、软件开发工具、系统平台、设计模式等多方面,进行软件需求分析、软件设计、软件测试、软件维护等。 软件工程就业情况 1可视化编程 掌握程序设计方法及可视化技术,精通一种可视化平台及其软件开发技术。获取Delphi程序员系列、Java初级或VB开发能手认证。 就业方向:企业、政府、社区、各类学校等可视化编程程序员。 2WEB应用程序设计 具有美工基础和网页动画设计能力,掌握交互式网页程序的设计技术,能进行网站建设和维护。获取Macromedia多媒体互动设计师或Delphi初级程序员或Delphi快速网络开发工程师认证。 就业方向:企业、政府、社区、各类学校等WEB应用程序员。 3软件测试 掌握软件测试的基本原理、方法和组织管理,精通软件测试工具。获取ATA软件测试工程师或Delphi初级程序员或Java初级程序员认证。 就业方向:企业、政府、社区、各类学校等软件测试员。 4数据库管理 能应用关系范式进行数据库设计,精通SQL语言,胜任数据库服务器管理与应用工作。获取Oracle数据库管理或SQL Server数据库应用或Windows XP应用认证。 就业方向:企业、政府、社区、各类学校等部门的中、大型数据库管理员。 5图形图像制作 精通国际上流行的图形/图像制作工具(如CorelDraw、Photoshop、Pagemaker等)。获取平面设计师相关的认证。 就业方向:广告制作公司、建筑设计公司、包装装璜设计公司、居室装修公司、出版印刷公司。 6网络构建技术 熟悉网络结构和组网方式,掌握建网方法,能利用工具分析和排除常见网络故障。获取Cisco路由配置或华为网络工程或AMP应用工程师认证。 就业方向:企业、政府、社区、各类学校等网络构建工程师。 7网络系统管理 掌握网络系统管理的基本知识与应用技能,能进行网络系统的安全设置。获取Window2000 Server或TurboLinux TLCE或Cisco路由配置专家认证。 就业方向:企业、政府、社区、各类学校等网络系统管理员。 8多媒体制作 具有多媒体程序设计与多媒体制作策划的能力。基本掌握面向对象程序设计与建模、造型设计、场景设计、分镜头原理等技能。获取多媒体设计师相关的认证。 就业方向:多媒体设计与制作公司、动画美术制作出版公司、广告制作公司。 9计算机办公应用 精通办公自动化应用与管理,熟悉服务器的安装、管理和维护,基于应用服务器的相关服务和软件系统,具备对服务器的网络安全设置、邮件、网页发布、FTP、OA、BBS等系统的应用和维护能力。 就业方向:企业、政府、社区、各类学校等系统管理

       替换对话框部件

替换对话框部件为应用程序提供替换对话框 如图 它包括查找对话框的所有功能 此外还允许使用者更换被选中的字符串 FindText 属性是应用程序需查找的字符串 ReplaceText属性是被选中字符的替换字符串 Options 属性决定对话框的显示方式 其值如表 所示

与查找对话框一样 替换对话框亦有OnFind 事件 用户输入查找字符串并按FindNext按钮时 发生OnFind 事件 用户选择Replace 或ReplacAll 时 对话框发生OnRelpace事件 要替换的字符串存入ReplaceText属性中 要编写相应的代码以支持替换功能

表 替换对话框的Options属性的取值及含义

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  取值                          含义

────────────────────────────────────────

frRelpace          如果是真值 应用程序将ReplaceText 属性中的字符串替换FindText属性中的字符串

frReplacAll        如果是真值 应用程序将ReplaceText属性中的字符串替换 查找到的所有FindText属性中的字符串

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

例程中TEditForm Replace方法响应OnReplace事件 Replace方法首先判断控制中被选中字符串是否与替换字符串相等 如果不等则进行替换 而后根据Options中的方式循环进行查找替换 直至无匹配字符串为止 其代码如下

procedure TEditForm Replace(Sender: TObject)

var

Found: Boolean;

begin

with ReplaceDialog do

begin

if AnsiCompareText(Memo SelText FindText) = then

Memo SelText := ReplaceText;

Found := SearchMemo(Memo FindText Options)

while Found and (frReplaceAll in Options) do

begin

Memo SelText := ReplaceText;

Found := SearchMemo(Memo FindText Options)

end;

if (not Found) and (frReplace in Options) then

ShowMessage( Cannot find + FindText + )

end;

end;

打开对话框部件

打开对话框部件为应用程序显示打开对话框 使用Execute方法可显示打开对话框用户通过选择文件类型下拉框中的文件类型 可以确定显示在文件列表中的文件 例如 如果用户选择 txt文件类型 那么只有在当前目录下的文本文件才会显示在文件列表中 文件扩展名通常也称为过滤器

打开对话框包含一个Filters(过滤器)的属性 它可确定文件类型和在文件类型下拉框中的顺序 应用程序可以为打开对话框定义多个过滤器 对话框的FilterIndex 属性可以决定哪个过滤器是文件类型下拉框中的缺省过滤器 如FilterIndex等于 表示程序运行时出现在文件类型下拉框的过滤器是第 个过滤器

例程中关于文件打开的代码如下

procedure TEditForm Open/Click(Sender : TObject)

begin

if OpenDialog/ Execult then

begin

Open(Open Dialog/ FileName)

end

end;

打开 保存对话框中的Options属性值见表

表 打开 保存对话框的Options属性取值及含义

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

           值                   含义

──────────────────────────────────────

ofAllowMultiSelect     如果是真值 则允许在文件名列表中选择多个文件

ofCreatePrompt        如果是真值 当用户在文件编辑框中输入一不存在的文件名 并选择OK按钮 则会出现消息框 提示用户此文件不存在并询问是否以此文件名创建一新文件

ofExiengronDifferent 如果是真值 从对话框中返回的文件扩展名将不同于缺省扩展名 其值存入DefaultExt属性中

ofFileMustExist         如果是真值 当用户在文件编辑框中输入一个不存在的文件名时 并选择OK按钮 则会出现一消息框提示用户此文件不存 并询问是否输入了正确的路径和文件名

ofNoChangeDir        如果是真值 当前目录将设置成对话框第一次出现的目录 并忽略任何目录改变

ofOverWritePrompt  如果是真值 当用户试图保存一个已存在的文件时 将出现一消息框 提示用户此文件已存在 并询问是否覆盖

ofPathMastExit         如果是真值 用户在文件名编辑框只能输入有效路径名 否则出现消息框 提示用户路径无效

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

表 打开 保存对话框中的Options属性取值及含义

文件保存对话框与打开对话框类似 如图 它的Option属性见上表 例程在保存文件前先对文件进行读写判断 如果文件是只读文件或未指定文件名的新文件 则程序对文件不保存 否则备份文件 代码如下

procedure TEditForm Save Click(Sender: TObject)

procedure CreateBackup(const Filename: string)

var

BackupFilename: string;

begin

BackupFilename := ChangeFileExt(Filename BackupExt)

DeleteFile(BackupFilename)

RenameFile(Filename BackupFilename)

end;

function IsReadOnly(const Filename: string) Boolean;

begin

Result := Boolean(FileGetAttr(Filename) and faReadOnly)

if Result then MessageDlg(Format( %s is read only

[ExtractFilename(Filename)]) mtWarning [mbOK] )

end;

begin

if (Filename = ) or IsReadOnly(Filename) then

SaveAs Click(Sender)

else

begin

CreateBackup(Filename)

Memo Lines SaveToFile(Filename)

Memo Modified := False;

end;

end;

其中CreateBackup过程用以改变需备份文件的扩展名 IsReadOnly 用以判断文件属性

lishixinzhi/Article/program/Delphi/201311/25250

增加字段部件

字段编辑器Fields Editor中的Add Fields菜单项用于向数据集部件中增加字段部件的 单击Add Fields菜单项时便会打开增加字段部件对话框 如图 所示 Available Fields列表框中显示出数据集部件TTable或TQuery中当前可以用于创建永久字段部件的全部的字段 也就是说Available Fields列表框中显示字段是数据库表中实际存在的字段 而且还没有为这些字段创建相应的永久性的字段部件 在缺省状态下所有的字段都被选择用于创建相应的永久性的字段部件 用鼠标单击其中的字段名可以有选择地创建其相应的永久性的字段部件 选择好有关的字段名之后 单击OK按钮便可以创建永久性的字段部件

字段编辑器的增加字段部件对话框

删除字段部件

用字段编辑器Fields Editor为数据集部件创建好的字段部件都会显示在字段编辑器的Fields列表框中 如果用户认为其中的一些字段部件不合适或不再需要时 可以单击这些不需要的字段部件 然后单击鼠标右键d出一佣d出式菜单 从d出式菜单中选择Delete菜单项 便可删除相应的字段部件 如果在d出式菜单中单击Select All菜单项 然后选择Delete菜单项 这样会删除已创建好的所有的字段部件 某一个字段部件被删除以后 通过单击Add Fields菜单项可以重新创建 只是先前为该字段部件设定的一些属性将不复存在

定义新的字段部件

字段编辑器Fields Editor中的d出式菜单中New Fields菜单项是用来为数据集部件TTable或TQuery创建用于显示目的的新的字段部件 我们可以用它来为数据库表中实际存在的字段创建新的字段部件(如改变字段的数据类型 使它的字段值被显示时不再需有关的类型转换) 但是我们使用New Fields菜单项创建新的字段部件主要是创建计算字段 计算字段并不与数据库表中实际存在的字段对应 它的字段值是根据表中其它的字段值计算而来的 具体的计算表达式由用户为TTable部件或TQuery部件的OnCalCFields事件编写程序代码时决定

定义(创建)计算字段的过程如下

单击字段编辑器中的New Fields菜单项 定义字段对话框如图 所示

在FieldName编辑框中输入新字段部件的名字 或者从下拉式列表框中选择一个已存在的字段部件的名字

在FieldType列表框中为新字段部件选择一个字段类型

单击Calculated检查框 确认定义的新字段部件是计算字段

单击ok按钮 创建上述定义的计算字段部件 此时该字段部件的名字会自动地加入到字段编辑中的Fields列表框中

创建新的计算字段

新的计算字段创建好了之后 它是没有任何字段值的 我们必须要编写相应的程序代码 根据数据库表中实际存在的字段的字段值为计算字段的宝定义字段值 我们为计算字段所在数据集部件的OnCalcFields事件编写代码来为计算字段赋值 其步骤如下

选择数据集部件TTable或TQuery

单击数据集部件的事件页

双击OnCalcFields事件为TTable或TQuery部件编写事件处理过程

TReport部件及其应用

在一般的数据库应用程序中都包含着为最终用户提供输出报表的功能 使用Delphi开发数据库应用程序时 可以使用一个叫TReport的部件来执行报表功能的 报表的具体格式和内容是由Delphi提供的一个专用报表生成工具ReprotSmith创建的 它报表的具体格式和内容生成一个报表文件 然后为TReport部件设置相应的属性参数 由TReport部件执行报表功能

我们可以在设计阶段双击TReport部件 调用ReportSimith工具或者在Delphi程序组内双击ReportSmith图标来调用ReportSmith工具来创建一个报表文件 具体的 *** 作步骤和设计方法请参看ReportSimth工具的使用说明

我们在使用TReport部件执行报表功能时 要设置TReport部件的一些的一些属性 这些属性是

ReportName属性 说明报表文件的名字 就是用ReportSmith创建的报表文件

ReportDir属性 说明报表文件所在的途径名

PreView属性 这是一个布尔型属性 若它的值为True 那么在执行报表功能时 只是在屏幕上显示报表 若它的值为False 则报表内容将在缺省的打印机打印出来

AutoUnload属性 布尔型属性 它的值为True时 在执行完一个报表功能后 自动地从内存中卸出ReportSmith工具 它的值为False时 在运行完一个报表功能后 不从内存中卸出ReportSmith工具 一般情况下 如果应用程序只有一个报表或者只有较少的报表要输出时 应设置AutoUnload属性为True 如果应用程序一次要输出多个报表 那么要应设置AutoUnload属性为False

InitialValues属性 这是一个字符串类型的属性 它是说明报表文件中使用的变量 每一条说明一个变量 如

ReportVAR := Value;

要详细了解创建和使用报表变量的过程请参看创建报表一节

TReport部件要真正执行报表功能以输出一个报表需要调用Run方法 如下所示

Report Run;

TReport部件所具有的重要方法如表 所示

表 TReport部件的方法

━━━━━━━━━━━━━━━━━━━━━━━━━━━━

方法 功 能

────────────────────────────

Run 执行报表功能 输出报表

RunMacro 发送一个宏命令给Reportimith工具

Connect 预先连接报表文件和数据库 在输出报表时不需要登录到数据库

SetVariable 改变说明的报表变量

ReCalcReport 当报表变量改变以后 重新输出报表

━━━━━━━━━━━━━━━━━━━━━━━━━━━━

还有一些其他的数据访问部件如TBatchMove部件 它主要用在两个数据库表之间移动或拷贝帆数据记录 具体的使用请参看本地SQL服务器的使用

应用举例 多个窗体显示同一个数据库表

在应用当中 我们常常需要以不同的视图显示同一个数据库表中的内容 例如要在两窗体中同时显示一个数据库表中一个记录的不同字段时 我们必须要想办法使两个窗体中的数据浏览部件同步地显示数据库表中的同一条记录的不同字段的值 要想做到以不同的视图显示同一个数据库表中的记录 下面两条规则是很重要的

● 多个TDataSource部件能够同时访问同一个数据集部件

● 在多个窗体中显示同一个表时 必须为每个窗体设置一个TDataSource部件 只须为其中的一个窗体设置一个TTable部件

例如 如果想在窗体Form 和Form 中同时显示一个数据库表的记录 最简单可行的办法是 为Form 和Form 各设置一个TDataSource部件叫DataSource DataSource 并在Form 中设置一个TTable部件Table 连接Form 中的Datasource 和Table 在程序运行过程中设置Form 中的DataSource 的DataSet属性为Form 中的Table 代码如下

Format DataSource Dataset := Form Table ;

这样 当Table 被打开时 两个窗体中便可以同步地显示数据库表中的同一条记录了

一个名叫OForms DPR的例子在C:\Delphi\DEMos\DB\TwoForms中(如果Delphi安装在其它的磁盘驱动器中 从相应的磁盘驱动器中可以找到该例子) 它演示了在两个窗体中显示同一个数据库表的记录 应用程序在第一个窗体中打开Contry DB表 并在窗体中显示Name Captial和Continent字段 在第二个窗体中显示Area和Population字段 在第一个窗体中有一个按钮用于打开第二个窗体 两个窗体中都有TDBNavigator部件 用于记录的导航

返回目录 DELPHI基础教程

       编辑推荐

       Java程序设计培训视频教程

       J EE高级框架实战培训视频教程

Visual C++音频/视频技术开发与实战

Oracle索引技术

ORACLE G数据库开发优化指南

Java程序性能优化 让你的Java程序更快 更稳定

C嵌入式编程设计模式

Android游戏开发实践指南

lishixinzhi/Article/program/Delphi/201311/25156

以上就是关于如何使用Delphi设计强大的服务器程序[1]全部的内容,包括:如何使用Delphi设计强大的服务器程序[1]、DELPHI基础教程:数据访问部件的应用及编程(三)[2]、delphi程序设计等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9469383.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存