delphi操作数据库学习

本文介绍了Delphi在数据库应用中的几个实用技巧,包括版本信息的提取、帮助文件的集成、数据库安装程序的制作及程序加密注册的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://hi.baidu.com/wzca

 

http://hi.baidu.com/yuzhenger

 

 

查看文章
  

delphi操作数据库学习24
2007年10月16日 星期二 17:09

这是本次讲座的最后一讲,将为大家介绍一下比较零碎的知识,希望大家能坚持到底。

1 “关于”窗口

现在的软件在一般在“帮助”菜单中都有一项“关于”菜单项,执行后会得到程序的版权、开发人员、版本号等信息,有的还有可用物理内存、资源占用等一些信息。这个关于窗口的设计是比较简单的,Delphi自身也带有一个About“半成品”窗体,供用户进行加工使用。可用物理内存、资源占用等等都是用API函数获得的,这方面的资料网上到处可见,就不讲了,这里只讲一下程序的版本号。程序的版本号当然用户可用标签之类的组件自己写上,但有时大家发现,现在有点流行如:Build 4.1.5.137这样的版本号。这样的版本号一般都不是手工输入了,而是提取的程序自身的版本号。程序自身的版本号在哪里控制呢?执行Project菜单下的“Options”功能,在打开的窗口中有一个“Version Info”页面,在这个页面中,用户可设定这四个版本号初始数据,也可以随时根据程序的功能是否有大的变化升级主版本和次版本号,将“Auto Increment build number”前的复选框选中,以后每当用户用Project菜单下的“Build all Projects”功能时,最后的build编号将自动增加1。一般来说,在前面的三个号不变时,最后的编号越大说明程序的更新时间最近。在这个页面上还有一些其他功能如公司名称等等可以设定,读者自己试试吧。

现在我们来说明如何用代码获得这四个编号。下面是获取这四个版本号的通用函数代码,用户直接调用即可:

function GetBuildInfo: string;

var

   VerInfoSize: DWORD;

   VerInfo: Pointer;

   VerValueSize: DWORD;

   VerValue: PVSFixedFileInfo;

   Dummy: DWORD;

   V1, V2, V3, V4: Word;

begin

   VerInfoSize := GetFileVersionInfoSize(PChar(ParamStr(0)), Dummy);

   if VerInfoSize = 0 then begin

     Dummy := GetLastError;

     Result := '0.0.0.0';

   end; {if}

   GetMem(VerInfo, VerInfoSize);

   GetFileVersionInfo(PChar(ParamStr(0)), 0, VerInfoSize, VerInfo);

   VerQueryValue(VerInfo, '/', Pointer(VerValue), VerValueSize);

   with VerValue^ do begin

     V1 := dwFileVersionMS shr 16;

     V2 := dwFileVersionMS and $FFFF;

     V3 := dwFileVersionLS shr 16;

     V4 := dwFileVersionLS and $FFFF;

   end;

   Result := IntToStr(V1) + '.'

     + IntToStr(V2) + '.'

     + IntToStr(V3) + '.'

     + IntToStr(V4);

   FreeMem(VerInfo, VerInfoSize);

end;

调用示例:

version.caption:='版本号: '+GetBuildInfo;//version是一个标签组件。

2 帮助功能

程序的帮助功能一般都是打开帮助文件,做的比较好的帮助文件就是能上下文关联,但这是比较麻烦的。目前一般的帮助功能都是打开CHM格式的文件,所有的帮助内容都在其中。现在hlp文件用的越来越少打开一个CHM格式的文件代码如下:

procedure TMainForm.help1Click(Sender: TObject);

var fpath:string;

begin

fpath:=ExtractFilePath(ParamStr(0))+'help.chm';

ShellExecute(handle,nil,pchar(fpath),nil,nil,sw_shownormal);

end;

