Použití zástupných znaků v dotazu formuláře aplikace InfoPath při vázání ke zdroji dat ADO

Souhrn

Aplikace Microsoft Office InfoPath je, že vazba na Microsoft SQL Server nebo Microsoft Access snadné. Aplikace InfoPath můžete automaticky generovat jednoduché, přímé dotazy do databáze SQL nebo databáze aplikace Access pomocí Microsoft ActiveX Data Objects (ADO). Pak povolí výsledky dotazu zobrazit a upravovat ve formuláři aplikace InfoPath.

Pro pokročilejší dotazy aplikace InfoPath zpřístupní několik programovacích metod pro pokročilé uživatele a vývojáře. Tyto programovací metody umožňují pokročilé uživatele nebo vývojáře k vytvoření formuláře, které lze provést vlastní dotaz, který používá složitější syntaxi jazyka SQL. Příkladem běžné vlastní dotaz používá zástupný znak najít záznamy, které částečně odpovídají zadaným kritériím.

Následující kroky ukazují, jak používat spravovaný kód v aplikaci InfoPath k provedení hledání zástupných znaků pomocí ADOAdapter objekt SQL tabulky nebo tabulky aplikace Access.

Další informace

Aplikace InfoPath umožňuje převést datové připojení pro dotazy jako objekt AdoQueryConnection . To vám metody získání a nastavení informace o následujících položkách:
  • Připojovací řetězec
  • Text příkazu SQL
  • Hodnota časového limitu
Pomocí AdoQueryConnection objektu můžete změnit příkaz SQL provádět složitější operace, jako je dotaz, který používá zástupné znaky.

Informace v tomto článku platí pro databáze SQL a pro přístup k databázím. Následující příklady používají databázi Northwind, která je součástí Microsoft Office Access 2007 a Microsoft Office Access 2010.

Vytvoření databáze

Pokud ještě jste nepoužili ukázkovou databázi Northwind z verze aplikace InfoPath, vytvořte databázi místně. Chcete-li to provést, postupujte takto:

  1. Spusťte aplikaci Microsoft Office Access.
  2. V části Dostupné šablony vyberte ukázkové šablony.
  3. Vyberte databázi Northwind a potom klepněte na tlačítko vytvořit.

Návrh formuláře zadávání dotazů do databáze

Tato část popisuje postup návrhu dotazu formuláře v aplikaci InfoPath. Tento příklad používá tabulky z databáze Northwind. Chcete-li vytvořit formulář, který zjistí tuto tabulku, postupujte podle kroků, které jsou k dispozici pro vaši verzi aplikace InfoPath.

Aplikace InfoPath 2010

Vytvořit šablonu formuláře a poté nastavte jazyk kódu šablony formuláře do jazyka C#. Chcete-li to provést, postupujte takto:
  1. Spuštění aplikace InfoPath Designer 2010.
  2. V části Rozšířené šablony formuláře vyberte databázia potom klepněte na tlačítko Navrhnout formulář.
  3. V Průvodci datovým připojením klepněte na tlačítko Vybrat databázi.
  4. Vyhledejte složku, kam jste uložili databázi Northwind, vyberte soubor Northwind.accdb a klepněte na tlačítko Otevřít.
  5. V okně Vybrat tabulku , přejděte na konec seznamu, vyberte tabulky Dodavatelé a potom klepněte na tlačítko OK.
  6. Ujistěte se, zda jsou vybrány pouze následující pole v tabulce Dodavatelé :
    • ID
    • Společnost
    • Last_Name
    • First_Name
    • Job_Title
    • Business_Phone
  7. Klepněte na tlačítko Další.
  8. Klepněte na tlačítko Dokončit dokončete Průvodce datovým připojením.
  9. V podokně pole rozbalte dataFields uzel a přetáhněte uzlu d:Suppliers přidat do pole ve skupinovém rámečku tlačítko Spustit dotaz .
  10. Po zobrazení výzvy, klepnutím vyberte položku Tabulka s opakováním.
  11. V podokně pole rozbalte uzel queryFields a přetáhněte do pole ve skupinovém rámečku tlačítko Nový záznam přidat uzel Q: dodavatelé . (To automaticky přidá oddíl, který obsahuje ovládací prvky.)
  12. Na kartě Developer klepněte na jazyk.
  13. V části programovacího jazyka ve skupinovém rámečku jazyk kódu šablony formulářevyberte C#a potom klepněte na tlačítko OK.

Aplikace InfoPath 2007

