NoahWeb
在线搜索
NoahWeb.net | 开发者交流中心 | 支持 | 文档 | 反馈缺陷 

SQL方式下的手写查询

  有些时候,使用NoahWeb设计器辅助生成的数据库操作集不能满足你的需要,这可能是因为你对数据库的操作比较复杂,或是比较灵活。例如:关联查询和使用视图,为了解决类似的问题,NoahWeb提供了另外一种生成数据库操作集的方式,那就是-使用你熟悉的数据库操作语句来完成操作。

首先我们还是打开设计器,在屏幕右边的“数据库”列表中找到准备操作的数据表,先左击选中,然后右击选择执行操作的名称空间,选择“由此创建其他SQL”,如下图

之后我们看到屏幕中央出现编辑区,我们依次来看,首先是描述,我们可以在此为该数据库操作集写入一些相关信息。如下图

之后是名称,和设计器辅助生成的操作一样,你需要在此将名称补写完整。如下图

这里有一点需要说明,在数据库辅助生成的操作集中,名称中间的操作方式会使用"I,S,U,D"来代表,相信你看到了,现在这里变成了"SQL"没错,这意味着该操作的通过手写操作语句方式来完成的。如下图

因为该操作集是通过手写数据库操作语句方式,所以后面的“执行方式”也是SQL,无需更改。如下图

下面的“操作数据库相关”里记载着你对哪种数据库,哪种数据表进行了操作。如下图



如果需要传值,请在“局部变量”一栏中创建接收值的局部变量。接下来,我们看一看“设置参数”一栏。首先是“返回数”,将该栏展开,我们看到了“max”栏以及“start”栏,如下图

“max”一栏值的是该操作集在一个页面中返回的记录行数,而“start”一栏则是该操作集在一个页面中从第几行记录开始返回,如果你的页面需要实现“分页”功能的,这两栏会为你提供很大帮助的。
最后的“执行SQL”一栏是非常重要的,你将在这里通过手写方式键入你的数据库操作语句。如下图

我们写入一条数据库操作语句。如下图

  你可以将你熟悉的那些数据库操作语句写到这里,如果该操作需要接收值,或是进行逻辑判断的话,你需要使用NoahWeb的语法写入代码。我们将示例中的操作语句拷贝出来看一看。如下

select * from H_Addresslist <!-- NoahIf EX="[_root.dept]!=''" --> where deptname = '<!-- NoahValue ValueName="[_root.dept]" MaxChar="" DChar="" Safety="True" -->' <!-- NoahEndIf -->

  我们一起来熟悉一下,首先的select * from H_Addresslist是你熟悉的SQL语句,而后进行了一个逻辑判断,如果[_root.dept]不为空的话,则加入条件,也就是后面的where子句,如果为空,则没有后面的条件。在该子句中,示例中使用了一组NoahWeb的Value标签来调用一个全局变量[_root.dept]。在这里,请注意一点,如果你的数据库操作集是使用这种手写方式生成的,那么请将Value标签最后一项的Safety设置为True,这样可以起到保护数据库操作的作用,这是由系统决定的,切记!这非常重要!
相信现在你可以感觉到,示例中的数据库操作是比较灵活的,所以,这样的数据库操作集使用设计器是无法完成的,所以需要你手工写入。我们可以将示例中的段数据库操作代码在前端打印出来,看看是不是足够的灵活。如下图

  在该页面中,我们使用最上面的下拉单给查询语句传值来生成查询条件,也就是说,在该下拉单中选择的值就是查询语句中的[_root.dept],也就是它的查询条件。我们看到现在左下方,刚才写的那个查询语句显示出来,是没有条件的会返回所有记录。因为我们并没有在下拉单中做出选择。现在,我们在上方的下拉单中选择一个条件,看看下面的查询语句有没有发生变化。如下图

点击“查找”按钮,我们再来看一看下方查询语句的变化。如下图

  我们看到,where子句已经加到查询语句中了,而返回的记录也有所变化。我们再来分析一下:我们没有在下拉单中做出选择的时候,查询语句中的那个逻辑判断的返回值为假,那个时候[_root.dept]的值是空的,所以,后面的where子句自然是没有加到查询语句中来,后来,我们在下拉单中选择了一个值,这时,查询语句中的逻辑判断的返回值为真了,我们选择的值也就加入到了查询语句中。
类似示例中的这种动态生成的查询语句,在你的应用程序中或许是有用的,所以,你应该掌握好这种手写动态数据库操作语句的能力,这会为你提供很大帮助的。你在上面看到的,仅仅是一个比较简单的例子,更深更灵活的数据库操作语句还有太多太多。另外,数据库操作语句越灵活,它的代码也就越多,而上面提到的设计器中的“执行SQL”一栏的长度是有限的,当你的数据库操作语句代码很多的时候,就会出现“放不下”的情况,那可是个大麻烦。现在,我们一起来使用熟悉一种方法来避免上述情况,首先,我们来看一段数据库操作语句代码。如下图

  这段代码比较长,为了避免上述情况发生,我们现在将他放在一个字符资源中,这样一来,既避免了上面那种“放不下”的情况发生,而且,使用起来也更加灵活高效。如下图

那么,将代码写成了字符资源,在设计器的“执行SQL”一栏中该怎样写呢?如下图

  在调用的时候,我们使用 NoahWeb的NoahValue标签来进行调用,我们知道,使用前缀关键词_TEXT代表着调用一个字符资源内容,后面写入刚才我们创建的字符资源名称即可。


 

 

 

 

 

查看NoahWeb在线手册

Copyright © 2001-2004 The NoahWeb Corporation
All rights reserved.