① 地质取样班报数字化面向对象开发及其应用
盛堰 吴庐山 廖开训
第一作者简介:盛堰,男,1973年生,工程师,主要从海洋地质调查工作,先后参加105⁃15大洋调查、天然气水合物资源调查工作,参加了863、126、大洋课题等课题研究。
(广州海洋地质调查局 广州 510760)
摘要 海洋地质调查中,传统的取样班报记录方式越来越不适应数字化技术的发展,本文就地质取样班报数字化技术进行探讨,并介绍了采用delphi语言开发的地质取样数字班报系统的结构、功能特点、系统配置、操作方法及其在海洋地质调查中的应用。
关键词 海洋地质调查 地质取样班报 数字化 模块 软件开发
1 前言
随着计算机信息技术的发展,海洋地质调查也步入了数字化的时代,地质调查野外资料采集设备随着数字化的步伐日新月异,资料处理、资料归档都已经实现数字化,但是野外地质取样原始资料采集环节中占有重要地位的现场记录班报却在数字化的大潮中止步不前。
一直以来,传统的海上野外资料采集班报都是使用纸质班报,手工记录的工作方式。随着数字化技术的发展手写的纸质班报越来越显示出其局限性,不仅现场记录效率低,易出错,不易保存,还会因资料管理环节分散,显得比较混乱、烦琐,容易造成野外原始资料的丢失,更重要的是手写的模拟记录难以很好地为数据后处理、成图和资料解释服务。
地质取样数字班报系统是面向对象的可视化系统,符合现行调查规范,能快速准确地全面输入和输出现场地质调查数据信息,不仅使现场输入更准确、更快速、更简便,而且能有效地服务于进一步的解释和研究工作,利用数字化技术的优势,提高了地质样品研究工作的效率和技术水平,有效地解决了海洋地质调查中海上地质取样记录班报的数字化问题,提高了野外数据采集的数字化水平,具有重要的实际意义和应用价值。软件兼容性好,性能稳定,界面友好,操作简便,功能完善,已经在“海洋四号”科学考察船的DY105⁃15航次大洋调查、南海天然气水合物调查等大型项目中使用,效果良好。
2 系统的总体结构
2.1 系统总体结构模块图
系统包括“导航数据导入”、“数据录入”、“数码图片调用”、“数据查询与统计”、“数据导出”、“成果打印”、“公共信息管理”、“系统信息维护”、“帮助”等九个主要功能模块。软件采用可视化操作,界面友好(见图1)。
图1 系统总体结构模块图
Fig.1 System construction mole chart
各模块既相对独立,又密切联系,所有数据都由后台数据库进行统一管理(马恒,1999)。研究内容主要包括:位置、时间数据获取;图像数据传输处理;样品数字化图像的截取和导入;数据录入、样品描述可视化输入;数据查询方法及优化;数据导出与导入处理;格式化报表输出与打印;数据的网络共享与系统集成等。
2.2 系统流程图
数字班报系统操作流程图(图2)。
3 系统的特征及主要功能
3.1 系统特点
基于Windows xp操作系统平台开发,可兼容Windows98/2000/2003Server操作系统,采用Delphi 开发(赛奎春等,2004),后台数据库为 sql Server 关系型数据库(Ron Soukup,2001),使用SQL结构化查询语言进行数据查询与管理,班报打印报表利用RAVE报表生成技术,并编程实现图片实时拍摄硬件接口技术。系统数据库采用多层安全性,登录安全认证直接集成到操作系统的登录安全中,启动操作系统后数据库自动运行,不需要再手动登录数据库。使用用户界面友好,操作简单,使用方便。系统强调和用户的交互,预留功能接口便于系统的后续开发。
图2 系统流程框图
Fig.2 Flow chart of system
3.2 系统的主要功能
3.2.1 站位数据录入
每个地质取样站位都要生产一页新的班报,如何快速、简便、准确无误的录入班报原始数据,是整个数字班报系统的重要组成部分。数据录入包括公共信息录入和站位信息录入,其中公共信息包括:用户信息(如用户的增加、删除、密码更改、各个用户的权限设置等),通用信息(如颜色、气象海况、调查船、航次、ISO编号、定位仪器设置等,这些信息在所有类型的数字班报中都是通用的,他们的更改将影响全部班报页的可选项)。站位信息录入是数据录入的重点(见图3)。
在该界面中,顶端为工具按钮条,工具按钮条中包含增加、编辑、删除、保存、取消、最前、前页、后页、最后、查找、打印、导出、关闭等13个按钮,点击相应的按钮就可以执行其对应的功能。
在海洋地质班报数据录入时,所有数据输入都是“所见即所得”的可视化交互方式(图3为南海水合物项目中某站位的班报数据),有些数据不用手动输入,直接用鼠标点击输入框旁边的下拉箭头,从提供的选择项中选择即可,如上图中的“调查船”、“采用工具”、“定位仪器”、“地形特征”等。其中日期的输入直接点击顶部的时间下拉箭头,会出现一个系统日历,点击里面的日期就会自动输入到班报中,并自动计算出对应的儒略历。所有数据输入都支持复制(快捷键:ctrl+c)和粘贴功能(快捷键:ctrl+v)功能,即新班报中的内容可从其他班报中复制得到或将班报内容复制到其他文档中。
图3 地质取样班报录入主界面
Fig.3 Main input interface of geological sampling log
3.2.2 导航定位数据提取
在站位原始数据输入过程中,导航定位数据的输入是最需要细心的,因为站位定位数据精度高,输入时很容易出错,在数字班报中导航定位数据可直接从导航原始数据中智能读取,有效地克服了人为的错误,既准确又快速。在图3界面中点击“时间经纬度提取”按钮即可进入导航定位数据提取界面(见图4)。
图4 导航经纬度、时间数据提取界面
Fig.4 Long.,Lat.and time get interface
站位导航定位数据提取是利用网络技术,通过网络共享直接调用原始的导航定位文件,对文件记录的数据进行解编得到的,数据非常准确。具体操作步骤为:点击“打开文件”按钮,打开网上邻居中导航定位原始记录文件,原始记录文件的内容将自动显示出来,根据站位下水、到底的时间用鼠标点击相应的行,解编出来的时间和经纬度数据自动显示在下面对应的空白框中,先用鼠标选择要提取的内容(时间或经纬度),再点击“提取”按钮,就自动将对应的数据提取到当前班报页中。在经纬度提取和显示的时候,可以根据需要选择经纬度的显示和记录格式:“度”,“度分”或“度分秒”。
3.2.3 站位数据资料查询
站位数据录入后,在后处理、质量控制、错误修改等很多情况下都需要对班报数据进行查询,地质取样数字班报系统提供方便的查询功能。在图3所示的界面中点击“查找”按钮即可进入查询界面(见图5)。
查询界面中顶部是操作按钮,中上部分是查询条件,下面的表格显示查询结果,输入或选择你的查询条件后按顶部的“查询”按钮即可在下面的空白表中列出满足条件的站位。查询条件可以是单个或多个。例如:在日期区间中选择2004年1月1日至2004年12月30日在调查船框中输入“海洋四号”,在采样工具中选择“PC”,其它条件空,按“查询”按钮,就可以在列表框中看到“海洋四号”船在2004年采集的所有大型重力活塞站位,最下面的状态栏中显示有满足条件的站位总数。也可以精确查找某个站位,如:在“站位名”框中输入“HD315PC”,然后按“查询”按钮,就可在数据库中查询出“HD315PC”站位;除此之外,还支持模糊查询,在查询条件中如果输入的是模糊信息,则查询结果就是满足查询条件的所有站位,如:在“站位名”框中输入“H”则可查询到所有站位名以H开头的站位。
图5 数据查询主界面
Fig.5 Data query interface
要看查询站位的具体内容,只需用鼠标点击查询界面下部表中该站位所在的行,在主输入界面中立即就显示出了所选站位的详细资料,如图5中用鼠标点击“HD350PC”所在的行,则对应的主界面(图3)中就立即显示“HD350PC”站位的详细内容。
3.2.4 站位数据资料导出
数字班报系统具有友好的数据智能导出功能,在图3 所示的班报输入主界面中点击“导出”按钮,即可进入数据导出界面(见图6)。
数据智能导出功能可以将海洋地质数字班报中满足条件的站位数据提取出来,供后续资料统计,数据处理,以及供Sufer、AutoCAD等成图软件使用,在导出界面中分为工具按钮、选择条件、导出内容、导出格式等几个部分组成,“选择条件”的输入方法和查询界面中的输入方法一样;在“导出内容”部分可以根据需要选择要导出的内容(如:到底时间,到底经纬度,水深等),选择时只需用鼠标在相应内容前面的“选择框”中点击打勾就可以了;选择需要导出的文件格式,excel或txt格式。选择条件、导出内容及导出文件格式选定后,点击“预览”按钮就可以在下面的空白列表中,预览导出的具体内容,确定无误后用鼠标点击“导出”按钮,就可以将符合条件的站位中你需要的内容导出保存成Excel格式文件或txt格式文件。
图6 数据导出界面
Fig.6 Data export interface
3.2.5 实时数码图片截取和载入
值得一提的是,地质取样数字班报系统支持视频实时图片截取,支持数码图片载入功能,既可以载入数码相机拍摄的数码照片,也可以载入导航计算机采集的站位航迹图,这是传统班报无法比拟的。
截取的图片可以保存为bmp格式的图片,在截取时必须安装视频硬件(如:摄像头等),实际应用较少,这里不再详细介绍。载入的数码图片可以是bmp格式或jpg格式,如图7中要导入MP5D38站位的数码图片,在主界面的下方点击“站位照片”选单,在界面中用鼠标点击“载入”按钮,将弹出“图片文件对话框”,找到对应的数码照片文件并确定,就可以将该站位的数码图片导入到班报中。航迹图的载入和数码照片的导入方法一样,不同的是航迹图是由导航计算机截取该站位的航迹得到,在载入前必须先在导航计算机中截取航迹图。导入的数码照片和航迹图后可以保存到该站位的班报资料中。
图7 数码图片调用(左:站位数码图,右:站位航迹图)
Fig.7 Digital picture Load interface(L:digital picture of station,R:navigation track)
4 系统分析及实现
系统开发使用原型法(Rapid Prototyping)即以少量代价快速地构造一个可执行的软件系统模型;系统采用客户/服务器两层模型(Client/Server)开发面向对象的数据库应用软件。
数据查询使用结构化查询语言(Structured Query Language,简称SQL),基本格式为:
SELECT[DISTINCT]<columns to be chosen,optionally eliminating plicate rows from result set>
[FROM]<table names>
[JION]<if multiple tables,declare how they relate to each other >
[WHERE]<criteria that must be true for a row to be each other>
[GROUP BY]<columns for grouping aggregate functions>
[HAVING]<criteria that must be met for aggregate functions >
在程序中采用异常处理机制,保证了软件的正常运行。
5 结论与建议
地质取样数字班报系统直接从导航系统提取站位坐标,使班报中站位的经纬度更加准确无误;方便的数据查询和数据导出功能可以很好的为数据后处理、成图和资料解释服务,工作效率也大大提高;站位数码图片和航迹图的载入使班报记录的内容更加丰富,具有传统班报无法比拟的优越性。地质取样数字班报系统解决了海洋地质调查中地质取样班报的数字化问题,使传统的野外地质取样班报记录朝数字化方向迈出了坚实的步伐,也将对野外采集环节班报记录数字化产生较大的促进作用。建议在今后的使用中不断改进和完善,使其更好地为海洋地质调查服务。
主要参考文献
广州海洋地质调查局ISO9001技术规范
国家技术监督局.1993.海洋调查规范.海洋地质地球物理调查(GB/T 13909⁃92)
马恒.1999.关系数据库理论.北京:清华大学出版社
赛奎春,陈紫鸿等.2004.Delphi数据库开发关键技术与实例应用.北京:人民邮电出版社
施伯乐.1997.高级程序员软件知识.北京:清华大学出版社
Ron Soukup着,姜鸿英等译.2001.SQL Server 7.0技术内幕.北京:清华大学出版社
Steve Teixera,Xavier Pacheco着,徐新华等译.2000.Delphi 6.0开发大全.北京:人民邮电出版社
Object Oriented Development and Application for Digital Geological Sampling Log
Sheng Yan Wu Lushan Liao Kaixun
(Guangzhou Marine Geological Survey,Guangzhou,510760)
Abstract:The digital technology has been more and more applied in the field of marine geological survey,the digitized geological sampling logs are needed in most of survey subjects.It is discussed the digital technology application of geological sampling log in this paper.A software for digital geological sampling log has been developed by Delphi,and the structure,function,specialty,operation method of this software are introced.Satisfactory results of application of this digitized geological sampling log are received in the field survey work.
Key words:marine geological survey geological sampling log digital,mole the development of software
② 怎么用delphi7 编写数据库程序
在delphi中有一批数据库专用的控件,比如ADO类的,可以直接用于数据库开发,你可以先用一个Access数据库自己进行一下测试。
首先在窗体上放一个ADOConnection1控制,用于与Access数据库进行连接,连接字符串为:
ADOConnection1.ADOC_Data.ConnectionString:='provider=Microsoft.Jet.OLEDB.4.0;'
+'user ID=Admin;'
//+'Data Source='+ExtractFilePath(Application.ExeName)+'MyRecord.mdb;'
+'Data Source='+MyDataBaseName+';'
+'Mode=Share Deny None;Extended Properties="";'
+'Jet OLEDB:System database="";'
+'Jet OLEDB:Registry Path="";'
+'Jet OLEDB:Database Password="123456;' //数据库密码
+'Jet OLEDB:Engine Type=5;'
+'Jet OLEDB:Database Locking Mode=1;'
+'Jet OLEDB:Global Partial Bulk Ops=2;'
+'Jet OLEDB:Global Bulk Transactions=1;'
+'Jet OLEDB:New Database Password="";'
+'Jet OLEDB:Create System Database=False;'
+'Jet OLEDB:Encrypt Database=False;'
+'Jet OLEDB:Don'+''''+'t Copy Locale on Compact=False;'
+'Jet OLEDB:Compact Without Replica Repair=False;'
+'Jet OLEDB:SFP=False';
DM.ADOC_Data.LoginPrompt:=False;
再放一个ADOQuery1控制,用于操作数据表,将它的Connection属性设置为ADOConnection1。或用语句实现:ADOQuery1.Connection:=ADOConnection1;
然后再分别放置一个DataSource1和一个DBGrid1控件,
将DataSource1的DataSet属性设置为ADOQuery1。
将DBGrid1的DataSource属性设置为DataSource1。
这时就可以通过ADOQuery1来执行SQL语句来查询数据表,并通过DBGrid1显示出来了。
③ delphi新手,寻求delphi操作数据库实例,各位分享下 谢谢
LZ看看这里是不是你想要的。网上找的。希望对你有所帮助
Delphi,是Windows平台下着名的快速应用程序开发工具(Rapid Application Development,简称RAD)。它的前身,即是DOS时代盛行一时的“BorlandTurbo Pascal”,最早的版本由美国Borland(宝兰)公司于1995年开发。主创者为Anders Hejlsberg。经过数年的发展,此产品也转移至Embarcadero公司旗下。Delphi是一个集成开发环境(IDE),使用的核心是由传统Pascal语言发展而来的Object Pascal,以图形用户界面为开发环境,透过IDE、VCL工具与编译器,配合连结数据库的功能,构成一个以面向对象程序设计为中心的应用程序开发工具。
参考资料:http://xueshu..com/s?wd=delphi操作数据库实例&tn=SE_xueshu_c1gjeupa&ie=utf-8&sc_hit=1
④ Delphi数据库系统开发完全手册的内容简介
本书分三大部分,第一部分为Delphi编程篇,主要介绍使用Delphi开发数据库系统必须掌握的技术,这些技术最大限度地与实际项目案例相结合。第二部分为SQL Server应用篇,主要介绍SQL Server数据库安装、管理、开发及维护的相关技术。第三部分为实例开发篇,精选了当前应用最广泛的数据库管理系统,内容包括定制自己的工作环境、物流配送管理系统、仓库管理系统、销售管理系统、工资管理系统、人事管理系统、客户管理系统、固定资产管理系统和财务凭证管理系统。这些系统即可以独立使用,也可作为企业综合管理系统的重要组成部分。本书附有配套光盘。光盘提供了书中所有案例的全部源代码,所有源代码都经过精心调试,在Windows XP和Windows 2000下全部测试通过,保证能够正常运行。本书内容精练、重点突出、实例丰富,是各级程序开发人员必备的和不可多得的参考书,本书也非常适合大中专院校师生学习参考。 图书目录 实例开发篇第15章定制自己的工作环境25315.1代码编辑器常规选项设置25315.2代码编辑器源文件选项设置25515.3代码编辑器显示状态设置26115.4语法着色26215.5代码智能选项设置26415.6环境选项参数设置26515.7窗体和组件设置26715.8个性化开发环境设置268第16章Delphi 7在物流配送中的应用27116.1物流配送管理系统概述27116.1.1开发背景27116.1.2运行环境27116.2系统调查27116.2.1手工流程27116.2.2需求分析27216.3系统分析27216.3.1系统功能27216.3.2业务流程27316.4数据库设计27316.4.1数据库概念设计27316.4.2数据库逻辑结构设计27316.5处理过程分析27716.5.1配送审核处理过程分析27716.5.2配送开票处理过程分析27716.6主程序设计27816.6.1实现目标27816.6.2建立主窗体27916.6.3程序相关代码28016.7数据模块设计28116.8程序设计与编码28216.8.1配送申请管理设计28216.8.2配送审核管理设计28816.8.3配送开票管理设计29116.8.4配送查询管理设计29616.8.5系统登录程序设计29816.9疑难问题分析解决30016.9.1如何在TImageList中存储大图标30016.9.2如何实现动态查询30116.9.3如何去除重复行30116.9.4动态创建窗体30216.9.5如何实现配送开票查询30316.9.6如何将表格中某些列设置为只读30416.10程序调试及错误处理30516.10.1程序调试30516.10.2异常处理30716.11程序设计清单30816.12技术、经验总结30816.12.1技术总结30816.12.2经验总结30916.13程序的打包与发行309第17章Delphi 7在仓库中的应用31217.1仓库管理系统概述31217.1.1仓库管理系统简介31217.1.2系统功能描述31217.2系统调查31317.3需求分析31317.4系统设计31417.4.1系统流程图31417.4.2业务流程31517.5数据库设计31517.5.1数据库概念设计31517.5.2数据库逻辑结构设计31517.5.3数据字典31717.6处理过程分析31717.6.1商品入库处理过程分析31717.6.2商品出库处理过程分析31817.7主窗体设计31817.8数据模块设计31917.9程序设计与编码31917.9.1商品入库管理设计31917.9.2商品出库管理设计32617.9.3商品库存查询设计32817.10疑难问题分析解决32917.10.1使用TADODataSet组件时应该注意的问题32917.10.2双击DBGrid表格,如何显示当条数据详细信息33017.10.3如何判断数据库中是否有相同字段的数据33117.10.4判断进价、批发价、零售价是否输入合法33217.11程序测试常见错误解决33217.12程序设计清单33517.13技术、经验总结33617.13.1技术总结33617.13.2经验总结336第18章Delphi在销售中的应用33718.1销售管理系统概述33718.1.1开发背景33718.1.2销售管理系统简介33718.1.3系统功能描述33718.2系统分析33818.2.1系统规划33818.2.2系统流程图33918.2.3业务流程33918.3数据库设计33918.3.1数据库概念设计33918.3.2数据库逻辑结构设计34018.4主窗体设计34118.5状态栏设计34218.6数据模块设计34318.7销售报表设计34318.8程序设计与编码34618.8.1商品销售管理设计34618.8.2销售退货管理设计35218.8.3客户订货管理设计35518.8.4销售查询管理设计35818.9疑难问题分析解决36018.9.1如何防止单击TBitBtn按钮时关闭模式窗体36018.9.2使用非数据控制组件显示和浏览数据36118.9.3在编辑框中只允许输入数字36118.9.4按Enter键控制焦点的移动36118.9.5在销售商品时,实现订单销售36218.9.6如何实现超期应收款查询36218.10程序设计清单36218.11技术、经验总结36318.11.1技术总结36318.11.2经验总结36418.12系统的编译与发行364第19章Delphi在工资中的应用36519.1工资管理系统概述36519.1.1系统任务36519.1.2设计目标36519.2需求分析36519.2.1业务调查36519.2.2系统规划36619.3数据库设计36619.3.1数据库概念设计36619.3.2数据库逻辑结构设计36719.3.3数据字典36819.4处理过程分析36919.4.1工资发放处理过程分析36919.4.2工资调整处理过程分析36919.5主窗体设计36919.6菜单设计37019.7数据模块设计37119.8窗体模板设计37119.9程序设计与编码37219.9.1员工基本工资管理设计37219.9.2员工浮动工资管理设计37719.9.3工资发放管理设计37919.9.4员工工资调整管理设计38219.10疑难问题分析解决38619.10.1使用TRVSystem组件编写报表38619.10.2如何控制表格中焦点的移动38719.10.3编写简洁、灵活的代码38719.10.4如何限制表格中某列的输入38819.10.5员工工资核算38819.10.6查询上月余额38919.11软件测试38919.12程序设计清单39019.13技术、经验总结39019.13.1创建视图39019.13.2经验总结392第20章Delphi在人事中的应用39320.1人事管理系统概述39320.1.1开发背景及意义39320.1.2系统目标39320.2系统分析39320.2.1系统规划39320.2.2系统流程图39520.3数据库设计39520.3.1数据库概念设计39520.3.2数据库逻辑结构设计39520.4处理过程分析39620.4.1人员档案处理过程分析39620.4.2人员调动处理过程分析39720.5主窗体设计39720.6数据模块设计39820.7程序设计与编码39820.7.1员工信息管理设计39820.7.2添加人员档案程序设计39920.7.3修改人员档案程序设计40220.7.4删除人员档案管理设计40720.7.5员工调动管理设计40820.8疑难问题分析解决0.8.1如何将数据表中的字段值添加到下拉列表框中0.8.2如何防止用户改变下拉列表框中的当前数据41220.8.3隐藏窗体的标题栏41320.8.4保存的实现方法探究41320.8.5图片的切换41420.8.6控制按钮是否可用41420.9程序调试与错误处理41520.10程序设计清单41620.11技术、经验总结41720.11.1技术总结41720.11.2经验总结41820.12程序的编译与发行418第21章Delphi在客户中的应用41921.1客户管理系统概述41921.1.1客户管理系统简介41921.1.2系统功能描述41921.2系统分析41921.2.1系统规划41921.2.2系统流程图42121.2.3业务流程42121.3数据库设计42121.3.1数据库概念设计42221.3.2数据库逻辑结构设计42221.4处理过程分析42321.4.1客户基础信息处理过程分析42321.4.2客户信息呼叫处理过程分析42421.5主窗体设计42421.6菜单设计42621.7工具栏设计42721.8数据模块设计42821.9程序设计与编码42921.9.1客户区域管理程序设计42921.9.2客户级别管理程序设计43421.9.3客户基础信息管理程序设计43721.9.4客户信息呼叫管理程序设计44321.9.5客户反馈查询管理程序设计44821.10疑难问题分析解决45121.10.1如何将TDBGrid中的内容居中显示45121.10.2如何更改鼠标指针形状45221.10.3如何在控件失去焦点时进行内容检查45221.10.4如何防止向数据表中插入重复数据45221.10.5在表格中输入商品数量,如何自动计算金额45321.10.6利用掩码编辑控件格式化字符串45321.11程序调试及错误处理45421.12程序设计清单45721.13技术、经验总结45721.13.1技术总结45721.13.2经验总结458第22章Delphi在固定资产中的应用45922.1固定资产管理系统概述45922.1.1开发背景及意义45922.1.2系统目标45922.2系统分析46022.2.1系统规划46022.2.2系统流程图46022.2.3业务流程46122.3数据库设计46122.3.1数据库概念设计46122.3.2数据库逻辑结构设计46122.3.3数据字典46222.4处理过程分析46322.4.1添加固定资产处理过程分析46322.4.2计提折旧处理过程分析46322.5主窗体设计46322.6图像列表设计46422.7数据模块设计46522.8程序设计与编码46622.8.1资产类别程序设计46622.8.2添加固定资产程序设计46722.8.3修改固定资产程序设计47122.8.4计提折旧程序设计47422.8.5数据备份程序设计47822.8.6系统初始化程序设计47922.9疑难问题分析解决48022.9.1如何创建存储过程48022.9.2数据还原的实现48122.9.3查看SQL Server的备份文件48122.9.4利用循环语句清空界面数据48222.9.5固定资产基本概念48222.9.6固定资产计算公式48322.10程序测试48322.11程序设计清单48422.12技术、经验总结48522.12.1技术总结48522.12.2经验总结48622.13系统的编译与发行486第23章Delphi在财务凭证管理系统中的应用487
⑤ 请提供一个简单的DELPHI查询数据库的实例,包括所有操作
1、在窗体上放一个adoquery(adoquery1),datasource(默认为datasource1);
2、在窗体上放一个adoconnection1,也可以不放;
3、设置adoconnection1的connetionstring,提供程序选择“"或者“OracleProviderforOLEDB",下一步,在服务器名称中输入你的oracleSID(需事选配置SID)或者直接输入SID配置信息。用户名称都是TEST.
3、设置Adoquery1的connetion属性为adoconnection1,如果没用adoconnetion,也可以设置adoquery1的connetionstring属性(具体操作和adoconnection1一样),设置Datasource1的DataSet属性为Adoquery1,设置dbgrid(不是GBDRID)的datasource属性为datasource1;
4、双击button1,写代码
Adoquery1.Close;
ADOQuery1.SQL.Text:='select*fromBIAOwhereA='+quotedstr(Trim(Edit1.text));
Adoquery1.Open;
⑥ delphi 7.0中做一个学生信息管理系统 如何制作打印预览包表呢本人菜鸟求大神指点!!
学校学生管理信息系统的简介
学校学生管理信息系统是针对学校人事处的大量业务处理工作而开发的管理软件,是典型的管理信息系统(Management Information System)。它是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,它能够为用户提供充足的信息和快捷的查询手段。能有效的帮助学校和老师掌握学生的情况,为学生提供成绩跟课程方面的查询。功能基本符合根据张波尔老师的要求。
学生用户通过输入学生基本信息、课程基本信息等,由系统自行生成相应的数据以供学生查询,另外人事处的管理用户还可以对这些基本信息进行更新和删除, 学校学生管理信息系统力求给用户方便快捷的途径去管理这些繁琐的数据。
具体系统功能需求描述如下:
(1) 学籍信息管理
每年的大量新生入学,老生毕业都需要处理大量的学生信息。通过这一模块,可以实现学生基本情况的添加、删除、更新。还能查询各个学生的情况,姓名、家庭电话、家庭住址、学号等各个消息
(2) 班级信息管理
实现班级的添加、删除、更新。查询班级的所在系别,辅导员等。
(3)课程信息管理
每个学期都会增加一些新的科目,通过本模块可以轻松的添加以及更新课程。可以根据
学期条件或者班级条件的选择,也可根据课程名、课程号或者班级的选择,并对值的输入,可以看到数据集中显示符合条件的课程数据信息,而且可以根据教工的修改要求进行数据的添加、删除、修改的操作。
该项管理对课程的属性进行了具体化的分类,比如可以分辨是考试科还是考察课,而且根据条件的选择大大得提高了对各学期课程数据的记录操作,很大得帮助了教工们工作效率的提高。
(4)成绩信息管理
本模块实现了成绩的输入、删除、更新。还能查询到平均成绩以及单科最高最低成绩以及个人成绩。把成绩统计这个繁琐的工作简单化,为学生成绩的管理方面提高工作效率。
(5)系统管理
因为本系统是供多人一起使用的,必须对某一些人进行限制。于是设置了管理员,非管理员只能进行查询操作,不能进行更改。
三、学校学生管理信息系统的分析和设计
(1)开发环境的简介
设计平台: DELPHI6.0
Delphi是一个对象导向设计的应用程序语言,是开发数据库前端的优秀工具,它的编程语言简洁明快、组件功能强大和编程环境灵活方便。采用Delphi来开发数据库应用程序具有更大的灵活性和可扩展性。
数据库: Microsoft Access
Access 是关系数据库开发工具,数据库能汇集各种信息以供查询、存储和检索。Access 的优点在于它能使用数据表示图或自定义窗体收集信息。数据表示图提供了一种类似于 Excel 的电子表格,可以使数据库一目了然。另外,Access 允许创建自定义报表用于打印或输出数据库中的信息。Access也提供了数据存储库,可以使用桌面数据库文件把数据库文件置于网络文件服务器,与其他网络用户共享数据库。Access 是一种关系数据库工具,关系数据库是已开发的最通用的数据库之一。Access 多用于中小型企业来设计中小型数据库,一般的学校教务系统的数据库用Access 来设计完全能达到要求。由于考虑到本系统是应用在单机系统上,只建立起一个数据库。
数据库访问方式:ADO
ADO(Active Data Objects)实际是一种提供访问各种数据类型 的连接机制。ADO设计为一种极简单的格式,通过ODBC的方法同数据库接口。可以使用任何一种ODBC数据源,即不止适合于SQL Server、Oracle、Access 等数据库应用程序,也适合于Excel表格、文本文件、图形文件和无格式的数据文件。ADO是基于OLE-DB之上的技术,因此ADO通过其内部的属性和方法提供统一的数据访问接口方法。其主要优点是易于使用、高速度、低内存支出和占用磁盘空间较少。
(2)学校学生管理信息系统数据库设计
由于考虑到本系统是应用在单机系统上,另外根据学校人员规模,我只建立起一个数据库,在此数据库基础上建立起如下八个基本表:
学生:学号,姓名,出生年月,性别,籍贯,联系地址,联系电话,班级
班级:系名,班级,主要教室,辅导员,班长
系表:系名,系办公室,联系电话
课程表:课程号,课程号,班级,类别,学时,学名
平均成绩表:班级,学号,姓名,平均成绩
单科成绩表:学号,姓名,课程表,课程名,成绩
选课表:班级,课程号,学期
用户名:用户,密码
(3)窗体设计:
班级管理(banjigl.dfm)
班级查询(banjicx.dfm)
学籍管理(xuejigl.dfm)
学籍查询(xuejicha.dfm)
课程管理(kechenggl.dfm)
课程查询(kechengcha.dfm)
成绩管理(chengjigl.dfm)
成绩查询(chengjicha.dfm)
(4)系统流程图(Data Flow Diagram):
(5)数据库概念结构设计
:
(6)数据库逻辑结构设计
学生基本情况表:
字段名 数据类型 是否可空 说明
班级 文本 否 外关键字
学号 文本 否 主关键字
姓名 文本 否 无
性别 文本 否 无
出生年月 日期 否 无
籍贯 文本 否 无
联系电话 文本 是 无
联系地址 文本 是 无
班级情况表:
系名 文本 否 外关键字
班级 文本 否 关键字
主要教室 文本 是 无
辅导员 文本 是 无
系名 文本 否 外关键字
班级 文本 否 关键字
系表:
系名 文本 否 关键字
系办公室 文本 是 无
联系电话 文本 是 无
课程表:
课程号 文本 否 关键字
课程名 文本 否 无
班级 文本 是 外关键字
类别 文本 是 无
平均成绩表:
班级 文本 否 外关键字
学号 文本 否 关键字
姓名 文本 是 无
平均成绩 长整型 是 无
单科成绩表:
学号 文本 否 关键字
姓名 文本 否 无
课程号 文本 否 外关键字
课程名 文本 否 无
成绩 长整型 是 无
班级选课表:
班级 文本 否 组合关键字
课程号 文本 否 组合关键字
课程名 文本 是 无
学期 文本 否 组合关键字
(6)课程管理部分的代码:
选课管理:
begin
ComboBox1.Items.Append(adoquery1.FieldValues['系名']); //ComboBox1连到系表的 系名 字段
adoquery1.Next;
end; end;
procere TForm11.ComboBox1Select(Sender: TObject);
begin
adoquery2.Close;
adoquery2.SQL.Clear;
adoquery2.SQL.Add('select * from class where 系名='+''''+ComboBox1.Text+'''');//查询系名是否符合
adoquery2.ExecSQL;
adoquery2.Open;
while not adoquery2.Eof do
begin
ComboBox2.Items.Append(adoquery2.FieldValues['班级']);//符合就调用班级表的字段 班级
adoquery2.Next;
end;
end;
procere TForm11.ComboBox2Select(Sender: TObject);
begin
adoquery4.Close;
adoquery4.SQL.Clear;
adoquery4.SQL.Add('select * from kecheng where 班级='+''''+ComboBox2.Text+'''');//查询课程表中字段 班级 是否符合,符合就调到
adoquery4.ExecSQL; //DBgiid1
adoquery4.Open;
end;
procere TForm11.ComboBox3Select(Sender: TObject);
begin
adoquery4.Close;
adoquery4.SQL.Clear;
adoquery4.SQL.Add('select * from kecheng where 班级='+''''+ComboBox2.Text+''' and 学期='+''''+ComboBox3.Text+''''); //判断学期是否符合
adoquery4.ExecSQL;
adoquery4.Open;
end;
procere TForm11.SpeedButton1Click(Sender: TObject);
begin
while not adoquery4.Eof do
begin
if (adoquery4.FieldValues['课程号']=adoquery3.FieldValues['课程号']) and (adoquery4.FieldValues['班级']=Combobox2.Text) and (adoquery4.FieldValues['学期']=Combobox3.Text) then
break;
adoquery4.Next;
end;
if adoquery4.Eof then
begin
adoquery4.Insert; //把选课内容添加到选课表中。
adoquery4.FieldValues['课程号']:=adoquery3.FieldValues['课程号'];
adoquery4.FieldValues['班级']:=Combobox2.Text;
adoquery4.FieldValues['课程名']:=adoquery3.FieldValues['课程名'];
adoquery4.FieldValues['学期']:=Combobox3.Text;
adoquery4.Post;
end
else
begin
showmessage('本课程此班级已经选过'); //如果已经选过,弹出对话框“本课程此班级已经选过”
end;
end;
procere TForm11.SpeedButton2Click(Sender: TObject);
begin
if not adoquery4.Eof then
adoquery4.Delete;
end;
end.
课程管理:
procere TForm9.FormCreate(Sender: TObject);
begin
ADOQuery3.Close; //关闭数据库
ADOQuery3.SQL.Clear; //清空
ADOQuery3.SQL.Add('select * from kechengbiao');
ADOQuery3.ExecSQL;
ADOQuery3.Open;
dbedit1.DataField:='课程号';
dbedit2.DataField:='课程名';
dbedit3.DataField:='课时';
dbedit4.DataField:='学分';
//DBComboBox1.DataField:='学期';
DBComboBox2.DataField:='类型';
end;
procere TForm9.SpeedButton1Click(Sender: TObject);
begin
if SpeedButton1.Caption='添加' then
begin
adoquery3.Insert; //添加到课程表
SpeedButton1.Caption:='确定';
SpeedButton4.Enabled:=true;
SpeedButton2.Enabled:=false;
SpeedButton3.Enabled:=false;
end
else
if SpeedButton1.Caption='确定' then
begin
if dbedit1.Text='' then
begin
showmessage('请输入课程号!'); //如果课程号没输入,弹出对话框
end
else
begin
adoquery3.Post;
SpeedButton1.Caption:='添加';
SpeedButton4.Enabled:=false;
SpeedButton2.Enabled:=true;
SpeedButton3.Enabled:=true;
end;
end;
end;
procere TForm9.SpeedButton2Click(Sender: TObject);
begin
if adoquery3.Eof then
begin
SpeedButton2.Enabled:=false;
SpeedButton3.Enabled:=false;
end;
if SpeedButton2.Caption='删除' then
begin
SpeedButton2.Caption:='确定';
SpeedButton4.Enabled:=true;
SpeedButton1.Enabled:=false;
SpeedButton3.Enabled:=false;
end
else
begin
adoquery3.Delete; //从数据表中删掉所选记录
SpeedButton2.Caption:='删除';
SpeedButton4.Enabled:=false;
SpeedButton1.Enabled:=true;
SpeedButton3.Enabled:=true;
end;
end;
procere TForm9.SpeedButton4Click(Sender: TObject);
begin
adoquery3.Cancel;
SpeedButton1.Caption:='添加';
SpeedButton2.Caption:='删除';
SpeedButton3.Caption:='修改';
SpeedButton4.Enabled:=false;
SpeedButton1.Enabled:=true;
SpeedButton2.Enabled:=true;
SpeedButton3.Enabled:=true;
end;
procere TForm9.SpeedButton3Click(Sender: TObject);
begin
if SpeedButton3.Caption='修改' then
begin
adoquery3.Edit; //修改课程表中的记录
SpeedButton3.Caption:='确定';
SpeedButton4.Enabled:=true;
SpeedButton2.Enabled:=false;
SpeedButton1.Enabled:=false;
end
else
begin
adoquery3.Post;
SpeedButton3.Caption:='修改';
SpeedButton4.Enabled:=false;
SpeedButton2.Enabled:=true;
SpeedButton1.Enabled:=true;
end;
end;
procere TForm9.Label1DblClick(Sender: TObject);
begin
form11:=tform11.Create(application);
form11.ShowModal;
end;
end.
课程查询部分:
procere Tform4.ComboBox1Select(Sender: TObject);
begin
edit1.Text:='';
button1.Enabled:=false;
end;
procere Tform4.Button1Click(Sender: TObject);
begin
if CheckBox1.Checked=true then
begin
ADOQuery1.Close; //先将数据库关闭
ADOQuery1.SQL.Clear; //清空ADOQuery1内的SQL值清空
ADOQuery1.SQL.Add('select * from kecheng where '+ComboBox1.text+' = '+''''+edit1.Text+''' and 学期 = '+''''+ComboBox2.Text+''''); //合并查询,符合的话在DBGrid中显示出来
ADOQuery1.ExecSQL;
ADOQuery1.Open;
end
else
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from kecheng where '+ComboBox1.text+' = '+''''+edit1.Text+'''');//单个条件查询
ADOQuery1.ExecSQL;
ADOQuery1.Open;
end;
end;
procere Tform4.N2Click(Sender: TObject);
begin //开启其他管理界面
form2.show;
form4.Close;
end;
procere Tform4.N3Click(Sender: TObject);
begin
form3.show;
form4.Close;
end;
procere Tform4.N4Click(Sender: TObject);
begin
form5.show;
form4.Close;
end;
procere Tform4.N6Click(Sender: TObject);
begin
form1.show;
form4.Close;
end;
procere Tform4.N7Click(Sender: TObject);
begin
form4.Close;
end;
procere Tform4.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
button1.Enabled:=true; //当输入条件后,“确定”按钮为有效状态
end;
procere Tform4.CheckBox1Click(Sender: TObject);
begin
ComboBox2.Enabled:=CheckBox1.Checked;//把查询到的数据放在DBGrid上显示出来
end;
end.
四、学校学生管理信息系统的使用说明
本系统分为学生用户和管理用户,如果你不是管理员,那只能进行查询,对数据没有修改权力。只能进行查询,里面有各个方面的,如成绩查询,课程查询,班级查询,学籍查询。各个界面都简单明了,只要输入你所需要的条件,系统自动调出数据。
管理员登陆点系统,点系统,输入管理员用户及密码,跟数据库的用户表比较。如果通过
则能进行课程,学籍,成绩,班级的管理。
五、结束语
学生信息管理系统有利于学校对学生资料的查询,具有可使用性和可维护性,利于学校在需要之时快速了解学生的情况。并可以让具有最高权限的管理员更新、修改信息,已经具备了一定的功能。但由于时间关系和其它原因,本系统还有些不足之处, 如本系统没有实现报表打印的功能等等, 还有待于完善。
在张波尔老师的指导下,经过一段时间的讨论和上机的不断调试,我顺利的完成了开发任务。在开发过程中,我不仅增强了自学的能力和开发软件的能力。对一些软件开发模式有了更加深刻的认识,对应用软件的熟练程度有所提高,已经能运用这项开发过程,学会了如何进行小组式的开发一个综合系统。还从张老师身上学到了很多东西。张老师认真负责的态度严谨治治学精神都使我收益非浅。在此我特向给了很多指导和提供我们开发小组宝贵意见的张波尔老师表示感谢!因为本系统所涉及的内容非常广泛并且比较复杂,加上时间的仓促,尽管我竭尽全力来保证系统的可靠性,但是肯定还有不足之处,恳请用户批评指正。谢谢!
参考文献:(1)Delphi6数据库系统开发实例子导航 人民邮电出版社
(2)程序设计从入门到精通 科学出版社
(3)Delphi6.0程序设计教程 冶金工业出版社
(4)Delphi数据库开发自学教程 人民邮电出版社
各模块主要代码
1、成绩管理模块
⑴ 成绩管理
procere TForm8.Button1Click(Sender: TObject);
var
i:boolean;
begin
i:=false;
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add('select * from pjcj where '+edit2.Text+'');
ADOQuery2.ExecSQL;
ADOQuery2.Open;
if not ADOQuery2.Eof then ( 判断是否数据库最后一项)
i:=true;
if i then
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from dkcj where 学号 ='+''''+ADOQuery2.FieldValues['学号']+''''); (使用SQL进行查询)
ADOQuery1.ExecSQL;
ADOQuery1.Open;
button1.Enabled:=false;
end
else
begin
showmessage('没有符合查询条件的记录!!'); (如果没有符合条ComboBox1.Text:='';
ComboBox2.Text:=''; 件的,显示该语句)
ComboBox3.Text:='';
edit1.Text:='';
edit2.Text:='';
adoquery1.Close;
adoquery2.Close;
ComboBox1.Enabled:=true;
end;
dbedit6.DataField:='学号';
dbedit7.DataField:='姓名';
dbedit8.DataField:='班级';
dbedit1.DataField:='学号';
dbedit2.DataField:='姓名';
dbedit3.DataField:='课程号';
dbedit4.DataField:='课程名';
dbedit5.DataField:='成绩';
end;
(2)成绩查询
procere Tform3.Button1Click(Sender: TObject);
var
i:boolean;
begin
i:=false;
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add('select * from pjcj where '+edit2.Text+'');
ADOQuery2.ExecSQL; (根据SQL进查询)
ADOQuery2.Open;
if not ADOQuery2.Eof then
i:=true;
if i then
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from dkcj where 学号 ='+''''+ADOQuery2.FieldValues['学号']+'''');
ADOQuery1.ExecSQL;
ADOQuery1.Open;
button1.Enabled:=false;
end
else
begin
showmessage('没有符合查询条件的记录!!');
ComboBox1.Text:=''; (当没有符合条件的记录,自动
ComboBox2.Text:=''; 清空选择框里的查询条件)
ComboBox3.Text:='';
edit1.Text:='';
edit2.Text:='';
adoquery1.Close;
adoquery2.Close;
ComboBox1.Enabled:=true;
end;
end;
procere Tform3.DBGrid2CellClick(Column: TColumn);
var
str:string;
begin
str:=ADOQuery2.FieldValues['学号'];
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from dkcj where 学号 ='+''''+str+'''');
ADOQuery1.ExecSQL;
ADOQuery1.Open;
end;
procere Tform3.N4Click(Sender: TObject); (管理界面的切换)
begin
form5.show;
form3.Close;
end;
procere Tform3.N6Click(Sender: TObject);
begin
form1.show;
form3.Close;
end;
procere Tform3.Edit1Exit(Sender: TObject);
begin
if ComboBox1.Text='平均成绩' then (根据平均成绩查询)
begin
edit2.Text:=edit2.Text+edit1.Text;
end
else
begin
edit2.Text:=edit2.Text+#39;
edit2.Text:=edit2.Text+edit1.Text;
edit2.Text:=edit2.Text+#39;
end;
end;
procere Tform3.Button2Click(Sender: TObject);
begin (本段为对查询条件的刷新,进
ComboBox1.Text:=''; 行不同条件的输入)
ComboBox2.Text:='';
ComboBox3.Text:='';
edit1.Text:='';
edit2.Text:='';
adoquery1.Close;
adoquery2.Close;
button1.Enabled:=false;
ComboBox1.Enabled:=true;
end;
2、 班级管理模块
(1)班级管理
procere TForm9.ComboBox1Select(Sender: TObject);
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from class where 系名 = '+''''+ComboBox1.Text+'''');
ADOQuery1.ExecSQL;
ADOQuery1.Open; (根据系别显示班级信息)
dbedit1.DataField:='系名'; (这五项为表的数据项名)
dbedit2.DataField:='班级';
dbedit3.DataField:='辅导员';
dbedit4.DataField:='班长';
dbedit5.DataField:='专业';
button1.Enabled:=true;
button2.Enabled:=true;
button3.Enabled:=true;
button4.Enabled:=true;
end;
procere TForm9.Button2Click(Sender: TObject); (记录的删除操作)《修改与添加操作与这类似》
begin
if button2.Caption='删除' then
begin
button2.Caption:='确定';
button1.Enabled:=false;
button3.Enabled:=false;
button4.Enabled:=true;
⑦ 关于delphi数据库软件的开发!
不难,我刚刚做过一个。这个链接3天内有效,你可以试试看
您上传的文件:
大小 文件名
1.7M 完全功能版.rar
已经成功地保存在Mofile
文件提取码: 6316289552039628
当您的朋友需要提取此文件时只需:
匿名提取文件连接 http://pickup.mofile.com/6316289552039628
或登录Mofile,使用提取码 6316289552039628 提取文件
⑧ 试简述Delphi中快速建立一个简单数据库程序的步骤,包括所用控件及设置方法(以access数据库为例)
假设你建好了access数据库,那么,操作如下:
1. 在ADO标签里拉出一个ADOConnection控件,用于与数据库建立连接,建议将loginprompt属性去掉。
2.在ADO标签里拉出一个ADOQuery控件,用于查询数据库,并得到数据集合。
设置其connection属性为上面添加的ADOConnection控件的名字。
设置其SQL属性比如为 select * from 数据表名称
设置其Active属性为true
3.从Data Access标签里拉出一个DataSource控件,他是一个位于ADOQuery控件和其他数据显示控件的中介。
设置其Dataset属性为上面添加的ADOQuery控件的名字
4.从Data Control标签里拉出一个DBGrid控件,一个DBNavigator控件,两者的DataSource属性都设置为上面添加的DataSource控件的名字。
双击DBGrid控件,在弹出菜单上“添加所有字段”
⑨ 如何在Delphi中开发数据库程序
打开:控制面板中\ODBC数据源\User
DSN\MS
ACCESS
DATABASE,点击"Configure...",在ODBC
Microsoft
Access
Setup中点击"Select..."选中你的Access库,点击“OK”回到ODBC
Microsoft
Access
Setup,点击"Advanced..."设你的用户名和暗码,依次点击“OK”“肯定”退出ODBC;进入DELPHI,把你的Table1的DatsbaseName属性设为MS
Access
Database,再将Table1的Active属性设为"True",在DBGrid1中就可在设计时看见你的数据了。当然,这是最简单的一个例子。OK?!
⑩ 新手如何delphi开发数据库
feng_me(哲哲),你的mail?感谢大人人,我熟悉sql,以及c/s(用java做过类似联众的游戏),socket,那么下面我除了要适应delphi的语法,界面以及数据感知组件的应用,还有什么要特别留意的?我的是[email protected]