http://all.zcom.com
杂志期刊搜索作者: 分类:数码 上传者:ZCOM网友
Access程序员们很有必要学习SQL。我们将告诉你怎样使学习过程更轻松。
即使你以为自己是一个Access专家,要想完全掌握Access SQL(结构化查询语言)也是一个很令人生畏的任务。部分原因是因为缺乏从Access到SQL的接口。然而,这个局限性并不会拖你的后腿,只要你知道怎样避免一些常见的编码错误。在本文中,我们将告诉你怎样使用查询设计表格来创建SQL语句,然后在即时窗口里运行这些语句,对它们进行调试。
你可能会疑惑,为什么必须学SQL。其中一个原因就是几乎任何约束对象都允许将SQL语句作为它的数据源。因此,你通常可以用一个简单的SQL语句替代固定查询。另外,一些查询在查询设计表格中并不能简单地复制。只有SQL语句能实现联合查询。一旦你熟悉了SQL,你将会发现使用它有许多便利之处。
在查询设计表格里创建SQL语句
SQL语句可以非常的长,因此很容易造成逻辑错误和拼写错误,所以要尽可能地让Access为你做这项工作。还好,你可以在查询设计表格里创建绝大多数的基本语句。Access为每个查询提供了等价的SQL语句,而且你可以利用这种特性为自己服务。要在查询设计表格里创建一个SQL语句,同任何普通的查询一样,先选择一个数据源(表格或者查询),单击Database工具栏上的New Object按钮,然后选择Query(在In Access 97中,你应该选择Queries标签,然后单击New按钮)。
一旦你有了一个数据源,并且已经打开了查询设计表格,就可以把域列表里的域拖到表格里,构建相互之间的关系,并添加条件,然后指定分类顺序。通过这种方法:单击View按钮并选择Datasheet View,你就能很轻松地看到查询结果了。
只要你会使用表格,就可以继续做下去(你也许不能创建全部的语句),单击View按钮并选择SQL View,Access随后就会显示与这个查询等价的SQL语句。最后,选中这个语句,将它拷贝到模块中去。
很多情况下,最终的语句需要进行一些细微的调整。除非你已经能熟练地书写SQL语句,否则你会发现,如果从头开始用这种快速方法写全部的语句更好。
在查询设计表格里调试SQL语句
在你将SQL语句从设计栅格拷贝到模块以后,如果对它进行了任何改动,这个语句有时候会在第一次使用时无法正常运行。在这种情况下,VBA错误信息提示也不起任何作用。而另一方面,查询设计表格总是能够发挥作用并且提供有用的信息。因此,如果你不能很快地解决这个问题,那么就从模块中将这个语句拷贝到查询设计表格,然后在那儿运行语句。同样的错误将会再次发生,但是查询设计表格的错误提示信息比较特殊,并且通常也能帮你查明错误所在。
如果你自己想试一下的话,这儿有一个简短说明,对你会有所帮助:
1.在模块里反选SQL语句。不要包括在语句开始或者结束阶段的引用标志以及VBA程序(用来运行SQL语句的)。
2.按住Ctrl-C,或者也可以从Edit菜单里选择Copy命令。
3.访问Database窗口(如果它最小化的话,请按住F11恢复窗口大小)。
4.从Object工具栏上选择Query,然后单击Database窗口工具栏上的New(使用Access 97的用户应该单击Queries标签,然后在Database窗口里单击New按钮)。
5.在出现的新的查询对话框里,双击Design View。
6.当Access打开查询设计表格时,在不选择数据源的情况下关闭Show Table对话框。
7.单击View按钮以打开SQL窗口。
8.按住Ctrl-V或者从Edit菜单里选择Paste,将SQL语句拷贝到SQL窗口。
9.用合适的对象名称替换所有的变量。
10.在Access菜单栏上选择Query | Run(或者在Query Design工具栏上单击Run)。
在步骤9中,请注意你必须用变量所代表的实际对象名称来替换它们。例如,如果你像在查询设计栅格里那样运行语句SELECT * FROM " & strTable & "的话,它就会报告出错。让我们假定你在使用一个叫做tblMyTable的表格。通过以下的方法,你就能用表格名称替换语句的 " & strTable & "部分:
SELECT * FROM tblMyTable
在用实际对象名称替换所有的变量以后,通过单击Query Design 工具栏上的Run按钮就能运行这个语句。如果表格在对语句赋值时没有返回错误信息,你就可以确定问题来自于变量。如果不是这样,最大的可能就是定义特性时出了点小问题(在下一部分我们将要讨论定义特性)。
当变量没有问题以后,Access将会显示比VBA更全面的错误信息。例如,如果你的语句包含了一个语法错误。Access通常会显示出问题的部分,这样就很明显地缩小了搜索范围。在这个时候,你应该能够发现错误所在并且作出必要的修改。
一直调试语句直到它没有错误为止,然后将这个正确的语句拷贝回去,放到模块中,并且恢复在第9步中所替换的所有变量;或者也可以对模块中的语句作必要的修改(只要连接的变量不属于原来问题的部分)。
避免连接错误
使用查询设计表格跟踪SQL语句中的问题需要很高的技巧,但是一开始就替换变量后,事情会变得很麻烦。在这个过程中你很容易犯错误,并且自己还不知道,这会使得调试任务变得更艰巨。
你可以通过加入一些额外的代码到VBA程序里去以避免变量问题。这个附加的代码将会在即时窗口中打印一个已经赋过值的SQL语句。赋过值就意味着VBA将会用合适的对象名称替换所有的变量。将这个赋值文本从即时窗口中拷贝出来,复制到查询设计表格中去以减轻烦人的变量替换任务,并且还完全消除了手工输入语句(以及由此产生的额外错误)的任务。下面的代码给我们演示了一个小窍门:
strCriteria = " = ’Smith’"
strSQL = "SELECT * INTO tblNewTable FROM tblOldTable WHERE " & "tblOldTable .LastName" & strCriteria & ";"
Debug.Print strSQL
最初两行代码将搜索条件和基本的SQL语句分配给字符串变量strCriteria和strSQL。Debug.Print语句随后将赋值语句打印到即时窗口。如果语句返回一个错误,就打开即时窗口(按住Ctrl-G或者单击Code按钮,主要取决于当前窗口是否激活)。现在将赋值语句 SELECT * INTO tblNewTable FROM tblOldTable WHERE tblOldTable. LastName = ’Smith’;拷贝到查询设计表格(而不是从VBA模块中拷贝原始语句)并且在那儿运行它。请注意这个赋值文本包括了数据源的真实名称和标准字符串,而不包括上面代码列表里显示过的变量。
这个解决方案不仅更容易一些,而且你还可以避免大量字符的输入。然而,不要等到你的SQL语句出了问题才用这个方法,要习惯于将这个功能加入到你的代码中去,这样你在需要的时候就能用它。
利用查询生成器快速得到结果
Access SQL不仅仅有查询功能和VBA模块;其控件还经常使用SQL语句代替一个存储的查询作为Row Source的属性。幸运的是,你不必一定要从头创建相应的语句;你可以使用SQL语句查询生成器(我们将会给你演示怎样在迅速访问这个生成器)。在打开的生成器里,选择查询设计表格里的域和条件表达式,就像你在一个普通的查询操作中所要做的一样。生成器随后就会将你的工作转化成SQL语句。事实上你完全没有必要了解SQL。
让我们来看一个例子。在Design View里打开任意包含组合列表或者列表框的视窗,或者打开一个空白视窗并且加入一个组合列表或列表框。双击这个组合列表或者列表框以打开它的属性表,并且单击Build按钮(当你选择Row Source属性域时它就会出现)。这将运行SQL语句查询生成器,它是一个简单的查询设计表格。当你想进行一次查询时就请修改这个栅格(如果你已经有一个控件在运行,这个表格将会在查询设计表格里显示一个等价的SQL语句)。
图1是一个简单示意图,它显示了一系列连接域——名和姓。换句话说,这个组合列表或者列表控件将显示出一个姓名列表。从工具栏最左边的View按钮里选择SQL View,你就可以查看这个查询的SQL语句(如图2所示)。同样,你也可以通过选择Datasheet View看到查询结果。
正如你所看到的,这个生成器很灵活——你可以查看相同查询的三种不同形式。你也可以在生成器、SQL语句以及结果之间切换,直到获得正确的语句为止,这个时候,你只需根据提示简单地关闭生成器并且存储你所作的改动,这个控件也相应地得到升级。
SQL可能会很难掌握;即使是专家偶尔也会为语句所困扰。还好,Access提供了许多工具可以使任务变得轻松一些。查询设计表格给了你一个更加简单的创建SQL语句的方法,而不必从头开始。另外,你也可以从即时窗口中把赋值语句拷贝到查询设计表格中以调试语句。(全文完 摘自《个人电脑》)
合作Mail:n.huai@zcominc.com
合作Tel:010-58765237 转 8006