• Domingo 22 de Diciembre de 2024, 23:51

Autor Tema:  Re: Desplegar datos en Datagrid  (Leído 3527 veces)

ccortes

  • Miembro activo
  • **
  • Mensajes: 91
    • Ver Perfil
Re: Desplegar datos en Datagrid
« en: Lunes 22 de Septiembre de 2003, 17:52 »
0
Desplegar datos en un datagrid

Hola a todos (as), tengo un problema con una consulta en la cual quiero desplegar informacion de una tabla, cuando el numero de Id a guardar ya exista en la tabla, la cual esta dividida en textbox y en un datagrid, este proceso se hace mediante el evento lost_focus de un textbox en donde digito el numero o Id.

El codigo es este:

Private Sub Txt1_lostfocus()
'Declaro las variables
Dim moRecordset As New ADODB.Recordset
Dim msSql As String
Dim mbEncontro As Boolean

mbEncontro = False

If Trim(Txt1.Text) <> "" Then
mbEncontro = True
msSql = "Select *"
msSql = msSql & "From Convenios where Convenio = "
msSql = msSql & "'" + Trim(Txt1.Text) + "'"

End If

If Trim(msSql) = "" Then Exit Sub
If mbEncontro = False Then Exit Sub

'Ejecuto la sentencia en SQL
moRecordset.Open msSql, goDatabase, adOpenDynamic, adLockOptimistic

If Not moRecordset.EOF And Not moRecordset.BOF Then
MsgBox "EL Código ya existe !!!", vbCritical, "Atención"

Do While Not moRecordset.EOF
DataCombo1.Text = Trim(moRecordset.Fields(0).Value)
Txt2.Text = Trim(moRecordset.Fields(1).Value)
Txt3.Text = Trim(moRecordset.Fields(2).Value)
Txt4.Text = Trim(moRecordset.Fields(3).Value)
Txt5.Text = Trim(moRecordset.Fields(4).Value)
Txt6.Text = Trim(moRecordset.Fields(5).Value)
Txt7.Text = Trim(moRecordset.Fields(6).Value)
Combo1.Text = Trim(moRecordset.Fields(7).Value)
DTPicker1.Value = Trim(moRecordset.Fields(8).Value)
DTPicker2.Value = Trim(moRecordset.Fields(9).Value)
DataGrid1.Col = 0
DataGrid1.Text = Trim(moRecordset.Fields(10).Value)

DataGrid1.Col = 1
DataGrid1.Text = Trim(moRecordset.Fields(11).Value)

moRecordset.MoveNext
Loop
moRecordset.Close
End If
Adodc1.Refresh
DataCombo1.Refresh
End Sub

El problema esta cuando quiero desplegar dos campos en el datagrid utlizando:

DataGrid1.Col = 0
DataGrid1.Text = Trim(moRecordset.Fields(10).Value)

DataGrid1.Col = 1
DataGrid1.Text = Trim(moRecordset.Fields(11).Value)

Dado que al entrar al moRecordset este se ejecuta solo una vez y los datos que deben de aparecer en el datagrid tienes hasta tres lineas, entonces los otro dos restantes no se despliegan

Aparece como en dibujo


Cuando lo correcto es como en dibujo1
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.
Carlos Cortés C

Mellileo

  • Miembro MUY activo
  • ***
  • Mensajes: 110
    • Ver Perfil
Re: Desplegar datos en Datagrid
« Respuesta #1 en: Lunes 22 de Septiembre de 2003, 18:33 »
0
Hola ccortes:

No sé si entendí bien tu problema, pero en una ocasión tuve un problema muy parecido y lo solucioné creando dos recordset; uno que apuntara a los datos primarios del formulario y otro que apuntara a los datos visualizados en el DataGrid.

Esto ya que al tener sólo un recordset, al ejecutar la sentencia SQL el para o visualiza sólo un registro a la vez (al parecer el primero según la ordenación de tu recordset).

Es parecido a una relación Uno a Muchos.

Espero que te sirva de algo mi sugerencia.

Saludos  Mellileo.
Saludos...

Mellileo!!

JKim

  • Miembro activo
  • **
  • Mensajes: 66
    • Ver Perfil
Re: Desplegar datos en Datagrid
« Respuesta #2 en: Martes 23 de Septiembre de 2003, 02:10 »
0
Hola ccortes!

Varias cosas:

1) Empezando por tu cuestión, si miras en la ayuda del MSDN verás que DataGrid es un control que no permite el modo no enlazado, lo cual puede darte algún problema si pretendes usarlo moviendote por él.

Una manera de hacerlo es cargar un recordset y enlazarlo a este recordset, aunque no acostumbro a enviar código por principios, te paso un ejemplo muy sencillo en el que en lugar de cargarlo por ejemplo, ejecutando una consulta, lo creo desde cero manualmente, lo importante esta en el enlace que hacemos del datagrid con el recordset.

Ejemplo:

Private Sub Form_Load()
    Dim Rs As New ADODB.Recordset
    Rs.Fields.Append "Cantidad", adBigInt
    Rs.Fields.Append "Descripción", adBSTR
    Rs.Open
    Rs.AddNew
    Rs.Fields("Cantidad") = 1
    Rs.Fields("Descripción") = "Articulo 1"
    Rs.Update
    Rs.AddNew
    Rs.Fields("Cantidad") = 10
    Rs.Fields("Descripción") = "Articulo 2"
    Rs.Update
    Set DataGrid1.DataSource = Rs ' Linea importante
