DELPHI基础教程:SQL编程(一)[2]

DELPHI基础教程:SQL编程(一)[2],第1张

静态方式是把SQL命令文作为TQuery部件的SQL属性值进行设置 这样 当执行应用程序时 Delphi便执行TQuery部件SQL属性中设置的SQL命令 如果是SQL中的查询命令 把TQuery部件通过TDataSource部件与数据控制部件相连 查询的结果将会显示在与 TQuery部件相连接的数据浏览部件中 动态SQL语句是指SQL语句中包含一些参数变量 在程序中可以为这些参数赋值 在程序运行过程中 各个参数值是变化的 TQuery部件的SQL 属性中的SQL语句的编写也有两种方法 一种方法是在程序设置阶段便将相应的SQL语句写入到TQuery的SQL属性中 另一种方法是在Delphi开发的应用程序将SQL语差敏句 包含在Pascal代码单元中

在SQL编程中使用TQuery部件的具体方法步骤如下

①为TQuery部件设置DatabaseName属性 它可以是用BDE建立的数据库的别名 或桌面数据库系统中的目录名或数据库服务器中的文件名 如果在应用中使用了TDatabase 部件 那么TQuery部件的DatabaseName属性可以是TDatabase部件中定义的一个数据库别名 详细情况请参看 TDatabase部件的使用

②为TQuery部件设置SQL属性 TQuery部件的SQL属性值就是应用程序要执行的SQL 命令文本 设置SQL属性有两种方法

● 在程序设计过程中 我们可以通过对象浏览器(Object Inspector)编辑SQL属性在Object Inspector中选择SQL属性 这样会打开String List Editor窗口 在其中我们便可以编写SQL命令 我还可以打开Visual Query Builder来编写SQL命令 (只有Delphi的客户/服务器版本才具有这一工具)

● 将SQL命令包含在Pascal代码单元中

旦则在程序运行过程中 首先调用TQuery部件的Close方法关闭当前的TQuery部件 然后调用Clear方法清除SQL属性 并说明新的SQL命令文本 然后调用Add方法 将新的SQL命令文本加入到SQL属性中

③通过调用TQuery部件的Open方法或ExecSQl方法执行 SQL 命令 Open 方法只执行Select命令 ExecSQL方法还可以执行其它的SQL命令 Open方法和ExecSQL 方法的区别我们在后面的章节里会进一步地加以讨论的

如果使用动态SQL语句 首先调用prepare方法 给动态SQL语句中的参数赋值 然后再调用Open方法或ExecSQL方法 调用propare 方法并不是必须的 但是对于要多次执行TQuery部件中SQL属性中的动态SQL语句 调用Prepare可以大大提高TQuery部件执行SQL语句的性能

在TQuery部虚迟枝件中编写简单的SQL查询命令

在这一节里我们将学习如何使用TQuery部件编写简单的SQL查询命令 并在Delphi 应用程序中实现SQL查询

例如 如果我们想查询出表Customer DB中客户的编号和公司名称 我们按下列步骤来实现

①在应用窗体中放置一个TQuery部件 一个TDataSource部件一个TDataGrid部件 并将它们连接起来

②设置窗体TQuery 部件Query 的DatabaseName属性值为DBDEMOS

③双击Object Inspector窗口中Query 的SQL 属性 Delphi 将显示 String List Editor窗口

④在图 中的窗口中输入SQL语句

Select CustNo Company From Custormer

⑤单击OK按钮 关闭String List Editor窗口

⑥设置Query的Open属性为True

SQL语言编程概述

在Delphi应用程序中的SQL命令语句是包含在TQuery部件的SQL属性中 TQuery部件的SQL属性是TString类型的 也就是说SQL属性值是一个字符串列表 这个字符串列表非常类似于一个字符串类型的数组 有关TString类型的信息请参看联机帮助 在前一节里我们介绍了TQuery部件可以执行两种SQL语句

● 静态SQL语句

● 动态SQL语句

静态SQL语句在程序设计时便已固定下来 它不包含任何参数和变量 例如下面的语句便是一条静态SQL语句

Select * From Cusromer Where CustNo =

而动态SQL语句 也被称作参数化的语句 在其中间包含着表示字段名或表名的参数 例如下面的语句是一条动态SQL语句

Select * From Customer Where CustNo =: Number

其中的变量Number便是一个参数变量 它由一个冒号引导 在程序运行过程中 必须要为该参数赋值 该条SQL语句才能正确执行 每次运行应用程序时可以为该参数变量赋予不同的值

    SQL命令文本的编写

使用String List Editor编写

