Buscar Valores en una base de datos desde InfoPath 2010 programáticamente.
Para realizar búsquedas en una base datos desde InfoPath en 3 pasos.
1. Crea la tabla en la base de datos donde tienes toda la información
2. Crea un formulario en InfoPath con los campos que necesita extraer de la base de datos.
3. Finalmente agregue el siguiente código en el botón buscar,
Click derecho en el botón y seleccionar propiedades
Seleccionar Edit Form Code
Pegar el código, es necesario agregar la librería, siguiente y la referencia System.Data.
Resultado
1. Crea la tabla en la base de datos donde tienes toda la información
2. Crea un formulario en InfoPath con los campos que necesita extraer de la base de datos.
3. Finalmente agregue el siguiente código en el botón buscar,
Click derecho en el botón y seleccionar propiedades
Seleccionar Edit Form Code
Pegar el código, es necesario agregar la librería, siguiente y la referencia System.Data.
using System.Data.SqlClient;
1:
2: XPathNavigator nav = CreateNavigator();
3: XPathNavigator nav1 = CreateNavigator();
4: XPathNavigator nav2 = CreateNavigator();
5: XPathNavigator nav3 = CreateNavigator();
6: XPathNavigator nav4 = CreateNavigator();
7: XPathNavigator nav5 = CreateNavigator();
8: XPathNavigator nav6 = CreateNavigator();
9: XPathNavigator nav7 = CreateNavigator();
10: XPathNavigator nav8 = CreateNavigator();
11:
12: // Obtener el valor a buscar desde el campo de infopath
13: XPathNavigator ValorRadicado = nav.SelectSingleNode("/my:Encuestas/my:A/my:A11RadicadoValor", NamespaceManager);
14:
15: //Cadena de Conexión
16: string strConn = @"Server=NombreServer;Database=BasedeDatos;User Id=usuario;Password=Password;";
17: //nueva sql conexión
18: SqlConnection conn = new SqlConnection(strConn);
19:
20: //armar la consulta de sql
21: SqlCommand cmd = new SqlCommand("SELECT * FROM Institucion WHERE Radicado = '" + ValorRadicado.ToString() + "'", conn);
22:
23: //abrir conexión, ejecutar comando, colocar el resultado en el sqldatareader
24: SqlDataReader reader;
25: try
26: {
27: conn.Open();
28: reader = cmd.ExecuteReader();
29: if (reader.HasRows)
30: {
31: while (reader.Read())
32: {
33: //Asignar los valores del resultaddo de la consulta en campos del formulario
34: nav1.SelectSingleNode("/my:Encuestas/my:InstitucionEducativa/my:A14Region", NamespaceManager).SetValue(reader[0].ToString());
35: nav2.SelectSingleNode("/my:Encuestas/my:InstitucionEducativa/my:A112Dpto", NamespaceManager).SetValue(reader[2].ToString());
36: nav3.SelectSingleNode("/my:Encuestas/my:InstitucionEducativa/my:A11InstitucionEduc", NamespaceManager).SetValue(reader[5].ToString());
37: nav4.SelectSingleNode("/my:Encuestas/my:InstitucionEducativa/my:A13Municipio", NamespaceManager).SetValue(reader[3].ToString());
38: nav5.SelectSingleNode("/my:Encuestas/my:InstitucionEducativa/my:A15DaneSede", NamespaceManager).SetValue(reader[4].ToString());
39: nav6.SelectSingleNode("/my:Encuestas/my:InstitucionEducativa/my:A16NombreSede", NamespaceManager).SetValue(reader[6].ToString());
40: nav7.SelectSingleNode("/my:Encuestas/my:InstitucionEducativa/my:A17Zona", NamespaceManager).SetValue(reader[7].ToString());
41: nav8.SelectSingleNode("/my:Encuestas/my:InstitucionEducativa/my:A18TipoSede", NamespaceManager).SetValue(reader[8].ToString());
42:
43: }
44: }
45: }
46: finally
47: {
48: conn.Close();
49: }
50: }
Resultado
Disculpen ¿Qué significa: ("/my:Encuestas/my:A/my:A11RadicadoValor?
ResponderBorrarGRacias
Perdona la demora, esa es la ruta del componente en el formulario, es decir en mi caso el campo en el formulario de infopath se llama A11RadicadoValor y lo que le antecede es la ruta completa que infopath le da.
ResponderBorrarEn tu caso para saber esa ruta debes en el componente, dentro del formulario infopath en la vista diseño, hacer click derecho y existe la opción Copy Xpath (http://blogs.msdn.com/b/infopath/archive/2006/06/07/621202.aspx) y vas a la vista de codigo y la pegas.
Cualquier duda me comentas.
hey que tal,
ResponderBorrartengo una bd en access la cual ya he conectado a infopath, he logrado hacer consultas, pero me gustaria trabajar con condigo personalizado para que mis botones realicen consultas sql a mi bd; el problema es que infopath genera mucha codigo al vuelo y no puedo trabajar con el;
pretendo que en cada registro exista un boton para eliminar pero cuando hago clic en el boton, no esta ligado con el registro ; o sea no se como ligar la informacion del registro; si alguien me puede ayudar desde ya gracias jejej
aca un codigo que encontre
Public Sub btnDel_Clicked(ByVal sender As Object, ByVal e As ClickedEventArgs)
Dim message As String = String.Empty
Dim root As XPathNavigator = MainDataSource.CreateNavigator()
Dim nodes As XPathNodeIterator = root.Select("/dfs:myFields/dfs:dataFields/dersonas/@Id", NamespaceManager)
Do While nodes.MoveNext
message += nodes.Current.Value & System.Environment.NewLine
Loop
MessageBox.Show(message)
End Sub
Prentendo obtener el valor del "@Id" pero solo logro mostrar una lista con toos los valores; el objetivo es que cada avlor corresponda con un boton; pero infopath genera mucha informacion el vuelo
https://s.yimg.com/hd/answers/i/f9ca2cceed964091b8672c530fc6bd7b_A.png?a=answers&mr=0&x=1406522280&s=24a582db7b8f7c78e5e1e8d1b03c7f17
Hola Jesus, en este link esta como puedes asociar el codigo a un botón en infopath (http://johanolivier.blogspot.com/2010/08/infopath-2010-development-part-1-add.html), respecto a conocer el Id de cada registro una opción es, al momento de hacer la consulta tambien asignes el ID de cada registro a un campo del formulario, este campo puede o no ser visible en tu formulario, con esto al momento de generar la consulta ya sea un Update o un Delete, usas ese campo ID para enviarlo como parametro.
BorrarAsí como en el ejemplo que coloque la consulta "Select" tiene un parametro es decir el "Where" cuando retornas todos los registros en uno de los campos guardas el ID, y como te comente anteriormente pudes utilizar ese ID.
Espero te ayude con tus dudas
y si necesito mostrar una imagen como le hago ?
ResponderBorrarHola Jesus
BorrarMira aca te dejo un demo (http://topazsystems.com/software/download/InfoPathDemo.pdf), la diferencia es que en el ejemplo el tiene la imagen en el unidad C: tu puedes asignar a una variable de tipo imagen y asignas a esa propiedad.
Espero te aclare las dudas.
hey disculpa!!!
Borrarhe tenido muchos problemas al intentar trabajar con las imagenes, crees q puedas publicar un ejemplo... ?
como serian las instrucciones UPDATE & DELETE ????
ResponderBorrarHola jesus
ResponderBorrarComo te comene anteriormente el la linea 21 del código de ejemplo puedes colocar tu consutal Update o Delete
SqlCommand cmd = new SqlCommand("SELECT * FROM Institucion WHERE Radicado = '" + ValorRadicado.ToString() + "'", conn);
Asi como lo muestra el ejemplo en mi caso yo tengo el parametro que está en el campo ValorRadicado.
Espero te ayude en tu desarrollo.
Sdls.
no pienses que no leeo tu blog, lo que pasó fue que respondiste un poco tarde ejejej. algo que quiero compartir es como agregar la librería
ResponderBorrar(http://social.msdn.microsoft.com/Forums/getfile/174472) es que tarde como 2 días para agregarla ejjeje
gracias (y)
oye la verdad no entiendo para que es esto:
ResponderBorrarreader[0]
se que con eso se irteran los registros , pero q no los reader no son consecutivos es decir, del reader[0] te brincas hasta reader[2], me pudes explicar esa parte ??
acerca de INSERT INTO; no me sale :( me baso en el código que tienes pero el INSERT INTO no queda, me ayudas
ResponderBorrar