社区
数据库
帖子详情
使用ODBC处理Paradox数据库时,无法修改表
王鲲彩
2011-01-12 10:47:02
在使用ODBC处理Paradox的数据库时,只能做查询,但不能做修改之类的操作,网上找了很多解决方法,都不行,不知道有哪位大侠有好的解决方法,谢谢了!
...全文
46
2
打赏
收藏
使用ODBC处理Paradox数据库时,无法修改表
在使用ODBC处理Paradox的数据库时,只能做查询,但不能做修改之类的操作,网上找了很多解决方法,都不行,不知道有哪位大侠有好的解决方法,谢谢了!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
王鲲彩
2011-01-16
打赏
举报
回复
问题已经解决了。最后还是通过直接使用BDE引擎来修改DB表,也就是说通过ODBC是无法修改表的。
MervynChina
2011-01-12
打赏
举报
回复
我也遇到类似的问题了,也是用ODBC处理的,结果问了个问题,半天没人理。
顶你个帖子!
非Access
数据库
在VB中的编程及应用
存取对象变量库结构作为一个功能较完备的Windows软件开发平台,Visual Basic专业版提供了对
数据库
应用的强大支持。尤其提供了
使用
数据控件和绑定控制项,
使用
数据库
存取对象变量(Data Access Object Variable),直接调用
ODBC
2.0 API接口函数等三种访问
数据库
的方法。对其标准内置的Ms Access
数据库
,它可以提供不弱于专业
数据库
软件的支持,可以进行完整的
数据库
维护、操作及其事务
处理
。在VB中,将非Access
数据库
称为外来
数据库
。对于FoxPro、dBASE、
Par
ado
x等外来
数据库
。虽然借助VB的Data Manager 能够对这些
数据库
进行NEW、OPEN、DESIGN、DELETE等操作,但在应用程序的运行状态中并不能从底层真正实现这些功能。本文从
使用
数据库
存取对象变量的方法出发,实现了非Access格式
数据库
(以FoxPro
数据库
为例)的建新库、拷贝
数据库
结构、动态调入等操作,阐述了从编程技巧上弥补VB对这些外来
数据库
支持不足的可行性 。 一 、 VB
数据库
的体系结构具体的VB的
数据库
结构。 VB
数据库
的核心结构是所谓的MicroSoft JET
数据库
引擎,JET引擎的作用就像是一块"面 板",在其上可以插入多种ISAM(Indexed Sequential Access Method,即索引顺序存取方 法) 数据驱动程序。JET引擎为Access格式
数据库
提供了直接的内部(build-in)支持,这就是VB对Access
数据库
具有丰富支持的真正原因。 VB专业版中提供了FoxPro、dBASE(或 Xbase)、
Par
ado
x、Btrieve等
数据库
的ISAM驱动程序,这就使得VB能支持这些
数据库
格 式。另外,其他的许多兼容ISAM的驱动程序也可以通过从厂商的售后服务得到。因而从理论上说,VB能支持所有兼容ISAM的
数据库
格式(前提是只需获得这些
数据库
的ISAM驱动接口程序)。 由上可见,Ms JET引擎实质上提供了:一个符合ANSI标准的语法分析器;为查询结果集的
使用
而提供的内存管理功能;同所支持的
数据库
的外部接口;为应用代码提供的内部接口。实际上,在VB中从一种
数据库
类型转化为另一种
数据库
类型几乎不需要或只需要很少的代码
修改
。而且,尽管dBASE、
Par
ado
x本身的DDL (Data Definition Language,即数据定义语言)和DML(Data Manipulation Language,即数据操纵语言)是非结构化查询的,但它们仍然可以
使用
VB的SQL语句和JET引擎来操纵。 从VB的程序代码的角度来看,
ODBC
,ISAM驱动程序以及Ms Access
数据库
的整个外部结构够可以统一为一个一致的编程接口。也即是说,提供给VB应用程序员的记录集对象视图同所
使用
的
数据库
格式及类型是相互独立的。即对FoxPro等
数据库
仍然可以
使用
众多的
数据库
存取对象变量,这就为非Access
数据库
的访问提供了最重要的方法。 二 、
使用
非Access
数据库
时
的参数设置及配置文件的参数读取如果在VB的程序中
使用
了
数据库
的操作,将应用程序生成EXE文件或打包生成安装程序后,则必须提供一个配置 (.INI)文件,在INI文件中可以对不同类型的
数据库
进行设置。如果找不到这个INI文件, 将会导致不能访问
数据库
。通常情况下,INI文件的文件名和应用程序的名称相同,所以如果没有指明,VB的程序会在Windows子目录中去找和应用程序同名的INI文件。可以
使用
VB中的SetDataAccessOptions语句来设置INI文件。 SetDataAccessOptions语句的用法如下:SetDataAccessOptions 1 ,IniFileName其中IniFileName参数指明的是INI文件的带路径的文件名。值得注意的是,当应用程序找不到这个INI文件
时
,或在调用 OpenDataBase函数
时
对其Connect参数值没有设定为VB规定的标准值,如对FoxPro 2.5格式设定为了" FoxPro;"(应为" FoxPro 2.5; "),或者没有安装相应的ISAM驱动程序,则此
时
VB会显示一条错误信息" Not Found Installable ISAM "。通常,INI文件在应用程序分发出去以前已经生成,或者在安装
时
动态生成,也可以在应用程序中自己生成。 通常这种 INI文件中有" [Options]"、"[ISAM]"、" [Installed ISAMs]"、"[FoxPro ISAM]"、"[dBASE ISAM] " 、" [
Par
ado
x ISAM] "等设置段,对于一个完整的应用程序则还应有一个属于应用 程序自己的设置段如" [MyDB]”。可在其中设置DataType、Server、DataBase、 OpenOnStartup、DisplaySQL、QueryTimeOut等较为重要的
数据库
参数,并以此限定应用程序一般的运行环境。 Windows API接口函数在Kernel.exe动态链接库中提供了一个OSWritePrivateProfileString函数,此函数能按Windows下配置文件(.INI)的书写格式写入信息。 在通常情况下,应用程序还需要在运行
时
读取配置文件内相关项的参数。比如PageTimeOut(页加锁超
时
时
限)、MaxBufferSize(缓冲区大小)、LockRetry(加锁失败
时
重试次数)等参数,通过对这些参数的读取对应用程序运行环境的设定、潜在错误的捕获等均会有很大的改善。 设此应用程序的配置文件为MyDB.INI,则具体过程如下:Funtion GetINIString$( Byval Fname$ ,Byval szItem$ ,Byval szDeFault$ ) ' 此自定义子函数实现INI 文件内设置段内参数的读取Dim Tmp As String,x As Integer Tmp = String( 2048,32 ) x = OSGetPrivateProfileString(Fname$,szItem$ , szDefault$,Tmp,Len(Tmp) ," MyDB.INI " ) GetINIString = Mid$( Tmp,1,x ) EndFunction以下这些函数的声明可写在模块文件内,且每个函数的声明必须在一行内Declare Function OSGetPrivateProfileString% Lib "Kernel" Alias "GetPrivateProfileString" (ByVal AppName$, ByVal KeyName$, ByVal keydefault$, ByVal ReturnString$, ByVal NumBytes As Integer, ByVal FileName$) Declare Function OSWritePrivateProfileString% Lib "Kernel" Alias "WritePrivateProfileString" (ByVal AppName$, ByVal KeyName$, ByVal keydefault$, ByVal FileName$) Declare Function OSGetWindowsDirectory% Lib "Kernel" Alias "GetWindowsDirectory" (ByVal a$, ByVal b%) Sub Form1_Load( ) Dim st As String Dim x As Integer Dim tmp As String tmp = String$( 255, 32 ) ' INI文件内为各种
数据库
格式指明已安装的相应ISAM驱动程序x = OSWritePrivateProfileString(" Installable ISAMS", "
Par
ado
x 3.X", "PDX110.DLL", "MyDB.INI" ) x = OSWritePrivateProfileString( "Installable ISAMS", "dBASE III", "XBS110.DLL", "MyDB.INI" ) x = OSWritePrivateProfileString( "Installable ISAMS", "dBASE IV", "XBS110.DLL", "MyDB.INI" ) x = OSWritePrivateProfileString( "Installable ISAMS", "FoxPro 2.0", "XBS110.DLL", "MyDB.INI" ) x = OSWritePrivateProfileString( "Installable ISAMS", "FoxPro 2.5", "XBS110.DLL", "MyDB.INI" ) x = OSWritePrivateProfileString( "Installable ISAMS", "Btrieve", "BTRV110.DLL", "MyDB.INI" ) x = OSWritePrivateProfileString( "dBase ISAM", "Deleted", "On", "MyDB.INI" ) ' 指明 INI文件的位置x = OSGetWindowsDirectory( tmp, 255 ) st = Mid$( tmp, 1, x ) SetDataAccessOption 1, st + "\mydb.ini" '获得INI文件一些参数 gwMaxGridRows = Val(GetINIString( " MyDB.INI " ,"MaxRows", "250" )) glQueryTimeout = Val(GetINIString( " MyDB.INI " ,"QueryTimeout", "5" )) glLoginTimeout = Val(GetINIString( " MyDB.INI " ,"LoginTimeout", "20" )) End Sub 三 、数据存取对象变量对外来
数据库
编程的方法及其实例在VB专业版
数据库
编程的三种方法中,第二种-
使用
数据库
存取对象变量(DAO)的方法最具有功能强大、灵活的特点。 它能够在程序中存取
ODBC
2.0的管理函数;可以控制多种记录集类型:Dynaset,Snapshot 及Table记录集合对象;可以存储过程和查询动作;可以存取
数据库
集合对象,例如 TableDefs,Fields,Indexes及QueryDefs;具有真正的事物
处理
能力。因而,这种方法对
数据库
处理
的大多数情况都非常适用。 由于VB中的记录集对象与所
使用
的
数据库
格式及类型是相互独立的,所以在非Access
数据库
中也可以
使用
数据库
存取对象变量的方法。因而 对FoxPro等外来
数据库
而言,
使用
数据库
存取对象变量的方法同样也是一种最佳的选择。 有一点需要注意的是,VB的标准版中仅能
使用
数据控件(Data Control)对
数据库
中的记录进行访问,主要的
数据库
存取对象中也仅有Database、Dynaset对象可通过数据控件的属 性提供,其它的重要对象如TableDef、Field、Index、QueryDef、Snapshot、Table等均不能在VB的标准版中生成,所以
使用
数据存取对象变量的方法只能用VB 3.0以上的专业版。 (一)、非Access
数据库
的新建及库结构的
修改
VB专业版中的
数据库
存取对象变量可以分为两类,一类用于
数据库
结构的维护和管理,另一类用于数据的存取。其中
表
示
数据库
结构
时
可以
使用
下面的对象: DataBase、TableDef、Field、Index,以及三个集合 (Collection): TableDefs、Fields和Indexes 。每一个集合都是由若干个对象组成的,这些数据对象的集合可以完全看作是一个数组,并按数组的方法来调用。一旦
数据库
对象建立后,就可以用它对
数据库
的结构进行
修改
和数据
处理
。对于非Access
数据库
,大部分都是对应于一个目 录,所以可以
使用
VB的MkDir语句先生成一个目录,亦即新建一个
数据库
。而每一个非 Access
数据库
文件可看作是此目录下的一个数据
表
(Table),但实际上它们是互相独立的。 下面是新建一个FoxPro 2.5格式
数据库
的程序实例。 Sub CreateNew ( ) Dim Db1 As database , Td As TableDefs Dim T1 As New Tabledef , F1 As New Field , F2 As New Field , F3 As New Field Dim Ix1 As New Index Dim Path As String Const DB_TEXT = 10 , DB_INTEGER = 3 ChDir "\" Path$ = InputBox( " 请输入新路径名: ", "输入对话框" ) MkDir Path$ ' 新建一个子目录Set Db1 = OpenDatabase(Path$, True, False, "FoxPro 2.5;") Set Td = Db1.TableDefs T1.Name ="MyDB" '新建一个数据
表
,数据
表
名为MyDB F1.Name = "Name" , F1.Type = DB_TEXT , F1.Size = 20 F2.Name = "Class" , F2.Type = DB_TEXT , F2.Size = 20 F3.Name = "Grade" , F3.Type = DB_INTEGER T1.Fields.Append F1 '向数据
表
中添加这些字段T1.Fields.Append F2。
数据转换器(通用版)
欢迎
使用
数据转换器(通用版) 数据转换器(通用版)是一个可以对各种
数据库
进行
处理
的软件,是为专业人员量身定制的专用工具。非专业人员
使用
数据转换器可以
处理
一般的数据问题,而专业人员采用数据专换器更是如虎添翼,可以更快更好的进行应用软件的开发。 数据转换器采用先进的开发工具Delphi5.0企业版经过精心设计而成,是一个绿色软件,此软件只包含一个执行文件和一个帮助文件。因此,本软件非常的小巧实用。 本软件可以通过两种方式连接
数据库
:一、通过
ODBC
连接
数据库
。二、通过
ADO
直接连接
数据库
。因此,只要您的
数据库
提供了两种方法里面的一种驱动程序,数据转换器就可以连接到此
数据库
上。一般包括(dBase、
Par
ado
x、Access、SyBase、InterBase、SQLServer、Oracle、MySQL、DB2等)。 2003.03(新增功能) 1、加入数据字典功能。(导出SQLServer/SQL_Anywhere
表
结构) 2、增加了学习版(免费)
使用
的功能(查询、排序等)。 3、
修改
了缓存
处理
功能。 4、加入四个导航按钮。 5、加入报
表
管理功能。 198元/套
Jetpack ActiveX控件集合
Jetpack ActiveX控件集合 以很小的努力和少许代码就能提高任何基于开发语言的 COM 功能。
数据库
开发者可以通过 Jetpack 控件
使用
任何他们熟悉的语言构建客户端应用程序,包括 Microsoft Visual Basic, Visual C++,Visual J++,Borland Delphi,Powersoft Powerbuilder, 和 Micro Focus Object Cobol等。 Jetpack ActiveX控件集合 由11个不同的控件组成,每一个控件可以单独添加到应用程序,这些控件共享 Jetpack 里的部分代码,这避免了复杂的代码。 Jetpack ActiveX控件集合的特点及集成的部分控件: Design控件:用 Design 控件可以创建平台,
修改
已存在的平台。该界面能轻松浏览,编辑或创建域和索引,支持基于单域的索引和基于多域的索引。当对一个域重命名、
修改
或拷贝
时
,将保存该域的数据; Export (JET+ OLEDB)控件: Export Jet 能导出数据到以下
数据库
类型(要求安装 ISAM或
ODBC
驱动):Jet Engine
数据库
、dBase (III, IV 和 V
数据库
)、
Par
ado
x 3.x, 4.x 和 5.x
数据库
、Excel 3.0, 4.0, 95 和 97 空白
表
格程序、HTML 文件、Text 文件和
ODBC
远程
数据库
如 Microsoft SQL Server, Sybase SQL Server, ORACLE Server, 和 Ingres Server。还有其他任何可安装的 ISAM
数据库
;Export OLEDB 可导出到任何OLEDB 提供者; Find/Findx (JET + OLEDB)控件: Find 控件向任何
数据库
应用程序添加强大的搜索功能,只需要把 Find控件连接到数据控件就能搜索符合搜索标准的第一个、前一个、后一个和最后一个记录; Import控件: 可以从以下
数据库
类型中导入数据(要求安装 ISAM或
ODBC
驱动):Jet Engine
数据库
、dBase (III, IV 和 V
数据库
)、
Par
ado
x 3.x, 4.x 和 5.x
数据库
、Excel 3.0, 4.0, 95 和 97 空白
表
格程序、Text 文件和
ODBC
远程
数据库
如 Microsoft SQL Server, Sybase SQL Server, ORACLE Server, 和 Ingres Server。还有其他任何可安装的 ISAM
数据库
; Maint控件: Maint 对任何 Jet
数据库
应用程序都是很重要的,能对任何 Microsoft Jet
数据库
进行备分、存储、修复、压缩和转换; Organiser控件: Organiser 能轻松管理
数据库
里的对象,两个
数据库
的平台和搜索请求将在一个分离的屏幕内相邻显示。
使用
Organiser 可以从一个
数据库
导入数据或把数据导出到另一个
数据库
,数据格式自动转换。支持的
数据库
类型有:Microsoft Access, Excel, dBase,
Par
ado
x, Text, SQL Server 等等; 还包括Queryer/Queryerx,Report和ROOM控件。
Delphi5开发人员指南
经典中的经典! 目 录 译者序 序 前言 第一部分 快速开发的基础 第1章 Delphi 5下的Windows编程 1 1.1 Delphi产品家族 1 1.2 Delphi是什么 3 1.2.1 可视化开发环境 3 1.2.2 编译器的速度和已编译代码的效 率 4 1.2.3 编程语言的功能及其复杂性 4 1.2.4
数据库
结构的灵活性和可扩展性 5 1.2.5 框架对设计和
使用
模式的扩充 5 1.3 历史回顾 5 1.3.1 Delphi 1 5 1.3.2 Delphi 2 6 1.3.3 Delphi 3 6 1.3.4 Delphi 4 7 1.3.5 Delphi 5 7 1.3.6 未来 7 1.4 Delphi 5的IDE 7 1.4.1 主窗口 8 1.4.2 窗体设计器 9 1.4.3 Object Inspector 9 1.4.4 代码编辑器 9 1.4.5 代码浏览器 10 1.4.6 源代码生成器 10 1.5 创建一个简单的应用程序 11 1.6 事件机制的优势在哪里 12 1.7 加速原型化 13 1.8 可扩展的组件和环境 13 1.9 IDE最重要的十点功能 13 1.10 总结 15 第2章 Object Pascal语言 16 2.1 注解 16 2.2 新的过程和函数特征 17 2.2.1 圆括号 17 2.2.2 重载 17 2.2.3 缺省值参数 17 2.3 变量 18 2.4 常量 19 2.5 运算符 20 2.5.1 赋值运算符 20 2.5.2 比较运算符 20 2.5.3 逻辑
表
达式 21 2.5.4 算术运算符 21 2.5.5 按位运算符 22 2.5.6 加减运算过程 22 2.6 Object Pascal类型 23 2.6.1 类型的比较 23 2.6.2 字符 24 2.6.3 字符串 24 2.6.4 变体类型 32 2.6.5 Currency 39 2.7 用户自定义类型 39 2.7.1 数组 39 2.7.2 动态数组 40 2.7.3 记录 41 2.7.4 集合 42 2.7.5 对象 43 2.7.6 指针 44 2.7.7 类型别名 46 2.8 强制类型转换和类型约定 46 2.9 字符串资源 47 2.10 测试条件 47 2.10.1 if语句 47 2.10.2 case语句 48 2.11 循环 49 2.11.1 for循环 49 2.11.2 while循环 49 2.11.3 repeat...until 50 2.11.4 Break()过程 50 2.11.5 Continue()过程 50 2.12 过程和函数 50 2.13 作用域 50 2.14 单元 55 2.14.1 uses子句 55 2.14.2 循环单元引用 56 2.15 包 56 2.15.1
使用
Delphi的包 56 2.15.2 包的语法 56 2.16 面向对象编程 57 2.17
使用
Delphi对象 58 2.17.1 声明和实例化 58 2.17.2 析构 59 2.18 方法 59 2.18.1 方法的类型 60 2.18.2 属性 61 2.18.3 可见性
表
示符 62 2.18.4 友类 62 2.18.5 对象的秘密 63 2.18.6 TObject:所有对象的祖先 63 2.18.7 接口 63 2.19 结构化异常
处理
66 2.19.1 异常类 68 2.19.2 执行的流程 70 2.19.3 重新触发异常 71 2.20 运行期类型信息 72 2.21 总结 72 第3章 Win32 API 73 3.1 对象:以前和现在 73 3.1.1 内核对象 73 3.1.2 GDI和用户对象 75 3.2 多任务和多线程 75 3.3 Win32内存管理 76 3.3.1 什么是线性内存模式 76 3.3.2 Win32系统是怎样管理内存的 76 3.4 Win32的错误
处理
78 3.5 总结 78 第4章 应用程序框架和设计 79 4.1 理解Delphi环境和项目的体系结构 79 4.2 构成Delphi 5项目的文件 79 4.2.1 项目文件 80 4.2.2 单元文件 80 4.2.3 窗体文件 80 4.2.4 资源文件 81 4.2.5 项目选项及桌面设置文件 81 4.2.6 备份文件 81 4.2.7 包文件 82 4.3 项目管理提示 82 4.3.1 一个项目一个目录 82 4.3.2 共享代码的单元 82 4.3.3 多项目管理 84 4.4 Delphi 5项目的框架类 84 4.4.1 TForm类 84 4.4.2 TApplication类 89 4.4.3 TApplication的方法 91 4.4.4 TApplication的事件 92 4.4.5 TScreen类 93 4.5 定义公共体系结构:
使用
对象库 93 4.5.1 考虑应用程序的体系结构 93 4.5.2 Delphi固有的体系结构 94 4.5.3 体系结构的例子 94 4.5.4 子窗体TChildForm 94 4.5.5
数据库
基础模式窗体TDBMode- Form 96 4.5.6
数据库
导航/状态窗体TDBNavstat- Form 97 4.5.7
使用
框架进行应用程序结构 设计 102 4.6 一些项目管理的功能 103 4.6.1 在项目中添加资源 103 4.6.2 改变屏幕光标 105 4.6.3 避免创建一个窗体的多个实例 106 4.6.4 在DPR文件中增加代码 107 4.6.5 覆盖应用程序的异常
处理
107 4.6.6 显示一个封面 109 4.6.7 使窗体尺寸最小 110 4.6.8 运行没有窗体的项目 111 4.6.9 退出Windows 112 4.6.10 防止关闭Windows 113 4.7 总结 113 第5章 理解Windows消息 114 5.1 什么是消息 114 5.2 消息的类型 115 5.3 Windows消息系统是如何工作的 115 5.4 Delphi的消息系统 116 5.5 消息
处理
117 5.5.1 消息
处理
:不是无约定的 118 5.5.2 对Result域赋值 119 5.5.3 TApplication的OnMessage事件 119 5.6 发送自己的消息 120 5.6.1 Perform() 120 5.6.2 sendMessage()和PostMessage() 120 5.7 非标准的消息 121 5.7.1 通知消息 121 5.7.2 VCL内部的消息 122 5.7.3 用户自定义的消息 122 5.8 一个消息系统的剖析:VCL 123 5.9 消息与事件之间的关系 128 5.10 总结 129 第6章 代码标准文档 130 6.1 一般的源代码格式规则 130 6.1.1 缩进 130 6.1.2 边距 130 6.1.3 begin...end 130 6.2 Object Pascal 131 6.2.1 括号 131 6.2.2 保留字和关键字 131 6.2.3 过程和函数 131 6.2.4 变量 132 6.2.5 类型 133 6.2.6 构造类型 133 6.2.7 语句 134 6.2.8 结构化异常
处理
134 6.2.9 类 135 6.3 文件 136 6.3.1 项目文件 136 6.3.2 窗体文件 136 6.3.3 数据模块文件 137 6.3.4 远程数据模块文件 137 6.3.5 单元文件 137 6.3.6 文件头 138 6.4 窗体与数据模块 138 6.4.1 窗体 138 6.4.2 数据模块 139 6.5 包 139 6.5.1 运行期包与设计期包 139 6.5.2 文件命名标准 140 6.6 组件 140 6.6.1 自定义组件 140 6.6.2 组件实例的命名规则 140 6.7 代码标准文档升级 141 第7章
使用
ActiveX控件 142 7.1 什么是ActiveX控件 142 7.2 何
时
使用
ActiveX控件 142 7.3 把ActiveX控件加到组件面板上 143 7.4 Delphi组件外套 144 7.4.1 外套文件是从哪来的 152 7.4.2 枚举 152 7.4.3 控件接口 152 7.4.4 TOleControl的派生类 152 7.4.5 方法 152 7.4.6 属性 153 7.5 在应用程序中
使用
ActiveX控件 153 7.6 发布带有ActiveX控件的应用程序 154 7.7 注册ActiveX控件 155 7.8 BlackJack:一个OCX示范程序 155 7.8.1 纸牌 155 7.8.2 游戏 157 7.8.3 调用ActiveX控件的方法 165 7.9 总结 166 第二部分 高级技术 第8章
使用
GDI和字体的图像编程 167 8.1 TImage:Delphi的图像显示 167 8.2 存储图像 168 8.3
使用
TCanvas的属性 169 8.3.1 画笔 170 8.3.2
使用
TCanvas.Pixels属性 175 8.3.3
使用
刷子 175 8.3.4
使用
字体 180 8.3.5
使用
CopyMode属性 181 8.3.6 其他属性 184 8.4
使用
TCanvas的方法 184 8.4.1 用TCanvas画线 184 8.4.2 用TCanvas画几何形状 185 8.4.3 画图的示范程序 185 8.4.4 用TCanvas输出文字 189 8.5 坐标系统和映射模式 193 8.5.1 设备坐标系 193 8.5.2 逻辑坐标系 194 8.5.3 屏幕坐标系 194 8.5.4 窗体坐标系 194 8.5.5 坐标映射 195 8.5.6 设置映射模式 196 8.5.7 设置窗口/视区范围 196 8.5.8 关于映射模式的示范程序 197 8.6 创建一个绘画程序 202 8.7 编写动画程序 215 8.8 高级字体 221 8.8.1 Win32字体类型 222 8.8.2 基本字体元素 222 8.8.3 GDI字体分类 223 8.8.4 显示不同字体 223 8.9 实际创建一种字体 224 8.9.1 这个程序是如何工作的 224 8.9.2 显示字体的有关信息 230 8.10 总结 233 第9章 动态链接库 234 9.1 究竟什么是DLL 234 9.2 静态链接与动态链接 235 9.3 为什么要
使用
DLL 236 9.3.1 共享代码、资源和数据 236 9.3.2 隐藏实现的细节 237 9.3.3 自定义控件 237 9.4 创建和
使用
DLL 237 9.4.1 数美分:一个简单的DLL 237 9.4.2 显示DLL中的模式窗体 239 9.5 显示DLL中的无模式窗体 241 9.6 在Delphi应用程序中
使用
DLL 242 9.7 DLL的入口函数和出口函数 246 9.7.1 进程/线程初始化和终止例程 246 9.7.2 DLL入口/出口示例 246 9.8 DLL中的异常 250 9.8.1 在16位Delphi中捕捉异常 250 9.8.2 异常和Safecall指示符 250 9.9 回调函数 250 9.9.1
使用
回调函数 253 9.9.2 拥有者绘制的列
表
框 253 9.10 从DLL中调用回调函数 253 9.11 在不同的进程间共享DLL数据 256 9.11.1 一个可以被共享数据的DLL 256 9.11.2 访问DLL中的共享数据 259 9.12 引出DLL中的对象 261 9.13 总结 265 第10章 Delphi 5的打印 266 10.1 TPrinter对象 266 10.2 TPrinter.Canvas 267 10.3 简单打印 267 10.3.1 打印TMemo组件中的内容 267 10.3.2 打印位图 268 10.3.3 打印RTF格式的文本 269 10.4 打印窗体 269 10.5 高级打印 270 10.5.1 打印分栏报
表
270 10.5.2 放弃打印进程 275 10.5.3 打印信封 275 10.5.4 抽象打印 276 10.5.5 一个简单的打印预览程序 285 10.6 其他打印任务 286 10.6.1 TDeviceMode结构 286 10.6.2 设置打印份数 288 10.6.3 设置打印方向 288 10.6.4 设置纸张尺寸 288 10.6.5 设置纸张的长度 289 10.6.6 设置页的宽度 289 10.6.7 设置打印比例 289 10.6.8 设置打印颜色 289 10.6.9 设置打印质量 289 10.6.10 设置双面打印 290 10.6.11 指定默认打印机 290 10.7 获取打印机信息 291 10.7.1 GetDeviceCaps()和DeviceCapa- bilities() 292 10.7.2 获取打印机信息的示范程序 292 10.8 总结 303 第11章 编写多线程应用程序 304 11.1 对线程的解释 304 11.1.1 一种新型的多任务 304 11.1.2 在Delphi程序中
使用
多线程 304 11.1.3 关于线程的滥用 305 11.2 TThread对象 305 11.2.1 TThread基础 305 11.2.2 TThread实例 307 11.2.3 线程的终止 307 11.2.4 与VCL同步 308 11.2.5 一个演示程序 310 11.2.6 优先级和
时
序安排 311 11.2.7 挂起和唤醒线程 313 11.2.8 测试线程的
时
间 313 11.3 管理多线程 314 11.3.1 线程局部存储 314 11.3.2 线程同步 317 11.4 一个多线程的示范程序 325 11.4.1 用户界面 326 11.4.2 搜索线程 330 11.4.3 调整优先级 334 11.5 多线程与
数据库
335 11.6 多线程与图形
处理
340 11.7 总结 343 第12章 文件
处理
344 12.1
处理
文件的输入/输出 344 12.1.1 文本文件的
处理
344 12.1.2 类型文件的
处理
348 12.1.3 无类型文件的
处理
356 12.2 TTextRec 和TFileRec结构 359 12.3 内存映射文件 360 12.3.1 内存映射文件的应用 360 12.3.2
使用
映射文件 361 12.3.3 内存映射文件的一致性 366 12.3.4 文本搜索实用程序 366 12.4 目录和驱动器 373 12.4.1 获得有效驱动器和驱动器类型列
表
373 12.4.2 获取驱动器信息 374 12.4.3 获取Windows目录位置 376 12.4.4 获取系统目录的位置 376 12.4.5 获取当前目录 377 12.4.6 在目录中查找文件 377 12.4.7 复制和删除目录树 380 12.4.8 获取文件的版本信息 382 12.4.9 获取版本号 387 12.4.10 获得操作系统信息 388 12.4.11
使用
TVerInfoRes类 388 12.5
使用
SHFileOperation()函数 390 12.6 总结 391 第13章 核心技术 392 13.1 高级消息
处理
392 13.1.1 子类化 392 13.1.2 HookMainWindow() 396 13.2 防止同
时
出现多个应用程序实例 397 13.3
使用
Delphi的BASM 401 13.3.1 BASM是如何工作的 401 13.3.2 简易的参数访问 402 13.3.3 var声明的参数 402 13.3.4 Register调用约定 403 13.3.5 全汇编过程 403 13.3.6 记录 403 13.4
使用
挂钩 404 13.4.1 设置挂钩 404 13.4.2
使用
挂钩函数 405 13.4.3
使用
脱钩函数 405 13.4.4
使用
SendKeys:一个JournalPlay- back类型的挂钩 405 13.5
使用
C/C++的OBJ文件 416 13.5.1 调用一个函数 416 13.5.2 命名问题 417 13.5.3 共享数据 417 13.5.4
使用
Delphi RTL 418 13.6
使用
C++类 422 13.7 替换 426 13.7.1 generic替换 426 13.7.2 WM_COPYDATA 435 13.8 获取包的信息 440 13.9 总结 443 第14章 获取系统信息 444 14.1 InfoForm:获取一般信息 444 14.1.1 格式化字符串 444 14.1.2 获取内存状态 445 14.1.3 获取操作系统版本信息 446 14.1.4 获取目录信息 447 14.1.5 获取系统信息 448 14.1.6 检查环境 450 14.2 平台无关性 455 14.3 Windows 95/98:
使用
ToolHelp32 455 14.3.1 快照 456 14.3.2 列举进程 457 14.3.3 列举线程 460 14.3.4 列举模块 461 14.3.5 列举堆 462 14.3.6 堆的视图 465 14.3.7 程序源码 466 14.4 Windows NT/2000: PSAPI 474 14.5 总结 485 第15章 移植到Delphi 5 486 15.1 Delphi 5的新功能 486 15.1.1 哪个版本 486 15.1.2 单元、组件和包 487 15.2 从Delphi 4移植到Delphi 5 487 15.2.1 IDE问题 488 15.2.2 RTL问题 488 15.2.3 VCL问题 488 15.2.4 Internet开发问题 488 15.2.5
数据库
问题 488 15.3 从Delphi 3移植到Delphi 5 489 15.3.1 无符号的32位整数 489 15.3.2 64位整数 490 15.3.3 Real类型 490 15.4 从Delphi 2移植到Delphi 5 490 15.4.1 改变为Boolean类型 490 15.4.2 ResourceString 490 15.4.3 RTL的改变 491 15.4.4 TCustomForm 491 15.4.5 GetChildren() 491 15.4.6 自动化服务器 491 15.5 从Delphi 1移植到Delphi 5 491 15.5.1 字符串和字符 492 15.5.2 变量长度和范围 497 15.5.3 记录的排列 497 15.5.4 32位的数学运算 498 15.5.5 TDateTime类 498 15.5.6 单元结束代码 498 15.5.7 汇编语言 499 15.5.8 调用约定 499 15.5.9 动态链接库 500 15.5.10 Windows操作系统的变化 501 15.5.11 32位的地址空间 501 15.5.12 32位资源 501 15.5.13 VBX控件 502 15.5.14 Windows API函数的变化 502 15.5.15 16位和32位并存 504 15.6 总结 504 第16章 MDI应用程序 505 16.1 创建MDI应用程序 505 16.1.1 理解MDI基础 505 16.1.2 子窗体 506 16.1.3 主窗体 522 16.2 菜单 528 16.2.1 用MDI程序合并菜单 528 16.2.2 在菜单中列出打开的文档 528 16.3 杂类MDI技术 529 16.3.1 在MDI客户区输出一幅位图 529 16.3.2 创建一个隐藏的子窗体 534 16.3.3 最小化、最大化、还原所有MDI 子窗体 536 16.4 总结 538 第17章 用剪贴板共享信息 539 17.1 剪贴板基础 539 17.1.1 剪贴板对文本操作 540 17.1.2 剪贴板对位图操作 540 17.2 创建你自己的剪贴板格式 541 17.2.1 创建一个感知剪贴板的对象 541 17.2.2
使用
自定义的剪贴板格式 545 17.3 总结 547 第18章 多媒体编程 548 18.1 创建一个简单的媒体播放器 548 18.2 播放WAV文件 549 18.3 播放视频 550 18.3.1 显示第一帧 550 18.3.2
使用
Display属性 551 18.3.3
使用
DisplayRect属性 551 18.3.4 理解TMediaPlayer事件 552 18.3.5 DDGMPlay的源代码 552 18.4 设备支持 553 18.5 创建音频CD播放器 554 18.5.1 显示闪屏 555 18.5.2 开始编写CD播放器 555 18.5.3 更新CD播放器的信息 557 18.5.4 刷新CD播放器的方法 558 18.5.5 CD播放器的源代码 559 18.6 总结 565 第19章 测试与调试 566 19.1 常见的编程错误 567 19.1.1 在类的实例创建之前
使用
了它 567 19.1.2 确保类的实例被释放 567 19.1.3 掌握指针 568 19.1.4
使用
未初始化的PChar类变量 568 19.1.5 释放空指针 569 19.2
使用
内部集成调试器 569 19.2.1
使用
命令行参数 569 19.2.2 断点 569 19.2.3 逐行执行代码 571 19.2.4
使用
Watch窗口 572 19.2.5 Debug Inspector 572 19.2.6 计算和
修改
572 19.2.7 访问调用栈 572 19.2.8 查看线程 573 19.2.9 事件日志 573 19.2.10 模块视图 574 19.2.11 调试DLL 574 19.2.12 CPU视图 575 19.3 总结 575 第三部分 基于组件的开发 第20章 VCL元素和运行期类型信息 577 20.1 什么是组件 577 20.2 组件的类型 578 20.2.1 标准控件 578 20.2.2 自定义控件 578 20.2.3 图形控件 578 20.2.4 非可视组件 579 20.3 组件的结构 579 20.3.1 属性 579 20.3.2 属性的类型 580 20.3.3 方法 580 20.3.4 事件 581 20.3.5 流属性 582 20.3.6 拥有关系 582 20.3.7 父子关系 583 20.4 可视组件的层次关系 583 20.4.1 TPersistent类 584 20.4.2 TComponent类 584 20.4.3 TControl类 585 20.4.4 TWinControl类 585 20.4.5 TGraphicControl类 586 20.4.6 TCustomControl类 586 20.4.7 其他类 587 20.5 运行期类型信息 589 20.5.1 TypInfo.pas单元:定义运行类型 信息 589 20.5.2 获取类型信息 591 20.5.3 获取方法指针的类型信息 596 20.5.4 获取有序类型的类型信息 600 20.5.5 通过RTTI给属性赋值 604 20.6 总结 606 第21章 编写自定义组件 607 21.1 组件设计基础 607 21.1.1 确定是否需要编写组件 607 21.1.2 编写组件的一般步骤 607 21.1.3 确定一个祖先类 608 21.1.4 创建一个组件单元 609 21.1.5 添加属性 609 21.1.6 加入事件 615 21.1.7 创建自定义的方法 619 21.1.8 构造器和析构器 619 21.1.9 注册组件 620 21.1.10 测试组件 621 21.1.11 提供组件图标 623 21.2 一个组件的示例 623 21.2.1 扩展Win32组件外套功能 624 21.2.2 TddgRunButton: 创建属性 631 21.3 TddgButtonEdit:一个容器组件 636 21.3.1 设计 636 21.3.2 显现属性 637 21.3.3 显现事件 637 21.3.4 TddgDigitalClock:创建组件事 件 639 21.3.5 把窗体加到组件面板上 642 21.4 组件包 644 21.4.1 为什么
使用
包 644 21.4.2 什么情况下不
使用
包 645 21.4.3 包的类型 645 21.4.4 包文件 645 21.4.5 在Delphi 5应用程序中
使用
包 645 21.4.6 把包安装到IDE中 645 21.4.7 设计自己的包 646 21.4.8 包的版本 649 21.4.9 包的编译指令 649 21.4.10 关于{$WEAKPACKAGEUNIT} 指令 649 21.4.11 包的命名约定 650 21.5 附加包 650 21.6 总结 655 第22章 高级组件技术 656 22.1 伪可视组件 656 22.1.1 扩展提示功能 656 22.1.2 创建一个THintWindow的派生 类 656 22.1.3 椭圆型的窗口 658 22.1.4 使派生的提示窗口有效 659 22.1.5 放置TDDGHintWindow 659 22.2 动态组件 659 22.2.1 走马灯组件 659 22.2.2 编写这个组件 659 22.2.3 在内存中的位图上输出 659 22.2.4 输出组件 661 22.2.5 使组件动起来 661 22.2.6 测试TddgMarquee组件 668 22.3 编写属性编辑器 670 22.3.1 派生出一个属性编辑器对象 670 22.3.2 把属性当作文本来编辑 671 22.3.3 注册新的属性编辑器 674 22.3.4 用对话框来编辑属性 675 22.4 组件编辑器 677 22.4.1 TComponentEditor 677 22.4.2 一个简单的组件 678 22.4.3 一个简单的组件编辑器 679 22.4.4 注册组件编辑器 679 22.5 对非公开的组件数据进行流操作 681 22.5.1 声明属性 681 22.5.2 DefineProperty()的例子 682 22.5.3 TddgWaveFile:调用Define- BinaryProperty()的例子 684 22.6 属性类别 690 22.6.1 类别的类 690 22.6.2 自定义类别 691 22.7 组件列
表
:TCollection和 TCollectionItem 694 22.7.1 声明TCollectionItem类: TRunBtnItem 695 22.7.2 声明TCollection类: TRunButtons 696 22.7.3 实现TddgLaunchPad、TRun- BtnItem和TRunButtons 696 22.7.4 用对话框属性编辑器编辑 TCollectionItem组件的列
表
702 22.8 总结 711 第23章 COM和ActiveX 712 23.1 COM基础 712 23.1.1 COM:组件对象模型 712 23.1.2 COM、ActiveX、OLE的异同 713 23.1.3 术语 713 23.1.4 ActiveX的伟大之处 713 23.1.5 OLE 1和OLE 2 713 23.1.6 结构化存储 714 23.1.7 统一数据传输 714 23.1.8 线程模式 714 23.1.9 COM+ 714 23.2 COM与Object Pascal 714 23.2.1 接口 715 23.2.2
使用
接口 716 23.2.3 HResult返回类型 719 23.3 COM对象和类工厂 720 23.3.1 TComObject和TComObject- Factory 720 23.3.2 in-process COM服务器 721 23.3.3 创建一个in-proc COM服务器实 例 722 23.3.4 out-of-process COM服务器 723 23.4 聚合 723 23.5 分布式COM 723 23.6 自动化 724 23.6.1 IDispatch接口 724 23.6.2 类型信息 725 23.6.3 后期捆绑与前期捆绑 725 23.6.4 注册 725 23.6.5 创建自动化服务器 725 23.6.6 创建自动化控制器 740 23.7 高级自动化技术 745 23.7.1 自动化事件 745 23.7.2 自动化集合 754 23.7.3 类型库中新的接口类型 760 23.7.4 交换二进制数据 761 23.7.5 COM的语言支持 763 23.8 MTS 766 23.8.1 为什么会出现MTS 767 23.8.2 什么是MTS 767 23.8.3 Delphi中的MTS 770 23.9 TOleContainer 785 23.9.1 一个简单的范例程序 785 23.9.2 一个稍复杂的范例程序 787 23.10 总结 794 第24章 扩展Windows外壳 795 24.1 托盘图标组件 795 24.1.1 API 795 24.1.2
处理
消息 797 24.1.3 图标及提示 797 24.1.4 鼠标点击 798 24.1.5 隐藏应用程序 799 24.1.6 托盘图标应用程序举例 805 24.2 应用程序桌面工具栏 807 24.2.1 API 807 24.2.2 TAppBar:AppBar的窗体 808 24.2.3
使用
TAppBar 815 24.3 外壳链接 817 24.3.1 获取一个IShellLink实例 818 24.3.2
使用
IShellLink 819 24.3.3 创建一个外壳链接 820 24.3.4 获取及设置链接信息 821 24.3.5 一个例子程序 824 24.4 外壳扩展 831 24.4.1 COM对象向导 832 24.4.2 复制钩子
处理
器 832 24.4.3 上下文菜单
处理
器 836 24.4.4 图标
处理
器 844 24.5 总结 850 第25章 创建ActiveX控件 851 25.1 为什么要创建ActiveX控件 851 25.2 创建一个ActiveX控件 851 25.2.1 ActiveX控件向导 852 25.2.2 ActiveX框架 875 25.2.3 属性页 877 25.3 ActiveForm 886 25.4 在Web上的ActiveX 892 25.4.1 与Web浏览器通信 892 25.4.2 Web发布 901 25.5 总结 903 第26章
使用
Delphi Open Tools API 904 26.1 Open Tools API接口 904 26.2
使用
Open Tools API 905 26.2.1 Dumb向导 905 26.2.2 Wizard向导 908 26.2.3 DDG Search 916 26.3 窗体向导 925 26.4 总结 931 第27章
使用
Delphi开发CORBA 932 27.1 ORB 932 27.2 接口 932 27.3 Stub和Skeleton 933 27.4 VisiBroker的ORB 933 27.4.1 VisiBroker的运行
时
支持服务 933 27.4.2 VisiBroker管理工具 934 27.5 Delphi的CORBA支持 934 27.5.1 CORBA的类支持 935 27.5.2 CORBA对象向导 936 27.5.3 Delphi的类型库编辑器 941 27.6 在Delphi 5中创建CORBA解决方案 942 27.6.1 建立一个CORBA服务器 942 27.6.2 实现IQueryServer的方法 943 27.6.3 编译一个静态绑定的CORBA 客户 956 27.6.4 编译一个动态绑定的CORBA 客户 958 27.6.5 跨语言的CORBA 960 27.7
使用
VisiBroker ORB 967 27.8 总结 967 第四部分 开发
数据库
第28章 编写桌面
数据库
应用程序 969 28.1
使用
数据集 969 28.1.1 VCL的
数据库
体系结构 970 28.1.2 BDE数据访问组件 970 28.1.3 打开一个数据集 971 28.1.4 浏览数据集 971 28.1.5 对字段操作 975 28.1.6 刷新数据集 985 28.1.7 变化的状态 986 28.1.8 过滤器 986 28.2
使用
TTable组件 988 28.2.1 查找记录 988 28.2.2 主/细
表
990 28.2.3 TTable的事件 990 28.2.4 通过代码创建一个
数据库
表
991 28.3 数据模块 992 28.4 搜索、设置范围和过滤的示例 992 28.4.1 数据模块 992 28.4.2 主窗体 993 28.4.3 Range窗体 995 28.4.4 Key Search窗体 996 28.4.5 Filter窗体 998 28.5 TQuery和TStoredProc:其他数据 集 1000 28.6 文本文件
数据库
表
1001 28.6.1 概要文件 1001 28.6.2 数据文件 1002 28.6.3
使用
文本
数据库
表
1002 28.6.4 限制 1003 28.6.5 从文本
数据库
表
中引入数据 1003 28.7 用
ODBC
连接 1004 28.7.1 到哪儿找
ODBC
驱动程序 1004 28.7.2
ODBC
实例:连接MS Access 1004 28.8 ActiveX Data Object 1007 28.8.1 Microsoft 数据访问简介 1007 28.8.2
ADO
Express组件 1008 28.8.3 连接一个
ADO
数据存储 1008 28.8.4 示例:通过
ADO
连接 1010 28.8.5
ADO
开发 1011 28.9 总结 1011 第29章 开发客户/服务器应用程序 1012 29.1 为什么要采用客户/服务器结构 1012 29.2 客户/服务器体系结构 1013 29.2.1 客户 1013 29.2.2 服务器 1013 29.2.3 业务规则 1014 29.2.4 胖客户、胖服务器、中间层:业 务规则属于哪一端 1014 29.3 客户/服务器模型 1015 29.3.1 两层模型 1015 29.3.2 三层模型 1016 29.4 客户/服务器与桌面
数据库
开发的比 较 1017 29.4.1 面向集合与面向记录 1017 29.4.2 数据安全 1017 29.4.3 记录锁定方法 1017 29.4.4 数据完整性 1018 29.4.5 面向事务 1018 29.5 SQL在客户/服务器开发中的角色 1018 29.6 Delphi客户/服务器开发 1019 29.7 服务器:后端设计 1019 29.7.1
数据库
对象 1019 29.7.2 定义
数据库
表
1020 29.7.3
使用
域 1021 29.7.4 用视图、存储过程和触发器定义 业务规则 1022 29.7.5
数据库
对象的访问权限 1027 29.8 客户:前端开发 1028 29.8.1
使用
TDatabase组件 1028 29.8.2 TTable还是TQuery 1034 29.8.3
使用
TQuery组件 1036 29.8.4 执行存储过程 1041 29.9 总结 1043 第30章 扩展
数据库
VCL 1044 30.1
使用
BDE 1044 30.1.1 BDE单元 1044 30.1.2 Check() 1044 30.1.3 指针和句柄 1045 30.1.4 使指针同步 1045 30.2 dBASE
表
1045 30.2.1 物理记录编号 1046 30.2.2 显示被删除的记录 1047 30.2.3 测试被软删除的记录 1047 30.2.4 恢复被软删除的记录 1048 30.2.5 紧缩
表
1048 30.3
Par
ado
x
表
1049 30.3.1 记录序号 1049 30.3.2 紧缩 1049 30.3.3 限制查询结果 1055 30.3.4 BDE杂项 1056 30.3.5 编写数据感知VCL控件 1059 30.4 扩展TDataSet 1063 30.4.1 过去 1063 30.4.2 现在 1063 30.4.3 创建一个TDataSet派生类 1064 30.5 总结 1083 第31章 用WebBroker使应用程序具有 Internet功能 1084 31.1 ISAPI、NSAPI和CGI—Web服务 器扩展 1085 31.1.1 公共网关接口 1085 31.1.2 ISAPI和NSAPI 1085 31.2 用Delphi创建Web应用程序 1086 31.2.1 TWebModule和TWeb- Dispatcher 1086 31.2.2 TWebRequest和TWeb- Response 1088 31.3 用HTML内容生成器建立动态网 页 1091 31.3.1 TPageProducer 1091 31.3.2 TDatasetTableProducer和 TQueryTableProducer 1092 31.4
使用
cookie保存状态 1097 31.5 重定向到另一个Web站点 1099 31.6 从HTML
表
单中获取信息 1099 31.7 数据流 1101 31.8 总结 1104 第32章 MIDAS开发 1105 32.1 多层应用程序的结构 1105 32.2 多层体系结构的优点 1106 32.3 典型的MIDAS体系结构 1107 32.3.1 服务器 1107 32.3.2 客户 1109 32.4 用MIDAS建立应用程序 1110 32.4.1 设置服务器 1110 32.4.2 创建客户 1111 32.5 增强应用程序的更多选择 1115 32.5.1 客户优化技巧 1115 32.5.2 服务器端的技巧 1116 32.6 几个实例 1117 32.6.1 连接 1117 32.6.2 MIDAS的Web功能 1119 32.7 客户数据集的更多功能 1125 32.7.1 嵌套的数据集 1125 32.7.2 客户主/细连接 1125 32.7.3 两层应用程序 1130 32.8 部署MIDAS应用程序 1131 32.9 总结 1134 第五部分 快速开发
数据库
应用程序 第33章 货物管理程序:客户/服务器 开发 1135 33.1 设计后端 1135 33.1.1 定义域 1136 33.1.2 定义
表
1137 33.1.3 定义生成器 1138 33.1.4 定义触发器 1138 33.1.5 定义存储过程 1139 33.1.6 授权 1141 33.2 集中
数据库
访问:业务规则 1141 33.2.1 登录和退出方法 1150 33.2.2 Customer
表
的方法 1151 33.2.3
Par
t
表
的方法 1152 33.2.4 Sales
表
的方法 1152 33.2.5 临
时
表
的方法 1153 33.2.6 TDataModule操纵数据访问 组件的事件 1153 33.3 设计用户界面 1153 33.3.1 TMainForm:应用程序的主窗 体 1154 33.3.2 TCustomerForm:客户输入 1158 33.3.3 T
Par
tsForm: 货物输入 1161 33.3.4 TSalesForm: 销售浏览 1165 33.3.5 TNewSalesForm: 销售输入 1165 33.3.6 CustomerSearch对话框 1169 33.4 总结 1173 第34章 客户跟踪系统:MIDAS开发 1174 34.1 设计服务器应用程序 1174 34.2 设计客户应用程序 1176 34.2.1 客户数据模块 1176 34.2.2 客户主窗体 1184 34.3 总结 1190 第35章 错误报告工具:桌面
数据库
开发 1191 35.1 通用应用程序的需求 1191 35.1.1 为WWW做准备 1191 35.1.2 用户的数据输入和登录 1191 35.1.3 错误
处理
、浏览和过滤 1191 35.1.4 错误注解 1191 35.1.5 用户界面的功能 1192 35.2 数据模型 1192 35.3 开发数据模块 1192 35.3.1 应用程序初始化和登录 1201 35.3.2 生成
Par
ado
x关键值 1202 35.3.3 错误
处理
例程 1202 35.3.4 浏览/过滤错误 1202 35.3.5 增加用户 1202 35.3.6 加入注解 1204 35.4 开发用户界面 1205 35.4.1 主窗体 1205 35.4.2 用户界面的其他问题 1211 35.5 使应用程序具有Web功能 1211 35.6 总结 1211 第36章 错误报告工具:
使用
WebBroker 1212 36.1 网页布局 1212 36.2
修改
数据模块 1213 36.3 配置TDataSetTableProducer组件: dstpBugs 1213 36.4 配置TWebDispatcher组件: wbdpBugs 1213 36.5 配置TPageProducer组件: pprdBugs 1214 36.6 编写DDGWebBugs ISAPI服务器: 增加TActionItem实例 1214 36.6.1 辅助例程 1214 36.6.2 介绍网页 1215 36.6.3 获取并校验用户登录名字 1216 36.7 浏览错误信息 1219 36.7.1 浏览所有错误信息 1219 36.7.2 浏览用户自己的错误信息 1221 36.7.3 格式化
表
格单元并显示错误细 节 1222 36.8 增加新的错误信息 1223 36.8.1 获取错误信息 1223 36.8.2 校验插入的错误信息 1225 36.9 总结 1228 第六部分 附 录 附录A 错误信息与异常 1229 附录B BDE错误代码 1247 附录C 参考文献 1264
Delphi编程技巧.rar
不规则窗口的建立(字体窗体) 在Delphi中自动检测、建立
数据库
别名和
表
格 用Delphi制作留言板 用DEPHI 3.0实现动画ABOUT窗口 在DELPHI中
处理
时
间 如何为Delphi程序添加事件和事件
处理
器 在DELPHI程序中
使用
ADO
对象存取
ODBC
数据库
轻轻松松在DELPHI3.0中实现三态按钮 Api函数列
表
【与文件有关】 Api函数列
表
【与打印有关】 Delphi中TApplication类的巧用 Delphi 中自做动态显示的控件 DELPHI 中 自 适 应
表
单 的 实 现 在Delphi 中 利 用 Tbatch 组 件 如何在注册
表
中注册BDE 如何在标题栏上增加按钮 CGI技术及其开发(一) CGI技术及其开发(二) 用Delphi实现壁纸更换 在Delphi中获取和
修改
文件的
时
间 任何动态改变/添加网络设置中的 TCP/IP 的 DNS 地址 让彩色光标出现在Delphi程序中 面向组件的系统开发方法 COM/DCOM中如何传递数组 COM/DCOM的区别与联系 定制Delphi应用程序的系统菜单 Delphi 3中Cookie的建立
使用
一 个 实 用 的Delphi 屏 幕 拷 贝 程 序 的 设 计 用Delphi制作动态菜单 用Delphi进行OpenGL编程学习心得 开 发 基 于ORACLE7 数 据 库 的 管 理 信 息 系 统 用Delphi 实 现 自 定 义 颜 色 对 话 框 及 其 构 件 Delphi自定义消息应用一例 自 定 义 快 速 报
表
的 打 印 预 览 窗 口 如何把文件删除到回收站中 在Delphi与C 之间实现函数与对象共享 编 译 错 误 信 息 DELPHI AND THE INTERNET by Charlie Calvert [1] DELPHI AND THE INTERNET by Charlie Calvert [2] Delphi之快速设计(程序设计篇) Delphi之快速设计(界面设计篇) 在DELPHI2.0/3.0中直接操作端口 开 发AS/400 应 用 系 统: PB5 与Delphi3 的 比 较 检查驱动器是否就绪 在Delphi应用程序中拖动控件 用
修改
文件
时
间的方法来加密文件 资 源 文 件 在DELPHI 中 的 使 用 怎样建立简单的任务栏应用程序 控 制 系 统 菜 单 用Dephi 程 序 维 护
Par
ado
x 数 据
表
的 索 引 用Delphi实现无边界窗体的移动 Delphi函数参考手册
数据库
4,011
社区成员
39,816
社区内容
发帖
与我相关
我的任务
数据库
VC/MFC 数据库
复制链接
扫一扫
分享
社区描述
VC/MFC 数据库
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章