我们要为TQuery部件的SQL属性设置SQL命令文本时 可以在应用窗体中选择TQuery部件且双击Object Inspector窗口中的SQL属性 这样便打开了String List Editor 窗口 在该窗口中我们便可以编写各种SQL命令 如图 所示

在编写完适当的SQL语句之后 选择 OK 按钮便可以将编辑器中的 SQL 命令文装入到TQuery部件的SQL属性中 选择SAVE按钮可以将编写好的SQL命令保存到一个文件中供以后编程时使用 我们在编写SQL命令文本时还可以选择Load按钮从一个 SQL 命令文件中调入SQL命令 在程序运行过程中 要想设置TQuery部件的SQL属性 必须首先调用Close方法 关闭TQuery部件 然后再调用Clear方法清除SQL属性中现存的SQL命令语句 最后再调用Add方法为SQL属性设置新的SQL命令语句 例如

Query Close {关闭Query )

Query SQL Clear {清除SQL属性中的SQL命令语句}

Query SQL Add( Select * From Country )

Query SQL Add( Where Name = ARGENTINA )

在为TQuery部件设置SQL属性时调用Close方法总是很安全的 如果TQuery部件已经被关闭了 调用Close方法时不会产生任何影响 在应用程序中为SQL属性设置新的SQL 命令语句时 必须要调用Clear方法以清除SQL属性中现存的SQL命令语句 如果不调用Clear方法 便调用Add方法向SQL属性中设置SQL命令语句 那么新设置的SQL命令语句会追加在现存SQL命令语句后面 在程序运行时常常会出现出乎意料的查询结果甚至程序无法运行下去

在这里要特别注意的 一般情况下TQuery部件的SQL属性只能包含一条完整的SQL语句 它不允许被设置成多条SQL语句 当然有些数据库服务器也支持在TQuery部件的SQL属性中设置多条SQL语句 只要数据库服务器允许这样 我们在编程时可以为 SQL 属性设置多条SQL语句

lishixinzhi/Article/program/Delphi/201311/25145

利用参数编辑器(Parameter Editor)来为参数赋值

具体方法是 选中TQuery部件 单击鼠标右键 然后从中选择Define Parameters 便可以打开参数编辑器

例如 在TQuery部件的SQL属性中我们设置如下的SQL语句

Setect * From Customer Where CustNO=:Number

TQuery的DatabaseName属性为DBDEMOS 其中Number为参数变量 我们便可以为参数Number赋值 在Datetype组合框中选择该参数的数据类型为整数Integer 在Value编辑框中可以为参数Number赋一个值 也可以单击Null Value检查框为参数Number赋一个空值Null 给参数赋值之后 单击OK按钮 这样TQuery部件中的SQL 查询便准备好了 而且参数值也被赋给了动态SQL语句中相应的参数 此时当把TQuery 部件的Active属性设置成True时 在与TQuery部件相连的数据浏览部件中会显示出查询结果 通过参数编辑器为参数赋值 这种方式缺乏应有的灵活性 在实际应用中用得较少 在实际应用中程序设计人员希望用更灵活方便的方式为参数赋值 那就是我们接下来要介绍的另一种途径

在运行过程中 通过程序为参数赋值

用这种方式为参数赋值有三种方法

①根据参数在SQL语句中出现的顺序 设置TQuery部件的Params属性值为参数赋值

②直接根据SQL语句中各参数的名字 调用ParamByName方法来为各参数赋值

③将TQuery部仔银迟件的DataSource属性设置为另一个数据源 这样将另一个数据源中与当前TQuery部件的SQL语句中的参数名相匹配的字段值赋给其对应的参数

这三种方法我们将在下面的三小节中具体地介绍

使用Params属性为参数赋值

TQuery部件具有一个Params属性 它们在设计时不可用 在程序运行过程中可用 并且是动态建立的 当为TQuery部件编写动态SQL 语句时 Delphi 会自动地建立一个数组Params 数组Params是以 下标开始的 依次对应动态SQL 语句中的参数 也就是说动态SQL语句中第一个参数对应Params[ ] 第二个参数对应params[ ] 依此类推

例如 一个TQuery部件Query 我们为它编写的动态SQL语句是

Insert Into Customer(CustNo Name Country)

Values(念李 CustNo :Name : Country)

对于上述这条动态SQL语句中的参数 我们可以利用TQuery部件的params 属性为参数赋值

Query params[ ] AsString :=

Query params[ ] AsString := Lichtenstein

Query params[ ] AsString := USA

上述语句将把 赋给参数 Cuse_No Lichtenstein 赋给参数 Name USA 赋给参数 Country

使用ParamByName方法为参数赋值

ParamByName是一个函数 用动态SQL语句中的参数作为调用ParamByName函数的参数 这样便可以为它们赋值 使用这种赋值方法 必须要知道动态SQL语句参数的名字

