Cómo utilizar caracteres comodín en una consulta de formulario de InfoPath cuando se enlaza a un origen de datos ADO

Resumen

Microsoft Office InfoPath facilita enlace a Microsoft SQL Server o a Microsoft Access. InfoPath pueden generar automáticamente consultas de tabla directas sencillas para una base de datos SQL o a una base de datos de Access utilizando Microsoft ActiveX Data Objects (ADO). A continuación, InfoPath permite a los resultados de la consulta para mostrar y modificar en el formulario.

Para consultas más avanzadas, InfoPath realiza varios métodos de programación disponible para los usuarios avanzados o para el desarrollador. Estos métodos de programación permiten al usuario experto o al programador generar formularios que pueden realizar una consulta personalizada que utiliza la sintaxis SQL más compleja. Un ejemplo de una consulta personalizada común utiliza un carácter comodín para buscar registros que coincidan parcialmente con los criterios especificados.

Los pasos siguientes muestran cómo utilizar código administrado de InfoPath para realizar una búsqueda de carácter comodín en una tabla SQL o en una tabla de Access mediante el objeto ADOAdapter .

Más información

InfoPath permite convertir una conexión de datos de consulta como un objeto AdoQueryConnection . Proporciona métodos para recuperar y establecer información sobre los siguientes elementos:
  • La cadena de conexión
  • El texto del comando SQL
  • El valor de tiempo de espera
Utilizando el objeto AdoQueryConnection , puede cambiar una instrucción SQL para realizar operaciones más complejas, como una consulta que utiliza caracteres comodín.

La información de este artículo se aplica a bases de datos SQL y bases de datos Access. Los ejemplos siguientes utilizan la base de datos Northwind que se incluye con Microsoft Office Access 2007 y en Microsoft Office Access 2010.

Crear la base de datos

Si aún no ha utilizado la base de datos de ejemplo Northwind desde la versión de InfoPath, crear la base de datos local. Para ello, siga estos pasos:

  1. Inicie Microsoft Office Access.
  2. En la sección de Plantillas disponibles , seleccione plantillas de ejemplo.
  3. Seleccione la base de datos Northwind y, a continuación, haga clic en crear.

Diseñar un formulario que consulta la base de datos

Esta sección describe cómo diseñar un formulario de consulta en InfoPath. Este ejemplo utiliza la tabla Suppliers de la base de datos Northwind. Para crear un formulario que consulta en esta tabla, siga los pasos que se proporcionan para la versión de InfoPath.

InfoPath 2010

Crear la plantilla de formulario y, a continuación, establezca el lenguaje de código de la plantilla de formulario para C#. Para ello, siga estos pasos:
  1. Inicie InfoPath Designer 2010.
  2. En la sección Avanzada de plantillas de formulario , seleccione la base de datosy, a continuación, haga clic en Diseñar formulario.
  3. En el Asistente para la conexión de datos, haga clic en Seleccionar base de datos.
  4. Busque la carpeta donde guardó la base de datos Northwind, seleccione el archivo Northwind.accdb y, a continuación, haga clic en Abrir.
  5. En la ventana Seleccionar tabla , desplácese hasta el final de la lista, seleccione la tabla proveedores y, a continuación, haga clic en Aceptar.
  6. Asegúrese de que únicamente los campos siguientes están seleccionados en la tabla proveedores :
    • ID.
    • Compañía
    • Last_Name
    • First_Name
    • Job_Title
    • Business_Phone
  7. Haga clic en Siguiente.
  8. Haga clic en Finalizar para completar al Asistente para la conexión de datos.
  9. En el panel de campos , expanda el nodo dataFields y, a continuación, arrastre el nodo de d:Suppliers agregar en el cuadro en el botón Ejecutar consulta .
  10. Cuando se le pida, haga clic en Tabla extensible.
  11. En el panel de campos , expanda el nodo queryFields y, a continuación, arrastre el nodo Q: proveedores de agregar en el cuadro en el botón Nuevo registro . (Esto agrega automáticamente una sección con controles.)
  12. En la ficha Programador , haga clic en idioma.
  13. En la sección de lenguaje de programación , en lenguaje de código de plantilla de formulario, seleccione C#y, a continuación, haga clic en Aceptar.

InfoPath 2007

