数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

MS Jet SQL for Access 2000中级篇(IV)


发布日期:2023年08月11日
 
MS Jet SQL for Access 2000中级篇(IV)

现在我们已经讨论了中级SQL的语法那么让我们看看在一个Access应用程序中我们可以使用它的一些途径

数据库范例

作为这篇文章的附带这里有一个叫acIntSQLmdb的数据库范例

在acIntSQL中的任一处都是基于本文所提到的所有主题并且它通过查询和范例的代码演示了我们所讨论的不同SQL语句

在acIntSQL中所使用到的许多部分查询都是基于特定工作表中存在和包含的数据或者是基于其它已经存在的数据库对象如果你由于丢失数据而在运行一个查询产生故障打开工作表重置窗体并单击工作表重置按键这将会重新生产工作表和其中原始缺省数据如果要手动通过工作表重置过程你需要按照下面的顺序执行这些查询过程

Drop Table Shipping

Drop Table Invoices

Drop Table Customers

Drop Table CreditLimit

Create Table Customers

Create Table Invoices

Create Table Shipping

Create Table CreditLimit

Populate Customers

Populate Invoices

Populate Shipping

Populate CreditLimit

查询

查询就是指存储在Access数据库中并可以随时调用的SQL 语句也可以直接被Access 用户界面或Visual Basic? for Applications (VBA)编程语言调用查询可以使用Access Query Designer来建立Access Query Designer时一个可以很容易建立SQL语句的强大的可视化工具或者你也可以通过直接在SQL视图窗口输入SQL语句来建立查询

如同在Microsoft Jet SQL for Access 基础篇一文中所述 Access把数据库中所有面向数据的任务转化为SQL 语句要演示这一点让我们使用Access Query Designer来建立一个查询

打开acIntSQL数据库

(单击此处拷贝acIntSQLmdb 数据库例子)

确保tblCustomers 和 tblInvoices这两个表单已经创建并且其中包含有数据

在数据库窗口中从Objects条中选择Queries选项

在数据库窗口工具条里单击按键 New

在New Query对话框中选择Design View并单击OK

在Show Table对话框中选择tblCustomers并单击Add接着选择tblInvoices 并单击Add接着单击Close按键

在tblCustomers 域名列表中选择Last Name 域并把它拖到设计表格中的第一个域中

在tblInvoices 域名列表中选择InvoiceDate 和 Amount域并把它们拖到设计表格中

在设计表格中InvoicwDate域的Sort属性里选择Ascending

从Access菜单条中选择View并单击SQL View这样就打开了SQL View 窗口和显示了在查询中Access正在使用的SQL语法

注意 这个查询类似于存储在acIntSQL 数据库中的Join Inner查询

嵌入语句

嵌入SQL 语句就是指你在Visual Basic for Applications (VBA) 编程语言中使用SQL 语句虽然深入讨论如何使用VBA超出了本文的范围但如何使用程序来运行SQL 语句却是一件简单的工作

在acIntSQL数据库中有两个使用内部SQL语句的窗体需要通过Jet OLE DB provider 和 ADO来运行就是演示数据定义语句的 Intermediate DDL 窗体以及演示数据处理语句的Intermediate DML窗体

中级DDL 语句

这个acIntSQL数据库有许多关于你可以用来管理你的数据库结构的SQL 语句的范例有一部分数据定义语言 (DDL) 语句被以数据定义查询的方式存储而其它的则在程序设计代码的内部作为内联SQL使用如果你要使用这些DDL例子你需要在运行它之前删除一些数据库对象例如如果你想运行创建当前数据类型的查询你就先要确定当前数据表单不存在如果不是那么这个查询就会返回一个信息告诉你这个表单已经存在在运行任何DDL 例子之前检查它所要创建或改变的数据库对象确定其已经被设定好这样程序才能完全的运行

在内联DDL 语句范例中同样的建议仍然是适用的检查并设定它们会影响的数据库对象以确保DDL 语句的顺利运行

一般来说内联DDL 语句只是通过简单设定一个ADO Connection对象来运行并将SQL 语句传送给 Connection对象的运行程序下面是来源于在中级DDL语句窗体的二进制数据类型的输入输出

Private Sub cmdBinary_Click() Dim conDatabase As ADODBConnection

Dim SQL As String

On Error GoTo Error_Handler

Set conDatabase = ApplicationCurrentProjectConnection

注意: Fields through can be created through both