例如在 节中的例子中 也可以用下述方法给参数赋值

Query ParamByName( CustNo ) AsString :=

Query ParamByName( Name ) AsString := Lichtenstein

Query ParamByName( Country ) AsString := USA

使用这种方法同样可以为各参数赋值 而且更加直观一些

使用Datasource属性为参数赋值

上述两种方法的共同特点是 我们在为各参数赋值时 我们是知道各参数对应的具体参数值的 而在具体的应用程序中 有些参数值常常是无法确定的 例如参数值来自于另搏宴一个查询结果 对于这种情况 Delphi提供了使用Datasource属性为动态SQL 语句中尚存在没有赋值的参数时 Delphi 会自动检查 TQuery 部件的 Datasource 属性 如果为Datasource属性设置了属性值(该属性的值是另一个TDatasource部件的名字) Delphi 会把没有赋值的参数与TDatasource部件中的各字段比较 Delphi 会将相应的字段值赋给与其相匹配的参数 利用这种方法也能实现所谓的连接查询 我们在学习使用TTable部件时 便会创建主要 明细型数据库应用 用TQuery部件创建的连接查询与主要 明细型应用是相似的

例如 在如图 所示的应用中 设置了下列部件

● 一个TTable部件

名字为Cust 它的DatabaseName属性为DEMOS TableName属性为Customer

● 一个TDatasource部件

名字为Custsource 其Dataset属性被设置为Cust

● 一个TQuery部件

名字为ORDERS 其DatabaseName被设置为DEMOS SQL属性值为

Select Orders CustNo Orders OrderNo Orders SaleDate FROM Orders

WHERE Orders CustNo =: CustNo

ORDERS的DataSouce属性被设置为CustSource

● 一个TDatasource部件

名字为OrderSource 其DataSet属性被设置为Orders

● 两个TDBGrid部件

它们分别连接CustSource和OrderSource

TQuery部件Orders中的动态SQL语句中的参数 CustNo在程序设计过程中没有给它赋值 当该应用程序运行时Delphi会自动地到其Datasource属性中说明的数据源CustSource中查找与参数 CustNo匹配的字段 而CustSource中正好有一个名字为 CustNo 的字段与参数 CustNo匹配 这样Customer表中的CustNo字段值被赋给了参数 : CustNo 而当每移动Customer表中的记录指针 参数 CustNo的值会随之改变 而参数 CustNo的值发生改变时 Orders中的动态SQL语句会根据新的参数值重新查询 从数据库表中获取相应的订单数据 这样也变实现了类似于主要 明细型应用 即连接查询

Prepare方法的使用

在使用动态SQL语句编程时 常常用到一个很重要的方法prepare 调用prepare 方法之后 Delphi会将带参数的SQL语句传送给与其对应的数据库引擎 对动态SQL语句进行语法分析和优化 虽然在用动态SQL语句编程时 调用prepare方法并不是必须的 但是这里我们要极力推荐调用prepare方法 因为调用prepare方法后 会大大提高动态SQL 语句的执行性能 特别是当要反复多次执行同一条动态SQL语句时 其优越性会更加明显 如果在应用程序中执行一条SQL语句之前并没有显式地调用prepare方法 每次在执行SQL 语句时 Delphi会隐含地调用propare方法以准备这个查询

TQuery部件还有一个prepare属性 这是一个布尔型属性 当其属性值为True时 表明该查询已被准备好了( SQL 语句已被传送到数据库引擎中 ) 当我们使用参数编辑器Parameters Editor来为动态SQL语句中的参数赋值时 当设置完相应的参数值并退出参数编辑器时 Delphi会隐含地调用prepare方法以准备好查询

当SQL语句执行完之后 要想准备下一个查询 首先必须调用close方法 然后才能调用prepare方法准备下一个查询 一般来说 在一个应用程序中应该调用一次prepare方法 常常在窗体的OnCreate事件处理过程中调用prepare方法 然后用上述介绍的方法为参数赋值 最后调用Open方法或ExecSQL方法执行SQL语句 以完成查询

当然在调用prepare方法准备好一个查询时 会消耗一些数据库资源 因而每当一个查询执行完毕之后 要养成调用Unprepare方法以撤消查询的好习惯 在运行程序过程中 通过程序改变TQuery部件的SQL属性值时 Delphi会自动地调用Close方法和Unprepare 方法 以撤消查询

返回目录 DELPHI基础教程

       编辑推荐

       Java程序设计培训视频教程

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

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

Oracle索引技术

ORACLE G数据库开发优化指南

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

C嵌入式编程设计模式