Crear la plantilla de formulario. Para ello, siga estos pasos:
  1. Inicie InfoPath 2007.
  2. En el panel de exploración del cuadro de diálogo Rellenar un formulario , haga clic en diseñar una plantilla de formulario.
  3. En la ventana de Diseño de una plantilla de formulario , haga clic en blanco y, a continuación, haga clic en Aceptar.
  4. En el menú Herramientas , haga clic en Conexiones de datosy, a continuación, haga clic en Agregar. Abre la ventana de Conexión de datos .
  5. En la ventana de Conexión de datos , haga clic para seleccionar la casilla de verificación crear una nueva conexión para , haga clic para activar la casilla de verificación Recibir datos y, a continuación, haga clic en
    Siguiente.
  6. Haga clic para activar la casilla de verificación de la base de datos (Microsoft SQL Server o Access de Microsoft Office sólo) y, a continuación, haga clic en
    Siguiente.
  7. Haga clic en Seleccionar base de datos.
  8. Busque la carpeta donde guardó la base de datos Northwind, seleccione la carpeta y, a continuación, haga clic en Abrir.
  9. En el cuadro de diálogo Seleccionar tabla , desplácese hasta el final de la lista, seleccione la tabla proveedores y, a continuación, haga clic en Aceptar.
  10. En la lista estructura del origen de datos , asegúrese de que sólo los encabezados de columna siguientes están seleccionados:
    • ID.
    • Compañía
    • First_Name
    • Last_Name
    • Job_Title
    • Business_Phone
  11. Haga clic en siguiente.
  12. Haga clic en Diseñar primero la vista de datosy, a continuación, haga clic en Finalizar para salir al Asistente de configuración de origen de datos y generar el formulario predeterminado.
  13. En el panel de tareas Origen de datos , haga doble clic en
    dataFields.
  14. Mueva el nodo d:Suppliers a la vista de datos del formulario.
  15. Cuando se le pida, agregue d:Suppliers como una Tabla de repetición.
  16. En el menú Ver , haga clic en Administrar vistas.
  17. En el panel de tareas vistas , haga clic en el
    Vista de la consulta .
  18. En el menú Herramientas , haga clic en Opciones de formulario.
  19. En la lista categoría , haga clic en programación.
  20. En el cuadro de lenguaje de código de plantilla de formulario , haga clic en C#y, a continuación, haga clic en Aceptar.

Cambiar el formulario para ejecutar una consulta personalizada

En esta sección se describe cómo buscar registros con valores que son similares a la cadena de búsqueda pero no coincide exactamente con la cadena. Para buscar registros que tienen valores similares, puede utilizar una cadena de caracteres comodín y la instrucción al igual que en una consulta SQL. Cuando la cadena de caracteres comodín y la instrucción como se utilizan juntas, pueden encontrar registros basándose en los criterios de búsqueda de carácter comodín. Estos registros se devuelven después a InfoPath.

Para cambiar el formulario para ejecutar una consulta personalizada del campo Cargo en 2010 de InfoPath o en InfoPath 2007, siga estos pasos:

  1. En modo de diseño, haga clic en el botón Ejecutar consulta y, a continuación, haga clic en Propiedades del botón.
  2. Realice los cambios siguientes:
    • Cambie la acción del botón a reglas y código personalizado
    • Cambiar la etiqueta para ejecutar la consulta
    • Cambie el ID de btnQuery
  3. Haga clic en el botón Editar código del formulario para aplicar los cambios y, a continuación, iniciar el Visual Studio Tools for Applications editor. Se abrirá el controlador de eventos btnQuery "Clicked".
  4. Reemplace el comentario "/ / Escriba aquí su código" con el código siguiente:
    //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. Genere el proyecto haciendo clic en el elemento de menú Generar y, a continuación, haciendo clic en Generar nombre de proyecto.
  6. Guardar los cambios y, a continuación, vuelva a InfoPath.

Probar el código

El código de ejemplo que se proporciona en el procedimiento anterior permite realizar una búsqueda de carácter comodín del campo Puesto en la tabla proveedores . Al proporcionar una consulta de búsqueda como % de ventas, todos los registros que se devuelven tendrán contactos en un puesto de ventas. Estos contactos pueden ser un representante, un jefe o un agente siempre y cuando su registro cumpla los criterios de búsqueda de % de ventas. Se filtran los contactos que no tienen "Ventas" en el campo Cargo .


Para comprobar que todos los registros devueltos tienen contactos en un puesto de ventas, siga estos pasos:
  1. De InfoPath 2010: En la ficha Inicio en la cinta de opciones, haga clic en vista previa.
    Para InfoPath 2007: En la barra de herramientas, haga clic en vista previay, a continuación, haga clic en formulario.
  2. En el campo consulta de Puesto de trabajo , escriba ventas %.
  3. Haga clic en Ejecutar consulta.

Los registros devueltos por la consulta personalizada son todos los contactos en un puesto de ventas.

Propiedades

Id. de artículo: 826992 - Última revisión: 17 ene. 2017 - Revisión: 1

Comentarios