上面的代码中,首先获取当前执行文件(EXE文件)所在的路径,然后在此路径下寻找help.chm帮助文件并打开它,这就要求帮助文件和执行文件要放在同一目录下,如果你的帮助文件很多,有单独的子文件夹,那么对上述代码做一点修改即可。

3 制做数据库安装程序

如果不是数据库程序,用Delphi自带的安装制做程序InstallShield Express for Delphi(下面简写为ISE)制做是很容易的事,非常简单。但对数据程序来说,如果是采用的BDE方式操作数据库,那么在制做数据库安装程序时就必须要发布BDE。对于Paradox和DBF等类型的数据库来说,把BDE打包进去安装后一般不会有什么问题,但对Access97数据库(ACCESS2000数据库没试过)来说,发现用ISE制做后安装到别的电脑中总是不能成功,经过仔细研究发现了ISE的一个BUG,并解决了这个问题。这个BUG是由于打包后的BDE在别的电脑中安装后,将/Software/Borland/Database Engine/Settings/DRIVERS/MSACCESS/INIT的一个键值DLL32的值写为了IDAO32.DLL,这是ACCESS95用的,不支持ACCESS97,所以才会出现错误,解决的办法就是制做时添加此键值为正确的IDDA3532.DLL(也就是修改为正确的),这样就可保证安装后无需再手工修改了,一次成功。

对数据库程序来说还有一个问题要考虑,就是安装后数据库别名的自动建立并指向用户指定的安装目录下的数据库。研究了一下ISE的帮助文件后解决了这个问题,下面给大家介绍一下用ISE制做ACCESS97数据库安装程序的关键几点,其他的步骤就不讲。下面的步骤编号对应ISE中的步骤号:

第一步: 输入 Application name 如demo,其他的自行设定,要选中自动删除

第二步:先设定别名后,在后面PATH输入: <INSTALLDIR>/   ,TYPE设定为:MSACCESS,参数写:DATABASE NAME=<INSTALLDIR>/数据库名.mdb,这是数据库别名能正确找到用户安装路径下数据库的保证。

第三步: 在GROUP->program file中嵌入自己的数据库文件、帮助文件等,即和EXE文件放在一起

第五步: 在 Registry-keys 中的HKEY_LOCAL_MACHINE中addkey:

/Software/Borland/Database Engine/Settings/DRIVERS/MSACCESS/INIT

在Registry-value中添加ADD value ,TYPE:string;

Value:   DLL32

Value data:IDDA3532.DLL

    只要上面的几步操作无误基本上就可保证能一次安装成功。对于以ADO方式编写的数据库程序来说,无需BDE,所以也就很方便了再一点是安装界面的汉化问题现在网上有汉化文件,找到后把几个DLL文件(其实就是资源文件)覆盖就可以了。现在其他的安装程序制做软件也很多如WISE等等,有些功能非常强大,动辄占用几十兆的空间,不过不喜欢用这些,ISE使用简单,还是喜欢用它。安装程序的目的就是把所需的文件安装到用户的电脑中,并做一些配置,只要这个目的能达到越简单、实用越好,不必追求华丽的安装界面。

4 程序加密注册

任何一个软件都是辛勤劳动的结果,无偿被别人使用总是不甘心,除了一些免费软件之外。那么对程序加密到底有多大意义呢?由于加密和解密是一对矛盾,只要你能加密,总有高手能解密。认为,程序的加密适可而止吧,可以做点简单的加密,不要把大量精力放在这上面,还不如去把精力用在软件的功能升级上,不断地推出功能更强大的软件让解密者去解吧。现在加密的方式有多种,但一般比较通用的方式是读取用户电脑硬件信息作为密匙。从目前来说硬盘出厂编号、主板编号、BIOS信息、CPU编号等是最常用的或结合起来用,但硬件升级换代也很快,况且不同厂家的硬件信息也有差异,如有的硬盘没有出厂编号,P3CPU的编号被屏蔽,同一批主板的BIOS信息相同等等都会给加密造成不确定因素,容易导致加密失败。