Vytvořte šablonu formuláře. Chcete-li to provést, postupujte takto:
  1. Spuštění aplikace InfoPath 2007.
  2. V navigačním podokně dialogového okna Vyplnit formulář klepněte na tlačítko Navrhnout šablonu formuláře.
  3. V okně Navrhnout šablonu formuláře klepněte na možnost prázdný a poté klepněte na tlačítko OK.
  4. V nabídce Nástroje klepněte na příkaz Datová připojenía klepněte na tlačítko Přidat. Otevře se okno Datové připojení .
  5. V okně Datové připojení klepnutím zaškrtněte políčko vytvořit nové připojení k klepnutím zaškrtněte políčko Přijímat Data a potom klepněte na tlačítko
    Další.
  6. Klepnutím zaškrtněte políčko databáze (Microsoft SQL Server nebo Microsoft Office Access pouze) a potom klepněte na tlačítko
    Další.
  7. Klepněte na tlačítko Vyberte databázi.
  8. Vyhledejte složku, kam jste uložili databázi Northwind, vyberte složku a klepněte na tlačítko Otevřít.
  9. V dialogovém okně Vybrat tabulku přejděte do dolní části seznamu, vyberte tabulky Dodavatelé a potom klepněte na tlačítko OK.
  10. V seznamu Struktura zdroje dat Ujistěte se, zda jsou vybrány následující záhlaví sloupců:
    • ID
    • Společnost
    • First_Name
    • Last_Name
    • Job_Title
    • Business_Phone
  11. Klepněte na tlačítko Další.
  12. Vyberte přepínač Navrhnout nejprve zobrazení data potom klepněte na tlačítko Dokončit ukončíte Průvodce nastavením zdroje dat a vytvořit výchozí formulář.
  13. V podokno úloh Zdroj dat poklepejte na
    dataFields.
  14. Přesunete uzel d:Suppliers k zobrazení dat formuláře.
  15. Po zobrazení výzvy přidejte d:Suppliers jako Tabulka s opakováním.
  16. V nabídce Zobrazit klepněte na příkaz Spravovat zobrazení.
  17. V podokno úloh zobrazení , klepněte
    Zobrazení dotazu .
  18. V nabídce Nástroje na položku Možnosti formuláře.
  19. V seznamu kategorie klepněte na položku programování.
  20. V poli kód jazyk šablony formuláře klepněte na příkaz jazyka C#a potom klepněte na tlačítko OK.

Změna formuláře pro spuštění vlastní dotaz

Tato část popisuje, jak vyhledat záznamy obsahující hodnoty, které se podobají vyhledávací řetězec, ale přesně neodpovídá řetězec. Vyhledat záznamy, které mají podobné hodnoty, můžete použít zástupný znak řetězec a příkaz jako v dotazu SQL. Při použití zástupný znak řetězec a příkaz jako společně se najít záznamy podle kritéria hledání zástupných znaků. Tyto záznamy jsou vráceny do aplikace InfoPath.

Chcete-li změnit formulář spuštění vlastního dotazu pole Funkce v aplikaci InfoPath 2010 nebo aplikace InfoPath 2007, postupujte takto:

  1. V návrhovém režimu klepněte pravým tlačítkem myši na tlačítko Spustit dotaz a klepněte na Tlačítko Vlastnosti.
  2. Proveďte následující změny:
    • Akce tlačítka Změnit pravidla a vlastní kód
    • Změnit Popisek Chcete-li Spustit dotaz
    • Změňte ID na btnQuery
  3. Klepněte na tlačítko Upravit kód formuláře použijte změny a poté spusťte Visual Studio Tools for Applications editor. Spustí obslužnou rutinu události btnQuery "Clicked".
  4. Nahraďte komentář "/ / sem zadejte kód" s následujícím kódem:
    //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 up
    xnMain = null;
    cn = null;
    xnSuppliersQuery = null;
  5. Sestavte projekt kliknutím na položku sestavení nabídky a klepnutím na tlačítko Sestavit název projektu.
  6. Uložte změny a vraťte se do aplikace InfoPath.

Testování kódu

Ukázku kódu, který je uveden v předchozím postupu umožňuje hledání zástupných znaků pole Pozice v tabulce Dodavatelé . Všechny záznamy, které jsou vráceny zadáním vyhledávací dotaz například prodeje %mají kontakty na místě prodeje. Tyto kontakty mohou být tak dlouho, dokud jejich záznam splňuje kritéria hledání % prodejnízástupce, vedoucí nebo zástupce. Kontakty, které nemají "Prodej" v poli Název úlohy jsou odfiltrovány.


Chcete-li ověřte, zda všechny záznamy, které jsou vraceny kontakty na místě prodeje, postupujte takto:
  1. Pro aplikaci InfoPath 2010: Na kartě Domů na pásu karet klepněte na tlačítko Náhled.
    Pro aplikaci InfoPath 2007: Na panelu nástrojů klepněte na tlačítko Náhleda potom klepněte na formulář.
  2. V dotazu pole Název úlohy zadejte % prodeje.
  3. Klepněte na tlačítko spusťte dotaz.

Záznamy, které jsou vráceny pomocí vlastního dotazu jsou všechny kontakty na místě prodeje.

Vlastnosti

ID článku: 826992 - Poslední kontrola: 16. 1. 2017 - Revize: 1

Váš názor