SQL View and the Jet OLEDB Provider

Fields and can only be created through the

Jet OLE DB provider

SQL = CREATE TABLE tblCodeBinaryDataTypes ( & _

Field_BINARY BINARY & _

Field_BINARY BINARY() & _

Field_VARBINARY VARBINARY & _

Field_VARBINARY VARBINARY() & _

Field_BVARYING BINARY VARYING & _

Field_BVARYING BINARY VARYING())

conDatabaseExecute SQL

MsgBox The BINARY datatypes table has been created!

conDatabaseClose

Set conDatabase = Nothing

Exit Sub

Error_Handler:

MsgBox ErrDescription vbInformation

End Sub

运行过其中一个DDL 语句后在设计视图中打开被影响的数据库查看产生了什么变动如果DDL 语句影响了表单之间的关联打开编辑关联窗口查看其变动例如让我们检查一下在中级DDL语句窗体中的Alter Table w/ Fast Foreign Key输出指令和按键

打开acIntSQL 数据库

确定tblCustomers 和 tblInvoices 表单已经被创建

在数据库窗口从Objects条中选择Forms

在数据库窗口工具条中着重显示Intermediate DDL 语句的窗体并单击Design按键

在Intermediate DDL 语句窗体中鼠标右键点击Alter Table w/ Fast Foreign Key按键并从弹出菜单中选择 Build Event…这操作将打开VBA开发环境以及包含着cmdFastKey_Click子过程的代码窗口

检查被分配给 SQL变量的SQL 语句

SQL = ALTER TABLE tblInvoices & _

ADD CONSTRAINT FK_tblInvoices & _

FOREIGN KEY NO INDEX (CustomerID) REFERENCES & _

tblCustomers (CustomerID) & _

ON UPDATE CASCADE & _

ON DELETE CASCADE

注意 DDL 语句改变了tblInvoices 表单并添加了牢固的外关键字限制同时它也通过使用级联子句在tblInvoices 和 tblCustomers 之间建立了一个数据关联

关闭VBA 开发环境

关闭Intermediate DDL 语句窗体

从Tools菜单中选择Relationships…菜单项以打开关联窗口

双击tblCustomers 和 tblInvoices 之间的关联链接以打开Edit Relationships对话框

注意级联性更新和删除选项没有被设置

关闭对话框

当关联链接仍然显示时按Delete键删除联接

关闭关联窗口

如果Intermediate DDL 语句在数据库窗口仍然显示点击数据库窗口工具条中的Open按键

点击Alter Table w/ Fast Foreign Key按键产生一个外关键字联系

关闭Intermediate DDL 语句窗体

当新的关系链接被创建后使用前面提到的步骤打开Edit Relationships对话框

注意级联性更新和删除选项已经被设置

中级 DML 语句

这个acIntSQL数据库有许多关于数据处理语言 (DML) 语句的例子在这些范例里你可以用它们来找到数据并且它们中的大多数是以查询的形式实现的仅有的以在线SQL形式实现的DML 语句则是基于中级DML 语句窗体的窗体中的三个例子在LIKE子句中使用_% 通配符并使用SELECT INTO 语句在一个外部数据库中创建一个表单

在acIntSQL 数据库中保存的两个查询是属于DML 语句内容却执行类似DDL的操作其中的SELECT INTO 语句从已有的数据库中找到数据并用这些数据创建新的工作表通过这些范例的学习你将学会如何删除目标工作表前提是这些工作表已经存在

在中级DML语句的窗体中的Create Customers Database输出指令和按键展示了一个对SELECT INTO 语句的有趣应用这是一个告诉你使用中级SQL 语句所能完成的各种事情的一个好的例子下面就是关于输出命令和按键的子过程的代码

Private Sub cmdCreateDB_Click()

Dim conCatalog As ADOXCatalog

Dim conDatabase As ADODBConnection

Dim SQL As String

Dim sDBName As String

On Error GoTo Error_Handler

Initialize objects & variables

Set conDatabase = ApplicationCurrentProjectConnection

Set conCatalog = New ADOXCatalog

sDBName = C:\Customersmdb

Create the Customers database

conCatalogCreate Provider=MicrosoftJetOLEDB; & _

Data Source= & sDBName

Run the DML statement to build the Customers table

SQL = SELECT * INTO tblCustomers IN & sDBName & _

& FROM tblCust

上一篇:数据从SQLServer输到文本文件

下一篇:在SQL Server中如何删除数据库