如何绑定到 ADO 数据源时,在 InfoPath 窗体查询中使用通配符字符

文章翻译 文章翻译
文章编号: 826992 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

概要

Microsoft Office InfoPath 使绑定到 Microsoft SQL Server 或 Microsoft Access 更简单。通过使用 Microsoft ActiveX 数据对象 (ADO),InfoPath 可以自动生成简单、 直接的表的查询的 SQL 数据库或 Access 数据库。然后,InfoPath 将启用该查询以显示和编辑窗体中的结果。

对于更高级的查询 InfoPath 使几种编程方法可以对高级用户或开发人员使用。这些编程的方法使高级的用户或开发人员可以生成可执行自定义使用更复杂的 SQL 语法的查询的窗体。一个常见的自定义查询的一个示例使用通配符查找部分与指定的条件匹配的记录。

下面的步骤演示如何通过使用执行 SQL 表中或在 Access 表中使用通配符字符搜索在 InfoPath 中使用托管的代码,ADOAdapter对象。

更多信息

InfoPath 还允许您强制转换为一个查询数据连接的AdoQueryConnection对象。这使您可以检索并设置下列各项有关的信息的方法:
  • 连接字符串
  • SQL 命令文本
  • 超时值
通过使用该AdoQueryConnection对象,您可以更改 SQL 语句来执行一个查询使用通配符的字符,如在复杂的操作。

在这篇文章中的信息适用于 SQL 数据库和 Access 数据库中。下面的示例使用罗斯文数据库,包括与 Microsoft Office Access 2007 和 Microsoft Office 访问 2010年。

创建数据库

如果您已从您的 InfoPath 版本尚未使用罗斯文示例数据库,创建本地数据库。若要这样做,请执行以下步骤:

  1. 启动 Microsoft Office 的访问。
  2. 在该可用的模板部分选择示例模板.
  3. 选择该"罗斯文"数据库,,然后单击创建.

设计查询数据库的窗体

本部分介绍如何设计一个查询表单在 InfoPath 中。此示例使用罗斯文数据库中的供应商表。若要构建查询该表的窗体,按照为您的 InfoPath 版本提供的步骤。

InfoPath 2010 年

创建表单模板中,然后再将表单模板代码语言设置为 C#。若要这样做,请执行以下步骤:
  1. 启动 InfoPath 设计器 2010年。
  2. 在该高级的表单模板部分选择数据库然后单击设计窗体。
  3. 在数据连接向导中单击选择数据库.
  4. 找到保存在罗斯文数据库文件夹,选择 Northwind.accdb,该文件,然后单击打开.
  5. 在该选择表窗口,滚动到底部的列表中选择该供应商表,和然后单击确定。
  6. 请确保只将以下字段中处于选中状态,供应商表:
    • ID
    • 公司
    • Last_Name
    • 客套
    • Job_Title
    • Business_Phone
  7. 单击"下一步.
  8. 单击"完成时间要完成数据连接向导。
  9. 在该字段窗格中,展开该dataFields节点,然后再拖添加d: 供应商节点下,运行查询按钮。
  10. 在提示时单击以选中重复表.
  11. 在该字段窗格中,展开该queryFields节点,然后再拖添加q: 供应商节点下,新记录按钮。(这会自动添加一个包含控件的节。)
  12. 在下,开发人员选项卡上单击语言.
  13. 在该编程语言下节表单模板代码语言选择C#然后单击"确定".

InfoPath 2007

