天天看点

基于Infopath2007 与SQL2005的数据查询

众所周知,利用Office System中的Infopath 创建各类表单,包括登记、管理、查询。 其中利用Infopath进行数据查询时,由于Infopath的查询是基于数据点值查询,即对查询数据库中的某个值,无法进行范围数据的查询实现。而在实际工作需要中,范围查询是一个查询功能中所必需,本文向大家介绍如何利用Infopath实现基于SQL的数据范围查询。

一.创建基于SQL的Infopath表单文档

1.启动 InfoPath2007。依次单击“设计表单模板”|“数据库”|“确定”。

2.在“数据连接向导”对话框中,单击“选择数据库”|“新建源”|“Microsoft SQL server。”|“下一步”|

在服务器名称中,输入数据库名称,如”Contoso/ConsSps|,设置相应的登陆凭据(建议将SQL数据库设置为SQL访问模式”

3.选择相应的表,如Contoso,单击“下一步”|“确定”,完成基于SQL的表单创建。

4.单击“工具”|“表单选项”|“编程”|设置“表单模板代码”为JSCript

单击“确定”

二.创建相应控件

1.清除默认内容,在“数据源”任务窗格中,双击“dataFields”。把“d:Contoso”节点移到表单的数据视图中。当出现提示时,添加“d:Contoso”作为一个“重复表”。

2.在“数据源”任务窗格中,选择“MyFileds”,单击“添加域或组”,设置名称“Query”,类型为“组”,单击“确定”。选择“Query”,单击“添加域或组”,设置名称“开始点”,类型为“文本域”,单击“确定”。选择“Query”,单击“添加域或组”,设置名称“结束点”,类型为“文本域”,单击“确定”

3.向表单中添加按钮控件,双击创建的控件按钮,设置标签为“查询”,单击“编辑表单代码”。

二.建立相应代码实现

写入如下

function Query::OnClick(eventObj)

{

 // 在此处编写代码

 var strOrigSQLCommand = XDocument.QueryAdapter.Command;

 var querySuppliers = XDocument.DOM.selectSingleNode("/dfs:myFields/dfs:queryFields/q:土地交易明细");

    var strMySQLCommand = XDocument.QueryAdapter.BuildSQLFromXMLNodes(querySuppliers);

 var QueryStartNum =querySuppliers.selectSingleNode("//my:Query/my:开始点").text;

 querySuppliers.selectSingleNode("//my:Query/my:开始点").text = "";

  var QueryEndNum =querySuppliers.selectSingleNode("//my:Query/my:结束点").text;

 querySuppliers.selectSingleNode("//my:Query/my:结束点").text = "";

 var strTitle = querySuppliers.selectSingleNode("@出让面积").text;

 querySuppliers.selectSingleNode("@出让面积").text = "";

 var strSupplierID = querySuppliers.selectSingleNode("@序号").text;

 querySuppliers.selectSingleNode("@序号").text = "";

 var strContactName = querySuppliers.selectSingleNode("@区域").text;

 querySuppliers.selectSingleNode("@区域").text = "";

 var strKejian = querySuppliers.selectSingleNode("@可建建筑面积").text;

 querySuppliers.selectSingleNode("@可建建筑面积").text = "";

 var strChengjiao = querySuppliers.selectSingleNode("@成交金额").text;

 querySuppliers.selectSingleNode("@成交金额").text = ""; 

 var strYongTu = querySuppliers.selectSingleNode("@用途").text;

 querySuppliers.selectSingleNode("@用途").text = ""; 

 var strYongjilv = querySuppliers.selectSingleNode("@容积率").text;

 querySuppliers.selectSingleNode("@容积率").text = ""; 

 var strChurang = querySuppliers.selectSingleNode("@出让方式").text;

 querySuppliers.selectSingleNode("@出让方式").text = ""; 

 var strJingDe = querySuppliers.selectSingleNode("@竞得单位").text;

 querySuppliers.selectSingleNode("@竞得单位").text = ""; 

 var strJuTiwei = querySuppliers.selectSingleNode("@土地具体位置").text;

 querySuppliers.selectSingleNode("@土地具体位置").text = ""; 

 var strTudiDanjia = querySuppliers.selectSingleNode("@土地单价").text;

 querySuppliers.selectSingleNode("@土地单价").text = ""; 

 var strLouMian = querySuppliers.selectSingleNode("@楼面地价").text;

 querySuppliers.selectSingleNode("@楼面地价").text = "";   

 //if (strTitle != "")

 //{

 //strMySQLCommand = strMySQLCommand  + strTitle;

 //}

 var strSQLQuery = strOrigSQLCommand;

 if (QueryEndNum != "")

  {

  strSQLQuery=strSQLQuery + "where  and 出让面积 >" + QueryStartNum + "and 出让面积 <= " + QueryEndNum ;

  }

      XDocument.QueryAdapter.Command = strSQLQuery;

 XDocument.Query();

 querySuppliers.selectSingleNode("@序号").text = strSupplierID;

 querySuppliers.selectSingleNode("@区域").text = strContactName;

 querySuppliers.selectSingleNode("@出让面积").text = strTitle;

 querySuppliers.selectSingleNode("@可建建筑面积").text = strKejian;

  querySuppliers.selectSingleNode("@成交金额").text = strChengjiao;

 querySuppliers.selectSingleNode("@用途").text = strYongTu;

 querySuppliers.selectSingleNode("@容积率").text = strYongjilv;

 querySuppliers.selectSingleNode("@出让方式").text = strChurang;

 querySuppliers.selectSingleNode("@竞得单位").text = strJingDe;

 querySuppliers.selectSingleNode("@土地具体位置").text = strJuTiwei;

 querySuppliers.selectSingleNode("@土地单价").text = strTudiDanjia;

 querySuppliers.selectSingleNode("@楼面地价").text = strLouMian;

   XDocument.QueryAdapter.Command = strOrigSQLCommand;

}a