给大家介绍比较简单容易的读取硬盘序号(格式化后才会改变)的加密方式。读取硬盘序号的代码也很简单,用API函数,这种方式大家也可能早就知道了,这里就简单提一下吧,关键代码如下:

GetVolumeInformation(pchar('c:/'),nil,0,pdw,mc,fl,nil,0);

这里注意一定要取C盘序号,因为可能有的硬盘没有分区,没有D盘等等,为了程序的通用性,取C盘。此序号读出后一定要进行加密变换,否则程序就等于没有加密。把加密后的信息写入注册表即可。这样以后程序启动时进行同样操作看是否和注册表中的密码一致,若不一致则是非法拷贝。这种加密方法的缺点在于:由于程序中也有变换算法,可被高手跟踪解密或制做出注册机。别管那么多了,毕竟普通用户没这个水平,再说若盗版很厉害说明你写的软件有水平,现在微软的产品盗版这么严重,微软不照样发展很快吗?其余的就不用再说了吧。这里有读写注册表的操作,给大家简单提示一下。

//创建注册信息-------------

   TheReg := TRegistry.Create;

   TheReg.RootKey := HKEY_LOCAL_MACHINE;

   keyName := 'SOFTWARE/lklb';

   sr:='userid';

   sr1:='user';

if TheReg.OpenKey(KeyName, True) then

begin

TheReg.WriteString(sr1,edit1.text); //用户名

TheReg.WriteString(sr,pass(passwd));//系列号

TheReg.CloseKey;

label3.caption:='注册成功!';

end;

     现在的程序在状态条上或在标题栏上显示用户名称,如下代码:

//读取注册信息用户名显示在状态条上

   TheReg := TRegistry.Create;

   TheReg.RootKey := HKEY_LOCAL_MACHINE;

   keyName := 'SOFTWARE/lklb';

   if TheReg.OpenKey(keyName, True) then

    begin

    user:='【用户名称】:'+TheReg.readString('user');

    StatusBar.Panels[0].Width:=length(user)*6+10;

    StatusBar.Panels[0].Text:=user;

    TheReg.CloseKey;

    end;

    Thereg.Free;

    上述代码动态控制状态栏中显示用户名称的面板的宽度,因为用户名称长短不一,注意看看字符和像素的换算(需要自己摸索一下)。

    检测是否盗版部分代码:

   //读取注册信息

   TheReg := TRegistry.Create;

   TheReg.RootKey := HKEY_LOCAL_MACHINE;

   keyName := 'SOFTWARE/lklb';

   sr:='userid';

if TheReg.OpenKey(KeyName, True) then

   begin

    sr1:=TheReg.readString(sr); //读取注册表密码

    TheReg.CloseKey;

   end;

if sr1<>sr2 then //sr2为计算经变换后的密码

   begin

   MessageDlg('非注册用户,是盗版的吧?', mtWarning, [mbOK], 0);

   application.Terminate;

       end;

