发信人: fbilo()
整理人: hunter__fox(2002-03-16 22:15:50), 站内信件
|
3.建立并执行SQL语句的查询
在通过上述方法检验并转换了值的数据类型后,建立SQL语句的准备工作完成了。 具体建立SQL语句的方法是表单的自定义方法bldsql,通过在组合框、文本框、条 件选项按钮的interactivechange事件使用该方法来动态建立在文本框edtsql中的 SQL语句。然后,使用按钮cmdExecute的click事件中的自定义过程来使用生成的 SQL语句并浏览其结果。
Bldsql方法:
1.变量声明
***********************************************************
LOCAL lcOperand,lcWHERE, lcField1, lcRelation1, lcValue1, ;
lcField2, lcRelation2, lcValue2, lcAlias, lcSQL, lcType
***********************************************************
2.确定已正确输入条件的值
***********************************************************
IF EMPTY(THISFORM.cboField1.Value)
THISFORM.cmdExecute.Enabled = .F.
RETURN
ELSE
IF THISFORM.opgOperand1.Value > 0 AND ;
EMPTY(THISFORM.cboField2.Value)
THISFORM.cmdExecute.Enabled = .F.
RETURN
ENDIF
ENDIF
***********************************************************
--首先判断组合框cboField1是否为空,如是,则未正确输入条件,禁止使用Run Sql命令按钮cmdExecute并返回。
--在组合框cboField1不为空的情况下,判断添加and/or选项按钮组opgOperand1 的值是否大于0(即已选定了添加and/or)并且组合框cboField2是否为空,如果 两者成立,则禁止使用RunSql命令按钮cmdExecute并返回。
3.将各个控件的值赋值给相应的变量
***********************************************************
lcWHERE = ""
lcAlias = ALIAS()
** Retrieve the values of the controls into variables
lcField1 = THISFORM.cboField1.Value
lcRelation1 = THISFORM.cboRelation1.Value
lcValue1 = ALLTRIM(THISFORM.txtValue1.Value)
DO CASE
CASE THISFORM.opgOperand1.Value = 0
lcOperand = ""
CASE THISFORM.opgOperand1.Value = 1
lcOperand = "AND"
CASE THISFORM.opgOperand1.Value = 2
lcOperand = "OR"
ENDCASE
lcField2 = THISFORM.cboField2.Value
lcRelation2 = THISFORM.cboRelation2.Value
lcValue2 = ALLTRIM(THISFORM.txtValue2.Value)
***********************************************************
4.使用表单的ValidateType方法将要查询的文本框txtValue1的值转换为正确的 数据格式后存入变量lcValue1。
***********************************************************
** Need to put the proper delimiters around comparison values of certa in **types
lcValue1 = THISFORM.ValidateType(THIS.cboField1.Value,lcValue1)
***********************************************************
5.建立where条件的第二部分
***********************************************************
** Create the second part of the WHERE condition
IF !EMPTY(lcOperand)
lcValue2 = THISFORM.ValidateType(THIS.cboField2.Value,lcValue2)
lcWHERE = lcOperand + " " + lcField2 + " " + ;
lcRelation2 + " " + lcValue2
ENDIF
***********************************************************
在本方法第3段中将选项按钮组opgOperand1的值赋值给了变量LcOperand,其中在 opgOperand1的值为0的条件下给LcOperand赋空值。
因此,在本段中首先判断LcOperand的值是否非空即是否选定增加了第二个条件。 若是,则调用表单的ValidateType方法将要查询的文本框txtValue2的值转换为正 确的数据格式后存入变量lcValue2。最后,建立Where条件的第二部分并赋值给变 量lcWhere:
lcWhere= opgOperand1的值+空格+组合框cboField2的值+空格+组合框cboRelati on2的值+空格+文本框txtValue2的值
当然上述控件的值都已经使用了正确的数据格式。如此表述,只是为了理解的方 便。
6.建立SQL语句中where及其后面的部分。
***********************************************************
** Create the first part of the WHERE condition
lcWHERE = "WHERE " + lcField1 + " " + lcRelation1 + " ";
+ lcValue1 + " " + lcWHERE
***********************************************************
其中:(lcField1 + " " + lcRelation1 + " "+ lcValue1)建立where语句的第 一个条件,再在尾部加上一个空格再加上一段中建立的第二个条件形成完整的条 件表达式。最后,在首部加上"where"形成where条件表达式的完整形式。
7.建立完整的SQL语句,并将其赋值给变量lcSQL,然后将该变量放入给编辑框e dtSQL:
***********************************************************
** Create the full SQL command using the base table for the form
lcSQL = "SELECT * FROM " + lcAlias + " " + lcWHERE
THISFORM.edtSQL.Value = lcSQL
***********************************************************
8.允许使用表单上的清除条件clear命令按钮和运行查询RunSQL命令按钮
***********************************************************
THISFORM.cmdClear.Enabled = .T.
THISFORM.cmdExecute.Enabled = .T.
***********************************************************
ok!至此,一个完整的SQL查询语句已经建立完成了!
-- ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.101.254]
|
|