如何繫結至 ADO 資料來源時,InfoPath 表單查詢中使用萬用字元的字元

Office 2003 支援已結束

Microsoft 於 2014 年 4 月 8 日結束對 Office 2003 的支援。此變更已影響您的軟體更新和安全性選項。 瞭解這對您的意義為何且如何持續受保護。

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

按一下這裡查看此文章的英文版本:826992
結論
Microsoft Office InfoPath 讓簡單,Microsoft SQL Server 或 Access 繫結。InfoPath 可以使用 Microsoft ActiveX Data Objects (ADO),自動產生的 SQL 資料庫或 Access 資料庫的簡單、 直接資料表查詢。然後,InfoPath 便會啟用,或將顯示在表單中編輯查詢的結果。

更進階的查詢 InfoPath 讓數個程式化的方法可以使用進階使用者或開發人員。這些程式的方法可讓進階的使用者或開發人員建立的表單,可以執行自訂查詢,使用更複雜的 SQL 語法。一般自訂查詢的其中一個範例會使用萬用字元來尋找部分符合指定的準則的記錄。

下列步驟將示範如何使用 managed 程式碼在 InfoPath 中使用萬用字元的字元搜尋 SQL 資料表中,或在 Access 資料表中執行,ADOAdapter物件。
其他相關資訊
InfoPath 讓轉換查詢資料連線,為您的AdoQueryConnection物件。這可讓您擷取,並設定下列項目的相關資訊的方法:
  • 連接字串
  • SQL 命令文字
  • 逾時值
使用AdoQueryConnection物件可以變更 SQL 陳述式來執行複雜的作業如查詢使用萬用字元的字元 」。

本文中的資訊可套用於 SQL 資料庫和 Access 資料庫。下列範例會使用北風貿易資料庫,包含使用 Microsoft Office Access 2007,使用 Microsoft Office 存取 2010年。

建立資料庫

如果您有沒有尚未使用北風貿易範例資料庫版本的 InfoPath,建立本機資料庫。若要執行這項操作,請執行下列步驟:

  1. 啟動 Microsoft Office Access。
  2. 可用的範本選取區段範例範本.
  3. 選取北風資料庫,然後再按一下建立.

設計查詢資料庫的表單

本章節說明如何設計在 InfoPath 中的查詢表單。這個範例會使用北風資料庫中的 [供應商] 資料表。若要建置查詢此資料表的表單,請依照下列步驟提供您的 InfoPath 版本。

InfoPath 2010

建立表單] 範本,然後設定為 [C# 的 [表單範本程式碼語言。若要執行這項操作,請執行下列步驟:
  1. 啟動 InfoPath 設計工具 2010年。
  2. 進階的表單範本選取區段資料庫然後按一下設計表單]。
  3. 在 [資料連線] 精靈中按一下選取資料庫.
  4. 找出 [北風資料庫的儲存位置] 資料夾,選取檔案 Northwind.accdb,,然後按一下開啟.
  5. 選取資料表視窗,捲動到的清單下方選取供應商表格,然後再按一下[確定]。
  6. 請確定已選取 [只將以下欄位中,供應商資料表:
    • 識別碼
    • 公司
    • Last_Name
    • First_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 伺服器或只在 Microsoft Office 存取)檢查 [,] 方塊,然後按一下下一步.
  7. 按一下 [選取資料庫.
  8. 找出 [北風資料庫的儲存位置] 資料夾,選取的資料夾,然後按一下開啟.
  9. 選取資料表對話方塊捲動到的清單下方選取供應商表格,然後再按一下[確定].
  10. 資料來源的結構清單中,請確定已選取 [只有下列的資料行行首:
    • 識別碼
    • 公司
    • First_Name
    • 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. 進行下列變更:
    • 變更動作若要按鈕的規則和自訂程式碼
    • 變更標籤若要執行查詢
    • 變更識別碼若要btnQuery
  3. 按一下編輯表單程式碼若要套用所做的變更,然後啟動 [Visual Studio 工具應用程式編輯器] 按鈕。它會開啟 btnQuery"Clicked"的事件處理常式。
  4. 取代註解,"/ / 您此寫入程式碼 」 與下列程式碼:
    //Create an XPathNavigator object for the main data sourceXPathNavigator 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 upxnMain = null;cn = null;xnSuppliersQuery = null;
  5. 建置專案,按一下建置功能表項目,然後按一下建置專案名稱.
  6. 儲存所做的變更,然後回到 InfoPath。

測試程式碼

先前的程序中所提供的範例程式碼可讓您進行萬用字元的字元搜尋工作職稱欄位中,供應商資料表。例如,提供搜尋查詢銷售百分比將傳回的所有記錄都有銷售位置中的連絡人。這些連絡人可能代表、 一個的管理員或代理程式,只要他們的記錄符合的搜尋準則銷售百分比.在中並沒有 「 銷售 」 的連絡人工作職稱欄位被過濾掉。


確認所傳回的所有記錄銷售位置都有連絡人,請依照下列步驟執行:
  1. 為 InfoPath 2010:首頁在功能區上索引標籤上按一下預覽.
    InfoPath 2007:在的工具列上按一下預覽然後按一下表單.
  2. 工作職稱第欄位查詢類型銷售百分比.
  3. 按一下 [執行查詢。

您的自訂查詢所傳回的記錄都有銷售位置中的所有連絡人。

IP2007 IP2010

警告:本文為自動翻譯

內容

文章識別碼:826992 - 最後檢閱時間:02/07/2011 18:54:00 - 修訂: 1.0

Microsoft Office InfoPath 2007, Microsoft Office InfoPath 2003

  • kbhowto kbmt KB826992 KbMtzh
意見反應