创建在表单模板。若要这样做,请执行以下步骤:
  1. 启动 InfoPath 2007。
  2. 在导航窗格中,填写表单对话框中,单击设计表单模板.
  3. 在该设计表单模板窗口,单击"空白,然后单击"确定".
  4. 在该工具菜单,单击数据连接然后单击添加."数据连接窗口随即打开。
  5. 在该数据连接窗口,单击此处选择该创建新的连接选框单击此处选择该接收数据复选框,,然后单击下一步.
  6. 单击以选中该(Microsoft SQL Server 数据库或 Microsoft Office 访问权限)复选框,,然后单击下一步.
  7. 单击"选择数据库.
  8. 找到保存在罗斯文数据库文件夹,选择文件夹,然后单击打开.
  9. 在该选择表对话框窗口滚动到底部的列表中选择该供应商表,和然后单击"确定".
  10. 在该数据源结构列表中,请确保仅下面的列标题处于选中状态:
    • ID
    • 公司
    • 客套
    • Last_Name
    • Job_Title
    • Business_Phone
  11. 单击"下一步.
  12. 单击"首先设计数据视图然后单击"完成时间要退出数据源设置向导,然后生成默认窗体。
  13. 在该数据源任务窗格中双击dataFields.
  14. 移动该d: 供应商节点可以在数据视图在窗体中。
  15. 出现提示时添加d: 供应商作为一重复表.
  16. 在该视图菜单,单击管理视图.
  17. 在该视图任务窗格,请单击此查询查看。
  18. 在该工具菜单,单击窗体选项.
  19. 在该类别列表中单击编程.
  20. 在该表单模板代码语言框中单击C#然后单击"确定".

更改窗体运行自定义查询

本部分介绍如何搜索具有类似于您的搜索字符串,但不是完全匹配字符串的值的记录。要搜索具有相似值的记录,可以使用一个通配符字符的字符串,并将正如在 SQL 查询中的语句。当通配符字符字符串和正如语句一起使用,它们可以找到基于统配符查找标准的记录。然后,这些记录将返回到 InfoPath。

