Come utilizzare caratteri jolly in una query del modulo di InfoPath durante l'associazione a un'origine dati ADO

Riepilogo

Microsoft Office InfoPath semplifica l'associazione di Microsoft SQL Server o di Microsoft Access. InfoPath è possibile generare automaticamente le query di tabella semplice e diretto a un database SQL o a un database utilizzando Microsoft ActiveX Data Objects (ADO). InfoPath consente quindi i risultati della query per essere visualizzato e modificato nel modulo.

Per le query più avanzate, in InfoPath diversi metodi di programmazione disponibili per gli utenti esperti o agli sviluppatori. Questi metodi di programmazione abilitare gli utenti esperti o agli sviluppatori di creare moduli che è possono eseguire una query personalizzata che utilizza la sintassi SQL più complessa. Un esempio di una query personalizzata comune utilizza un carattere jolly per trovare i record che corrispondono in parte ai criteri specificati.

Di seguito viene illustrato come utilizzare codice gestito in InfoPath per eseguire una ricerca di caratteri jolly in una tabella SQL o in una tabella di Access utilizzando l'oggetto ADOAdapter .

Ulteriori informazioni

InfoPath consente di eseguire il cast di una connessione dati per query come un oggetto AdoQueryConnection . In questo modo i metodi per recuperare e impostare le informazioni sui seguenti elementi:
  • La stringa di connessione
  • Il testo del comando SQL
  • Il valore di timeout
Mediante l'oggetto AdoQueryConnection , è possibile modificare un'istruzione SQL per eseguire operazioni più complesse, ad esempio una query che utilizza caratteri jolly.

Le informazioni in questo articolo si applicano ai database SQL e ai database di Access. Nell'esempio seguente utilizzano il database Northwind incluso in Microsoft Office Access 2007 e Microsoft Office Access 2010.

Creare il database

Se il database di esempio Northwind non è stata ancora utilizzata dalla versione di InfoPath, è possibile creare il database locale. A tale scopo, attenersi alla seguente procedura:

  1. Avviare Microsoft Office Access.
  2. Nella sezione Modelli disponibili , selezionare modelli di esempio.
  3. Selezionare il database Northwind e quindi fare clic su Crea.

Progettare un modulo che interroga il database

In questa sezione viene descritto come progettare un modulo di query in InfoPath. In questo esempio viene utilizzata la tabella fornitori dal database Northwind. Per compilare un modulo che esegue una query in questa tabella, seguire le istruzioni fornite per la versione di InfoPath.

InfoPath 2010

Creare il modello di modulo e quindi impostare il linguaggio codice modello di modulo su C#. A tale scopo, attenersi alla seguente procedura:
  1. Avviare InfoPath Designer 2010.
  2. Nella sezione Avanzate dei modelli di modulo , selezionare Databasee quindi fare clic su Progettazione Form.
  3. Nella connessione guidata dati, fare clic su Seleziona Database.
  4. Individuare la cartella in cui è stato salvato il database Northwind, selezionare il file Northwind.accdb e quindi fare clic su Apri.
  5. Nella finestra Seleziona tabella , scorrere fino alla fine dell'elenco, selezionare la tabella fornitori e quindi fare clic su OK.
  6. Assicurarsi che solo i campi seguenti siano selezionati nella tabella fornitori :
    • ID
    • Società
    • Last_Name
    • First_Name
    • Job_Title
    • Business_Phone
  7. Fare clic su Avanti.
  8. Fare clic su Fine per completare la connessione guidata dati.
  9. Nel riquadro campi , espandere il nodo dataFields e quindi trascinare il nodo d:fornitori Aggiungi alla casella sotto il pulsante Esegui Query .
  10. Quando richiesto, fare clic per selezionare una Tabella ripetuta.
  11. Nel riquadro campi , espandere il nodo queryFields e quindi trascinare il nodo Q:fornitori Aggiungi alla casella sotto il pulsante Nuovo Record . (Viene aggiunta automaticamente una sezione che dispone di controlli.)
  12. Nella scheda Developer , fare clic su lingua.
  13. Nella sezione linguaggio di programmazione in linguaggio codice modello di modulo, selezionare C#e quindi fare clic su OK.

InfoPath 2007