End Sub

Nota: Previamente hemos ubicado un datagrid en el formulario.

2) La segunda cuestión es referente a la parte incial de tu código, aunque es muy posible de que es fácilmente optimizable:

Tu haces lo siguiente:

Dim mbEncontro As Boolean

mbEncontro = False

If Trim(Txt1.Text) <> "" Then
mbEncontro = True
msSql = "Select *"
msSql = msSql & "From Convenios where Convenio = "
msSql = msSql & "'" + Trim(Txt1.Text) + "'"

End If

If Trim(msSql) = "" Then Exit Sub
If mbEncontro = False Then Exit Sub
------------------------------

Cuando en realidad basta con

If Trim(Txt1.Text) <> "" Then
 msSql = "Select *"
 msSql = msSql & "From Convenios where  Convenio = "
 msSql = msSql & "'" + Trim(Txt1.Text) + "'"
else
 exit sub
End If

Si hay cualquier otra razón por la que esto no sea posible disculpa por la metida de pata

Bueno CCortes buena suerte
Hablamos!

ccortes

  • Miembro activo
  • **
  • Mensajes: 91
    • Ver Perfil
Re: Desplegar datos en Datagrid
« Respuesta #3 en: Martes 23 de Septiembre de 2003, 19:43 »
0
Gracias a los dos por sus respuestas. Pero he de indicarles que la opcion de Mellileo es la mas viable pero a pesar de haberlo intentado no obtuvo los resultados deseados (tal ves lo hice mal), asi que millileo si me puedes explicar un poco mejo como puedo hacer dos recordets te lo agradeceria, tal ves la forma en que los hago no es la mas correcta.

Jkim segun tu ejemplo, eso sirve para agregar datos yo no deseo eso lo que deseo es desplegar datos de la tabla, pero solo dos campos, que son los que tienen, a veces, mas de un registro con esa misma llave, ya que el resto esta desplegado en textbox que siempre tienen un solo registro por campo.

Ejemplo:

codigo 1


detalles del pedido

cantidad       Articulo
10                 sillas

cuando el detalle solo lleva un articulo no es problema, el problema esta cuando el detalle es de mas de 2 articulos, esto haciendolo como indique en el codigo anterior.
Carlos Cortés C

JKim

  • Miembro activo
  • **
  • Mensajes: 66
    • Ver Perfil
Re: Desplegar datos en Datagrid
« Respuesta #4 en: Martes 23 de Septiembre de 2003, 22:24 »
0
Hola CCortes!

A ver yo entendí q tienes un textbox en el que introduces un id de un campo, a partir de el recuperaras de la bd unos datos q son los que quieres q aparezcan en el datagrid. Si no es así hazmelo saber, pq no acabo de entender a q te refieres con eso de desplegar datos del datagrid.

En resumen, si es lo q entendí, tienes q hacer una consulta, y los datos q recuperes estaran en un recordset, y lo q falta es que lo enlaces al datagrid con una linea del estilo a:

Set DataGrid.DataSource = Rset

Donde Rset es el recordset con los datos q has recuperado.

Bueno suerte, y espero poderte ayudar!

ccortes

  • Miembro activo
  • **
  • Mensajes: 91
    • Ver Perfil
Re: Desplegar datos en Datagrid
« Respuesta #5 en: Martes 23 de Septiembre de 2003, 22:41 »
0
Es eso lo que quiero lo que pasa es debo de "fraccionar" la consulta.

En resumen la tabla tiene 10 campos, 8 de ellos los debo mostrar en Textbox, porque son campos por ejemplo: nombre, codigo, telefono, direccion, etc.

Los dos restantes deben de aparecer en datagrid porque llevan varias lineas cantidad, descripcion de los productos.

Deben de aparecer en un data grid porque en el form tengo la opcion de modificar, es decir tengo que poder editar en el grid y despues actualizar la tabla.
Carlos Cortés C

JKim

  • Miembro activo
  • **
  • Mensajes: 66
    • Ver Perfil
Re: Desplegar datos en Datagrid
« Respuesta #6 en: Martes 23 de Septiembre de 2003, 23:21 »
0
Hola CCortes!

Supongamos q tienes una tabla con lo siguientes campos:

Nombre
Apellido
Producto

y q almacenas datos como

Carlos, Cortes, Silla
Carlos, Cortes, Mesa
Kim, CL, Album de fotos

Si es así, lo q ocurre es q no tienes la bd normalizada y tienes dos soluciones: normalizarla, con lo cual harás justicia al nombre de bd relacionales (ganando las ventajas q ello conlleva) o dos intentar un apaño.

El apaño es sencillo has dos consultas una q te devuelva los datos q vas a poner en los textbox y otra para el datagrid, ambas filtrando por el id.

Pero te recomiendo encarecidamente q hagas una normalización de las tablas.

Saludos y hablamos!

ccortes

  • Miembro activo
  • **
  • Mensajes: 91
    • Ver Perfil
Desplegar datos en Datagrid
« Respuesta #7 en: Miércoles 24 de Septiembre de 2003, 00:28 »
0
Gracias, veo que no hay forma de hacerlo (segun parece), normalizar es lo que no queria porque tendria que modificar muchas consultas que se volveran un poco lentas y mis reportes tambien en fin ni modo

Minetras sea para la perfeccion :good:
Carlos Cortés C