Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Problema con data grid

Estas en el tema de Problema con data grid en el foro de Visual Basic clásico en Foros del Web. Hola amigos del foro Solo queria de su ayuda para resolver este problema Tengo un data grid que se encuentra conectada a una tabla de ...
  #1 (permalink)  
Antiguo 08/07/2008, 09:22
 
Fecha de Ingreso: marzo-2008
Ubicación: Posadas Misiones Argentina
Mensajes: 480
Antigüedad: 16 años, 1 mes
Puntos: 1
Problema con data grid

Hola amigos del foro

Solo queria de su ayuda para resolver este problema


Tengo un data grid que se encuentra conectada a una tabla de una base de datos de Access 2003(lo conecto con ADO). La Tabla ya tiene valores cargados.
Ademas el data grid tiene habilitadas(true) las propiedades donde directamente yo puedo modificar las celdas, borrar cualquier celda.

La Idea es poder modificar los valores de los campos de la tabla.

Para ello tengo un procedimiento para control de errores .
El mismo se activa con el evento beforecolupdate del data grid.

El procedimiento me controla que ingrese una fecha valida(fecha corta de Access, sin letras o espacios en blanco o cualquier simbolo raro).

Tambien controla que no deje en blancos campos obligatorios o claves.

El problema es que no anda bien , porque en vez de controlar los valores que ingreso en cada celda del data grid, controla los valores anteriores que ya estaban grabados en la tabla de la base de Datos de Access.

Entonces nunca encuentra un error(fechas mal ingresadas, campos en blanco)

A continuacion dejo el algoritmo

Cita:
Private Sub DataGrid1_BeforeColUpdate(ByVal ColIndex As Integer, OldValue As Variant, Cancel As Integer)
Select Case ColIndex = 3
Case 0 ' suponemos que la 1ª columna es la de fecha
If Not IsDate(DataGrid1.Text) Then
MsgBox "Introduzca una fecha válida"
Adodc1.Recordset.CancelUpdate
End If
Case 1, 2, 3 ' las columnas 2, 3 y 4 son obligatorias
If IsNull(DataGrid1.Text) Then
MsgBox "El campo no puede estar vacío"
Adodc1.Recordset.CancelUpdate
End If

Le agradeceria mucho si me pueden ayudar.

Gracias
  #2 (permalink)  
Antiguo 08/07/2008, 09:44
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: Problema con data grid

Cita:
Iniciado por pabje Ver Mensaje
Hola amigos del foro

El problema es que no anda bien , porque en vez de controlar los valores que ingreso en cada celda del data grid, controla los valores anteriores que ya estaban grabados en la tabla de la base de Datos de Access.

Entonces nunca encuentra un error(fechas mal ingresadas, campos en blanco)
Gracias
Eso que indicas nunca puede ocurrir, a no ser que tengas anteriormente algún código que mueva el puntero del recordset.

Prueba en ese mísmo evento a poner:

MsgBox ColIndex & " " & OldValue

tiene me mostrar el número de columna (recuerda que empieza por cero) y el valor antes de modificarlo, pero lo que evaluará será el valor intruducido en la celda.

Por cierto, Cambia esta instrucción "Select Case ColIndex = 3" por esta otra "Select Case ColIndex". El "= 3" se me escapó en el ejemplo anterior.

  #3 (permalink)  
Antiguo 18/07/2008, 09:44
 
Fecha de Ingreso: marzo-2008
Ubicación: Posadas Misiones Argentina
Mensajes: 480
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Problema con data grid

Hola a todos los amigos del foro

Nuevamente pido de su ayuda para resolver esta inconveniente que lo he planteado anteriormente y que hasta ahora no he podido encontrar una solucion, ni tampoco los amigos del foro.

He hecho lo que me dijieron , pero tengo el mismo problema.

El evento beforecolupdate del data grida me lee los datos que ya estan grabados en la base de datos, y no lo que ingreso por teclado en cada columna.

Agrego que los datos que aparecen en el data grid(datos que quiero modificar), provienen de unas consultas que se ejecutan de acuerdo a las condiciones que se encuntran en su if condicional. Las consultas son las siguientes:


Cita:
If txtnumeroc.Text <> "" Then
adoconsultas.RecordSource = "select * from consultas where con_nro=" & CLng(txtnumeroc.Text)
adoconsultas.Refresh
End If

If txtnumeroc.Text = "" And txtdni.Text <> "" And maskfechad.Text = "__/__/____" And maskfechaa.Text = "__/__/____" Then
adoconsultas.RecordSource = "select * from consultas where con_dni= " & CLng(txtdni.Text)
adoconsultas.Refresh
End If