若要更改要运行的自定义查询,该窗体,职务InfoPath 2010 年或在 InfoPath 2007 中的字段中,请执行以下步骤:

  1. 在设计模式中用鼠标右键单击该运行查询按钮,,然后单击按钮属性.
  2. 请进行以下更改:
    • 更改该操作按钮规则和自定义代码
    • 更改该标签若要运行查询
    • 更改该ID若要btnQuery
  3. 单击该编辑窗体的代码按钮以应用所做的更改,然后启动可视化的 Studio 工具,用于应用程序编辑器。它将打开 btnQuery"Clicked"事件处理程序。
  4. 替换该注释,"/ / 在此处编写代码"使用下面的代码:
    //Create an XPathNavigator object for the main data source
    XPathNavigator xnMain = this.MainDataSource.CreateNavigator();
     
    //Create an AdoQueryConnection from the main data source by "casting" the default
    //data connection to an "AdoQueryConnection"
    AdoQueryConnection cn = (AdoQueryConnection)this.DataConnections["Main connection"];
     
    //Obtain the default SQL command for the form.
    string strOrigSQLCommand = cn.Command.ToString();
     
     
     
    // Obtain the query node that you want to change.
    XPathNavigator xnSuppliersQuery = xnMain.SelectSingleNode("/dfs:myFields/dfs:queryFields/q:Suppliers", this.NamespaceManager);
     
    //Obtain the text that was entered for the wildcard character search, and then clear the current query parameter so that InfoPath will leave the current query parameter blank.
    string strJobTitle = xnSuppliersQuery.SelectSingleNode("@Job_Title", this.NamespaceManager).Value;
    xnSuppliersQuery.SelectSingleNode("@Job_Title", this.NamespaceManager).SetValue(string.Empty);
     
    //Have InfoPath construct an SQL command that is based on all other field values.
    string strMySQLCommand = cn.BuildSqlFromXmlNodes(xnSuppliersQuery);
     
    //Save the other query items, and then clear the other query items before the next query.
    string strSupplierID = xnSuppliersQuery.SelectSingleNode("@ID", this.NamespaceManager).Value;
    xnSuppliersQuery.SelectSingleNode("@ID", this.NamespaceManager).SetValue(string.Empty);
    string strCompany = xnSuppliersQuery.SelectSingleNode("@Company", this.NamespaceManager).Value;
    xnSuppliersQuery.SelectSingleNode("@Company", this.NamespaceManager).SetValue(string.Empty);
    string strLastName = xnSuppliersQuery.SelectSingleNode("@Last_Name", this.NamespaceManager).Value;
    xnSuppliersQuery.SelectSingleNode("@Last_Name", this.NamespaceManager).SetValue(string.Empty);
    string strFirstName = xnSuppliersQuery.SelectSingleNode("@First_Name", this.NamespaceManager).Value;
    xnSuppliersQuery.SelectSingleNode("@First_Name", this.NamespaceManager).SetValue(string.Empty);
    string strBusPhone = xnSuppliersQuery.SelectSingleNode("@Business_Phone", this.NamespaceManager).Value;
    xnSuppliersQuery.SelectSingleNode("@Business_Phone", this.NamespaceManager).SetValue(string.Empty);
     
    //Add Job_Title to the query so that Job_Title can support wildcard characters.
    if (strJobTitle != string.Empty)
    {
           if (strMySQLCommand != string.Empty)
                  strMySQLCommand += " AND ";
     
           //Check whether the user entered the wildcard character (%) as part of the title.
    if(strJobTitle.Contains("%"))
                 strMySQLCommand += "[Job Title] LIKE '" + strJobTitle + "'";
           else
                 strMySQLCommand += "[Job Title] LIKE '" + strJobTitle + "%'";               
    }
     
    //Construct the full query string.
    string strSQLQuery = strOrigSQLCommand;
    if (strMySQLCommand != string.Empty)
    strSQLQuery += " WHERE " + strMySQLCommand;
     
    //Set the command and run the query.
    cn.Command = strSQLQuery;
    cn.Execute();
     
    //Restore all the user entries to the Query fields so that the user entries will 
    //be available if you want to change and to rerun the query.
    xnSuppliersQuery.SelectSingleNode("@ID", this.NamespaceManager).SetValue(strSupplierID);
    xnSuppliersQuery.SelectSingleNode("@Company", this.NamespaceManager).SetValue(strCompany);
    xnSuppliersQuery.SelectSingleNode("@Last_Name", this.NamespaceManager).SetValue(strLastName);
    xnSuppliersQuery.SelectSingleNode("@First_Name", this.NamespaceManager).SetValue(strFirstName);
    xnSuppliersQuery.SelectSingleNode("@Job_Title", this.NamespaceManager).SetValue(strJobTitle);
    xnSuppliersQuery.SelectSingleNode("@Business_Phone", this.NamespaceManager).SetValue(strBusPhone);
     
    //Restore the default table command (for the next time).
    cn.Command = strOrigSQLCommand;
     
    //Clean up
    xnMain = null;
    cn = null;
    xnSuppliersQuery = null;
  5. 通过单击来生成该项目,生成菜单项,然后单击生成项目名称.
  6. 保存所做的更改,然后返回到 InfoPath。

测试代码

前面的过程中提供的示例代码允许您执行的通配符字符,职务中的字段,供应商表中。通过提供类似如下的搜索查询销售 %将会返回所有记录中某个销售人员推介都了联系人。这些联系人可能是一位代表、 经理或代理,只要他们的记录符合搜索条件的销售 %.不具有"销售"中的联系人职务字段被过滤出来。


若要验证所有返回的记录中某个销售人员推介有联系人,请按照下列步骤:
  1. 为 InfoPath 2010:在该主页在功能区上的选项卡单击预览.
    InfoPath 2007 年:在工具栏上单击预览然后单击窗体.
  2. 在该职务查询字段类型销售 %.
  3. 单击"运行查询。

由您的自定义查询返回的记录都销售位置中的所有联系人。

属性

文章编号: 826992 - 最后修改: 2011年2月7日 - 修订: 1.0
这篇文章中的信息适用于:
  • Microsoft Office InfoPath 2007
  • Microsoft Office InfoPath 2003
关键字:?
kbhowto kbmt KB826992 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 826992
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com