Android游戏开发实践指南

lishixinzhi/Article/program/Delphi/201311/25147

Visual Query Builder 以可视化的方式建立SQL语句对数据库表和表中的记录进行 *** 作

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

SQL links使得Delphi数据库应用程序利用SQL语言访问驻留在远程服务器上的数据 这些服务器包括ORACLE Sybase Microsoft SQL Server Informix InterBase 当安装SQL Link驱动程序之后 SQL语句便可以直接 *** 作服务器上的数据

Delphi可以访问的数据源(DataSource)

Delphi数据库应用程序是通过BDE获取它们所需的数据的 BDE与不同类型的数据源打交道 BDE可以使用的数据源有如表 所示

表 Delphi可访问的数据源

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

数据源(DataSource)   特 性 描 述  文件扩展名

───────────────────────────毕含──────────

dBASE数据库  数据库表是通过dBASE数据库管理系统或DBD建立的 每察拦个表是一个独立的文件  DBF

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

Paradox数据库  数据库表是通过Paradox数据库管理系统  DB或DBD建立的 每个表是一个独立的文件

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

ASCII文件  表是通过Database Desktop建立的 每个  TXT表是一个独立的文件

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

本地InterBase服务器  数据库是通过InterBase数据库管理系统  GDB建立的 多个表包含在一个数据库文件中

────────────败数胡─────────────────────────

SQL数据库服务器   数据库是通过相应的数据库服务器提供的 依赖不同的ORACLE Sybase Informix 专用或通用工具建立的 也可以通过DBD来 数据库管理Microsoft SQL Server  创建数据库 并通过SQL Link访问数据库  系统InterBase

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

ODBC数据源  主要是指那些具有ODBC接口的数据库系统 依赖于相应如MS Access Btrieve等的数据库

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

Delphi数据库的体系结构

Delphi使用可视化的部件创建数据库应用 跟创建其它的非数据库应用程序一样 数据库部件都具备一定的属性 程序设计人员可以在设计过程中设置部件的多种属性 也可以在程序运行过程中通过程序来设置部件的各种属性

在Delphi部件板上有两页数据库部件用于开发数据库应用程序

数据访问部件页 该页上的部件主要用于说明有关的数据库的信息 如应用程序要访问(连接)的数据库 要访问数据库中的具体的数据库表 以及要访问表中哪些字段等 在实际的开发应用中常用的部件有TDataSource TTable TQuery等

数据控制部件页 该页上的部件主要用于显示浏览数据库中的数据信息 为用户提供了一个可视化的界面 常用的部件有 TDBGrid TDBEdit TDBCheck等 可以让用户对数据库中的信息进行有效的浏览 编辑 插入 删除等 *** 作

TTable TQuery TStoredproc部件负责与实际的数据库表联系 并从中获取数据信息 因而它们又常常被称为数据集部件 它们在程序设计过程中是可见的 但在程序运行时是不可见的 它们通过 BDE 为应用程序提供与数据库的连接 数据控制部件通过TDataSource部件与数据集部件相连 为用户提供一个可视化的界面 并在其中显示数据库中的数据信息

数据访问部件

数据访问部件页上提供了一组数据访问部件用来访问数据库中的数据

当要创建一个数据库应用时 首先在窗体中选择一个数据访问部件 然后为数据访问部件设置有关的属性 说明要访问的数据库 数据表以及表中的记录等 数据访问部件为数据控制部件与数据源建立一条通道 数据访问部件在程序运行时是不可见的 下表列出了数据访问页上的数据访问部件以及它们的主要用途

表 数据访问部件

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

部件名称   主 要 用 途

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

作为数据集部件TTable TQuery StoredProc组TDataSource 件与数据浏览件TDBGrid TDBEdit之间传送数据的通道

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

TTable  它是存取磁盘上数据库表的媒介 它通过BDE存取数据库表中的数据 TTable再与TDataSource进行 对话 使得数据浏览部件能够有效地从TTable中访问数据并能显示和编辑其中的数据

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

TQuery  它利用SQL语言访问磁盘上数据库表中的数据 并与TDataSource 对话 实现数据浏览部件对数据库的访问

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

TStoredProc 在应用程序中 它主要用来访问远程服务器中的存贮过程

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

TDatabase  当应用程序要登录到一个远程服务器上的数据库时 可以用该部件来建立应用程序与数据库永久

性的连接

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

TBatchMove 用于复制数据库表的结构或表中的记录

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

TReport  用于创建数据库的输出报表

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

lishixinzhi/Article/program/Delphi/201311/25180


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

原文地址: http://outofmemory.cn/yw/8217524.html

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

发表评论

登录后才能评论

评论列表(0条)

保存