If txtnumeroc.Text = "" And txtdni.Text <> "" And maskfechad.Text <> "__/__/____" And maskfechaa.Text <> "__/__/____" Then
adoconsultas.RecordSource = "select * from consultas where con_dni= " & CLng(txtdni.Text) & "and con_fec Between #" & Format(maskfechad.Text, "mm/dd/yyyy") & "# And #" & Format(maskfechaa.Text, "mm/dd/yyyy") & "#"
adoconsultas.Refresh
End If

Le agradeceria si nuevamente me vuelven a auxiliar.
  #4 (permalink)  
Antiguo 18/07/2008, 10:34
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: Problema con data grid

Hola amigo,

esto que pones ahora no tiene absolutamente nada que ver con lo que pusiste hace 10 días.

El código que te puse en el anterior post y que reproduces al principio de éste, lo que hace es validar los datos introducidos en cada celda del Grid y tú lo que intestas hacer ahora, por lo que veo, es comparar unos datos introducidos en otros controles y no en el Grid, con lo cual al aplicar ese código en el evento BeforeColUpdate, éste se quedará como si te arrascas la barriga, es decir no hará nada.

Si como dices, o así lo entiendo, tienes las propiedades AllowUpdate y AllowAddNew del Grid a True, lo que escribas en la celda del Grid se grabará directamente en la tabla sin mas (siempre y cuando los valores se correspondan con los campos de la tabla).

Espero que lo hayas comprendido.

  #5 (permalink)  
Antiguo 18/07/2008, 18:35
 
Fecha de Ingreso: marzo-2008
Ubicación: Posadas Misiones Argentina
Mensajes: 480
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Problema con data grid

Hola amigo del foro

Tal vez no me explique bien , pero te cuento como es el asunto.

Se trata de modificar datos de consultas medicas de pacientes de una clinica.

Tengo 2 pantallas relacionado a este proceso y a continuacion explico lo siguiente:


a) Contenidos de la pantallas


a.1) Pantalla 1(frmmodifcart)

Contien los siguiente controlos:

txtnumeroc: se ingresa el numero de consulta que corresponde a una sola consulta medica de un paciente.

txtdni: se ingresa el numero de documento del paciente.

txtnya : se ingresa el nombre y apelledio del paciente.

maskfechad y maskfechaa : Son Intervalo de fechas para ubicar mas o menos entre que fechas se encuentra la consulta a modificar de un determinado paciente.

Ademas tengo un control ado(adoconsultas) que lo uso para localizar la consulta medica de una determinado paciente .
Aca localizo la consulta medica, pero recien visualizo dicha consulta en el data grid de la pantalla 2.

Aclaracion: La consulta(adoconsultas) es lo que puse en la respuesta anterior, mas precisamente en el cuadro gris, y que no se entendio adonde encajaba.


a.2) Pantalla 2 (frmmodificart2)

Tiene un data grid que esta conectado por codigo a la consulta de la pantalla 1(adoconsultas) .
El codigo de conexion es : set DataGrid1.DataSource= frmmodificart.adoconsultas




b) Función de cada pantalla


b.1) Pantalla 1(frmmodifcart)

Solo se usa para encontrar la consulta medica , y pudo localizar dicha consulta medica de distintas maneras. Puede ser con:

El txtumeroc :El numero de consulta . Esta numero se ingresa para acceder directamente a la consulta que se desea modificar.

El txtdni o el txtnya: En el caso de que el paciente no sepa el numero de consulta, entonces se puede buscar la consulta con su dni o nombre y apellido.


maskfechad y maskfecaa: se usan con la cajas txtdni o txtnya , para reducir la cantida de consultas que puedan aparecer del paciente.(pero estas fechas se usan siempre y cuando no se acuerde el numero de consulta medica el paciente.

Una vez que el usuario ingresa los datos(cajas de texto) para buscar la consulta medica de una manera , entonces hace clic en un boton llamado Aceptar y va a la pantalla 2


b.2) Pantalla 2(frmmodificart2)

Es en esta pantalla que recien aparece el data grid con el resultado de la consulta(Adoconsultas) que yo hago en la pantalla 1.
Aca recien me va a visualizar las consultas en el data grid y no en la pantalla 1.

Te repito que tengo el data grid conectado al control ado, y habilitadas la opciones de modificar y borra, y por supuesto el envento beforecolupdate.

Y aca es donde esta el problema , pues no me anda el evento beforecolupdate ,
Cuando modifico el valor de una columna del data grid, y luego me me voy a otra columna , me aparece un error que dice:

microsoft data Grid Control
La operación en varios pasos genero varios errores. Compruebe los valores de estado.


Ademas me coloca el programa el valor viejo que ya estaba grabado en la base de datos.

Entonces para ver lo que pasa, lo ejecuto al proceso con F8 y puedo ver que
lee lo que ya está grabado en la base de datos, y no los valores que ingreso por teclado.


Bueno espero que me puedan ayudar y Gracias por Todo Avelleneda y todos los que conforman y le ayudan en esta tarea de ayudar a otros.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:08.