Creare il modello di modulo. A tale scopo, attenersi alla seguente procedura:
  1. Avviare InfoPath 2007.
  2. Nel riquadro di spostamento della finestra di dialogo Compila modulo , fare clic su Progetta modello di modulo.
  3. Nella finestra di Progettazione di un modello di modulo vuoto, scegliere OK.
  4. Dal menu Strumenti , fare clic su Connessioni datie quindi fare clic su Aggiungi. Viene visualizzata la finestra di Connessione dati .
  5. Nella finestra di Connessione dati , fare clic per selezionare la casella di controllo Crea una nuova connessione , fare clic per selezionare la casella di controllo di Ricevere dati e quindi fare clic su
    Successivo.
  6. Fare clic per selezionare la casella di controllo del Database (Microsoft SQL Server o Microsoft Office solo accesso) e quindi fare clic su
    Successivo.
  7. Fare clic su Seleziona Database.
  8. Individuare la cartella in cui è stato salvato il database Northwind, selezionare la cartella e quindi fare clic su Apri.
  9. Nella finestra di dialogo Seleziona tabella , scorrere fino alla fine dell'elenco, selezionare la tabella fornitori e quindi fare clic su OK.
  10. Nell'elenco struttura origine dati , assicurarsi che siano selezionate solo le intestazioni di colonna seguenti:
    • ID
    • Società
    • First_Name
    • Last_Name
    • Job_Title
    • Business_Phone
  11. Fare clic su Avanti.
  12. Fare clic su Progetta visualizzazione Immissione datie quindi fare clic su Fine per uscire dalla configurazione guidata origine dati e compilare il modulo predefinito.
  13. Nel riquadro attività Origine dati , fare doppio clic su
    dataFields.
  14. Spostare il nodo d:fornitori per la visualizzazione di dati del modulo.
  15. Quando richiesto, aggiungere d:fornitori come una Tabella ripetuta.
  16. Dal menu Visualizza , fare clic su Gestisci viste.
  17. Nel riquadro attività visualizzazioni fare clic su di
    Visualizzazione di query .
  18. Dal menu Strumenti , fare clic su Opzioni modulo.
  19. Nell'elenco categoria , fare clic su programmazione.
  20. Nella casella linguaggio codice modello di modulo , fare clic su C#e quindi fare clic su OK.

Modificare il modulo per eseguire una query personalizzata

In questa sezione viene descritto come cercare i record che contengono valori simili la stringa di ricerca che corrispondono esattamente alla stringa. Per cercare i record che contengono valori simili, è possibile utilizzare una stringa di caratteri jolly e l'istruzione come una query SQL. Quando la stringa di caratteri jolly e l'istruzione come vengono utilizzati insieme, è possibile trovare record in base ai criteri di ricerca carattere jolly. Questi record vengono quindi restituiti a InfoPath.

Per modificare il form per eseguire una query personalizzata del campo Titolo professionale , in InfoPath 2010 o InfoPath 2007, attenersi alla seguente procedura:

  1. In modalità progettazione, pulsante destro del mouse sul pulsante Esegui Query e quindi fare clic sul Pulsante Proprietà.
  2. Apportare le modifiche seguenti:
    • Modificare l' azione del pulsante a regole e codice personalizzato
    • Modificare l' etichetta per l'esecuzione di Query
    • Modificare l' ID in btnQuery
  3. Fare clic sul pulsante Modifica codice modulo per applicare le modifiche e avviare il Visual Studio Tools for Applications editor. Verrà aperto il gestore di eventi "Clicked" btnQuery.
  4. Sostituire il commento "/ / scrivere qui il codice" con il codice seguente:
    //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. Compilare il progetto facendo clic sulla voce di menu Compila e quindi fare clic sul nome progetto.
  6. Salvare le modifiche e tornare a InfoPath.

Test del codice

Il codice di esempio fornito nella procedura precedente consente di eseguire una ricerca con caratteri jolly del campo Titolo nella tabella fornitori . Fornendo una query di ricerca, ad esempio % di vendite, tutti i record restituiti avranno contatti in una posizione di vendita. Questi contatti possono essere un rappresentante, un manager o un agente, purché i record soddisfa i criteri di ricerca di % di vendite. Vengono filtrati i contatti che non dispongono di "Vendite" nel campo Titolo professionale .


Per verificare che tutti i record restituiti sono contatti in una posizione di vendita, attenersi alla seguente procedura:
  1. Per InfoPath 2010: Nella scheda Home della barra multifunzione, fare clic su Anteprima.
    Per InfoPath 2007: Sulla barra degli strumenti, fare clic su Anteprimae quindi fare clic su modulo.
  2. Nel campo Titolo professionale query digitare % delle vendite.
  3. Fare clic su eseguire Query.

I record restituiti dalla query personalizzate sono tutti i contatti in una posizione di vendita.

Proprietà

ID articolo: 826992 - Ultima revisione: 30 gen 2017 - Revisione: 1

Microsoft Office InfoPath 2007, Microsoft Office InfoPath 2003

Feedback