<br>中文名称:Delphi 7完美经典<br><br>http://www.huachu.com.cn/photo/2003/BB04672130c.jpg<br><br>出版社 : 中国铁道出版社 <br>作者  : 江义华/ <br>出版日期: 2003年7月 <br>综合评价: <br>国标编号:ISBN 7-113-05241-X/TP.931 <br>条形码 :9787113052416 <br>字数  :989千字   <br>印张  :41.75 <br>印数  :1-5000    <br>页数  :654 <br>开本  :787*1092 1/16 <br>版别版次:2003年7月第一版第一次印刷 <br>内容简介: <br>本书特色 <br>层次清晰、语言通俗、语法简练、以实用性为第一位。 <br>深入剖析了Object Pascal程序语言,包括指针、数据结构以及有关Override 和Overload函数的语法等。 <br>对面向对象的观点详述了Delphi VCL组件的属性、方法及事件,且在数据库设计方面辅以应用的范例。 <br>实例配有光盘,快速引导您踏入Delphi程序开发领域。 <br>适合想要深入了解Delphi程序设计的专业设计师,对一开始就想打好Delphi程序设计基础的初学者也非常适用。 <br><br>目录 : <br>第0章 认识Delphi <br><br>0-1 前言 <br>0-2 Delphi简介 <br>0-3 进入Delphi7 <br>0-4 退出Delphi <br><br>第1章 常用的窗口工具 <br><br>1-1 窗体(Form) <br>1-2 代码编辑器(Code Editor) <br>1-3 代码浏览器(Code Explorer) <br>1-4 组件面板(Componet Palette) <br>1-5 对象检视器(Object Inspector) <br>1-6 快捷工具栏(Speed Menu) <br>1-7 项目管理器(Project Manager) <br>1-8 桌面工具栏(Desktops Tollbar) <br>1-9 图像编辑器(Image Editor) <br>1-10 对象浏览器(Object TreeView) <br>1-11 关联选项卡(Digram Page) <br><br>第2章 常用的菜单 <br><br>2-1 File菜单 <br>2-2 Edit菜单 <br>2-3 Search菜单 <br>2-4 View菜单 <br>2-5 Project菜单 <br>2-6 Run菜单 <br>2-7 Tools菜单 <br>2-8 Windows菜单 <br><br>第3章 集成开发环境的改变 <br><br>3-1 Delphi集成开民环境介绍 <br>3-2 操作菜单方面的改进 <br>3-2-1 外面方面的改变 <br>3-2-2 内容方面的改变 <br>3-3 对象检视器方面的改进 <br>3-4 组件面板的改进 <br>3-5 代码编辑器的改进 <br>3-6 设计陈列室的改进 <br>3-7 编译信息的显示 <br>3-8 调试器方面的改进 <br>3-8-1 Watch List改进 <br>3-8-2 Debugger选项的改进 <br>3-8-3 Run Parameters对话框的改进 <br><br>第4章 Delphi Object Pascal的初步印象 <br><br>4-1 面向对象程序概论 <br>4-1-1 类 <br>4-1-2 对象 <br>4-1-3 继承 <br>4-1-4 封装 <br>4-1-5 信息 <br>4-2 Delphi项目结构及窗体的建立 <br>4-2-1 GUI模式的项目 <br>4-2-2 Console模式的项目 <br>4-3 Object Pascal程序结构 <br>4-3-1 项目程序(Program)的结构 <br>4-3-2 单元程序(Unit)的结构 <br>4-4 如何完成一个简单的窗体程序 <br><br>第5章 简单的常用指令介绍 <br><br>5-1 TLabel类对象 <br>5-1-1 Caption属性 <br>5-2 TButton类对象 <br>5-2-1 Caption属笥 <br>5-2-2 OnClick事件 <br>5-3 TEdit类对象 <br>5-4 TCanvas类对象 <br>5-5 Showmessage函数 <br>5-6 InputBox函数 <br>5-7 MessageDlg函灵敏 <br><br>第6章 Delphi与Object Pascal程序的基本概念 <br><br>6-1 Object Pascal Program程序结构与Delphi项目结构的关系 <br>6-1-1 标头(Heading) <br>6-1-2 Uses子句 <br>6-1-3 编译指令(Compiler directive) <br>6-1-4 源代码区(begin end) <br>6-2 Unit程序结构与窗体的关系 <br>6-2-1 Unit代码结构 <br>6-2-2 语句(Statement) <br>6-2-3 Unit间Use的状况 <br>6-3 数据类型与定义变量 <br>6-3-1 数据类型概论 <br>6-3-2 不需要使用type声明的数据类型 <br>6-3-3 必须使用type声明的数据类型 <br>6-3-4 定义变量 <br>6-3-5 变量的作用域 <br>6-3-6 定义常量 <br>6-3-7 变量的类型转换(Typecast) <br>6-4 Object Pascal的运算符(Operator) <br>6-4-1 设置运算符(assign Operator) <br>6-4-2 算数运算符(Arithmetic Operator) <br>6-4-3 关系运算符(Relational Operator) <br>6-4-4 布尔运算符 <br>6-4-5 集合运算符 <br>6-4-6 字符串运算符 <br>6-4-7 位逻辑运算符 <br>6-4-8 运算符优先级 <br>6-5 流程控制 <br>6-5-1 语句的基本概念 <br>6-5-2 表达式语句(Expression-Statement) <br>6-5-3 流程控制语句 <br>6-5-4 可视化程序与嵌套程序 <br>6-6 数组与指针 <br>6-6-1 数组类型 <br>6-6-2 指针类型 <br>6-6-3 浅谈指针与数据结构 <br>6-7 程序与函数(Procedures and Functions) <br>6-7-1 函数的意义与优点 <br>6-7-2 函数的分类与效用 <br>6-7-3 自定义函数使用方法概述 <br>6-7-4 函数的声明、定义及其实现 <br>6-7-5 参数传递方式 <br>6-7-6 声明修饰字 <br>6-7-7 常用的内建函数 <br><br>第7章 Object Pascal面向对象设计 <br><br>7-1 类和对象 <br>7-1-1 类(Class)与对象(Object)的基本概念 <br>7-1-2 对象的构造与类的关系 <br>7-2 类的声明与对象的定义 <br>7-2-1 类的声明与对象的实现 <br>7-2-2 对象的构造与析构 <br>7-3 类成员的封装等级与可见度 <br>7-3-1 封装的意义 <br>7-3-2 Object Pascal类成员的封装等级 <br>7-3-3 以实例说明类成员封装等级的可见度 <br>7-3-4 开头不加保留字的类成员 <br>7-3-5 成员封装等级的变更法则 <br>7-4 类成员的定义与实现 <br>7-4-1 字段(Field)与对象引用(Object Reference)的实现 <br>7-4-2 方法(Method) <br>7-4-3 属性(Property) <br>7-5 类的继承 <br>7-5-1 继承的意义与优点 <br>7-5-2 子类成员的存在方式 <br>7-6 成员函数的Override及 Overload <br>7-6-1 Override 适用的情况——Virtual与 Dynamic的成员函数 <br>7-6-2 Override成员函数的定义语法 <br>7-6-3 Virtual成员函数与动态绑定(Dynamic Binding) <br>7-6-4 覆盖(Overriding)与隐藏(Hiding)的差别 <br>7-6-5 Override与OVerload的差别 <br>7-7 Abstract成员函数与多态(Polymorphic) <br>7-7-1 一般纯虚函数的多态实现概念 <br>7-7-2 纯虚函数的定义语法及实现 <br>7-8 Self、AS、is、Sender、Parent、owner、inerited <br>7-8-1 Self变量 <br>7-8-2 AS运算符 <br>7-8-3 is运算符 <br>7-8-4 Sender <br>7-8-5 Parent <br>7-8-6 owner <br>7-8-7 inerited保留字 <br>7-9 静态成员方法——Class Methods <br><br>第8章 异常处理 <br><br>8-1 异常处理存在的目的 <br>8-2 Object Pascal异常的种类 <br>8-2-1 Delphi内建的异常类 <br>8-2-2 自定义异常类 <br>8-3 触发异常的方法 <br>8-3-1 由程序系统自动触发 <br>8-3-2 使用Raise指令触发 <br>8-4 处理异常情况 <br>8-4-1 try…finally…end语法说明 <br>8-4-2 ty…except…end语法说明 <br><br>第9章 Delphi用户接口设计详述 <br><br>9-1 基本概念 <br>9-2 TForm的属性 <br>9-2-1 由TComponent继承而来的属性 <br>9-2-2 由TControl继承而来的属性 <br>9-2-3 由TWinControl继承而来的属性 <br>9-2-4 由TScrollingWindControl继承而来的属性 <br>9-2-5 由TCustomForm继承而来的属性 <br>9-3 TForm的方法 <br>9-3-1 由TObject继承而来的属性 <br>9-3-2 由TPersistent继承而来的属性 <br>9-3-3 由TComponent继承而来的属性 <br>9-3-4 由TControl继承而来的属性 <br>9-3-5 由WinControl继承而来的属性 <br>9-3-6 由TScrollingWinControl继承而来的属性 <br>9-3-7 由TCustomForm继承而来的属性 <br>9-3-8 由TForm继承而来的属性 <br>9-4 TForm的事件 <br>9-4-1 由TControl继承而来的属性 <br>9-4-2 由TWinControl继承而来的属性 <br>9-4-3 由TCustomForm继承而来的属性 <br>9-5 TLabel的类成员 <br>9-5-1 TLabel的属性 <br>9-5-2 TLabel的方法 <br><br>第10章 标准组件介绍及实作范例 <br><br>10-1 Frames组件 <br>10-2 MainMenu组件 <br>10-3 PopuMenu组件 <br>10-4 Label组件 <br>10-5 Edit组件 <br>10-6 Memo组件 <br>10-7 Button组件 <br>10-8 CheckBox组件 <br>10-9 RadioButton组件 <br>10-10 ListBox组件 <br>10-11 ComboBox组件 <br>10-12 ScrollBar组件 <br>10-13 GroupBox组件 <br>10-14 RadioGroup组件 <br>10-15 Panel组件 <br>10-16 ActionList组件 <br><br>第11章 TApplication与TScreen类介绍及应用 <br><br>11-1 TApplication类 <br>11-1-1 TApplication类对象常用的属性 <br>11-1-2 TApplication类对象常用的方法 <br>11-2 TScreen类 <br><br>第12章 高级组件介绍 <br><br>12-1 Additional选项卡中的常用组件 <br>12-1-1 TBitBtn组件 <br>12-1-2 TMaskEdit组件 <br>12-1-3 TImage组件 <br>12-1-4 TShape组件 <br>12-2 Win32选项卡中的常用组件 <br>12-2-1 TPageControl组件 <br>12-2-2 TImageList组件 <br>12-2-3 TRichEdit组件 <br>12-2-4 TDateTimePicker组件 <br>12-2-5 TStatusBar组件 <br>12-3 System选项卡中的常用组件 <br>12-3-1 TTimer组件 <br>12-4 Dialogs选项卡中的常用组件 <br>12-4-1 TOpenDialog组件 <br>12-4-2 FTontDialog组件 <br>12-4-3 TColorDialog组件 <br><br>第13章 封装Delphi7开发的应用程序 <br><br>13-1 安装Borland的InstallShiled程序 <br>13-2 利用InstallShield封装 Delphi7开发的程序 <br>13-2-1 InstallShield环境界面简介 <br>13-2-2 封装一个简单的Delphi项目 <br><br>第14章 数据库概念及SQL指令介绍 <br><br>14-1 数据库基本概念 <br>14-1-1 数据库结构 <br>14-1-2 开放数据库连接协议(ODBC) <br>14-1-3 SQL Explorer <br>14-2 结构化查询语言SQL <br>14-2-1 CREATE语句 <br>14-2-2 ALTER TABLE语句 <br>14-2-3 DROP语句 <br>14-2-4 SELECT语句 <br>14-2-5 INSERT、UPDATE语句 <br>14-2-6 DELETE语句 <br>14-3 SQL指令高级使用 <br>14-3-1 UNION运算 <br>14-3-2 JOIN运算 <br>14-3-3 特殊运算符 <br>14-3-4 子查询(Sub Query) <br><br>第15章 Delphi数据库程序基础 <br><br>15-1 Delphi各种数据库连接设置 <br>15-1-1 建立dBase、Paradox连接 <br>15-1-2 建立Access连接 <br>15-1-3 建立MSSQL连接 <br>15-1-4 建立MySQL连接 <br>15-2 Delphi的Database Desktop使用方法 <br>15-2-1 字段定义 <br>15-2-2 输入数据 <br>15-2-3 设置BDE数据库别名与连接数据库 <br><br>第16章 Delphi数据库程序设计——使用BDE组件 <br><br>16-1 TDataSet组件 <br>16-1-1 TDataSet组件常用的属性 <br>16-1-2 TDataSet组件常用的方法 <br>16-1-3 TDataSet组件常用的事件 <br>16-2 TTable组件 <br>16-2-1 TTable组件常用的属性 <br>16-2-2 TTable组件常用的方法 <br>16-3 TQuery组件 <br>16-3-1 TQuery组件常用的属性 <br>16-3-2 TQuery组件常用的方法 <br>16-4 TDataModule组件 <br>16-5 TDatabase组件 <br>16-5-1 TDatabase组件常用的属性 <br>16-5-2 TDatabase组件常用的方法 <br>16-5-3 TDatabase组件常用的事件 <br>16-6 综合范例 <br>16-6-1 员工管理系统——使用TTable组件 <br>16-6-2 员工管理系统——使用TQuery组件 <br>16-6-3 订单管理系统——使用TTable组件 <br>16-6-4 订单系统——使用TQuery组件 <br><br>第17章 数据程序设计——使用Delphi组件 <br><br>17-1 TADOConnection组件 <br>17-1-1 TADOConnection组件常用的属性 <br>17-1-2 TADOConnection组件常用的方法 <br>17-1-3 TADOConnection组件常用的事件 <br>17-2 TADOCommand组件 <br>17-2-1 TADOCommand组件常用的属性 <br>17-2-2 TADOCommand组件常用的方法 <br>17-3 TADODataSet组件 <br>17-3-1 TADODataSet组件常用的属性 <br>17-3-2 TADODataSet组件常用的方法 <br>17-3-3 TADODataSet组件常用的事件 <br>17-4 TADOTable组件 <br>17-4-1 TADOTable组件常用的属性 <br>17-4-2 TADOTable组件常用的方法 <br>17-5 TADOQuery组件 <br>17-6 综合范例 <br>17-6-1 客户管理系统——使用TADODataSet组件 <br>17-6-2 客户管理系统——使用TADOTable组件 <br>17-6-3 客户管理系统——使用TADOQuery组件 <br>17-6-4 订单管理系统——使用TADOTable组件 <br>17-6-5 订单系统——使用TADOQuery组件 <br><br>第18章 数据感知组件 <br><br>18-1 TDBText组件 <br>18-2 TDBEdit组件 <br>18-3 TDBMemo组件 <br>18-4 TDBImage组件 <br>18-5 TDBListBox组件 <br>18-6 TDBComboBox组件 <br>18-7 TDBLookupListBox与TDBLookupComboBox组件 <br>18-8 TDBNavigator组件 <br>18-9 TDBGrid组件 <br><br>第19章 设计Delphi数据库报表 <br><br>19-1 设计报表的基本观念 <br>19-1-1 报表的组成 <br>19-1-2 报表的主体组件——TquickRep <br>19-1-3 建立第一个报表程序 <br>19-2 QuickReport中可打印出组件 <br>19-2-1 TQR系列组件介绍 <br>19-2-2 TQRDB系列组件介绍 <br>19-3 综合范例 <br>19-3-1 一般表达报表范例 <br>19-3-2 标签式报表范例 <br>19-3-3 主/明细报表范例 <br>19-3-4 一般表达式附图片报表范例 <br>19-3-5 分组式报表范例——打印多色报表 <br>19-3-6 报表输出及输出范例 <br><br>附录 Kylix程序安装及转换 <br><br>http://lib.verycd.com/2005/02/07/0000038314.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值