Error en DataGrid enlazados

Hola, perdona que te moleste pero es que llevo toda semana tratando de sacar información sobre un error y no doy con la solución.
Tengo dos DataGrid enlazados entre sí mediante código de Visual basic y a través de ado, con bases de dates de access, cuando selecciono un registro en el primer datagrid, en el segundo salen todos los registros relacionados con el primero, eso
Lo hago produciendo eventos al mover las teclas de dirección, enter o el ratón y funciona bien, pero al navegar por el segundo datagrid en cuanto manejo el ratón me da el siguiente error:
"La operación en varios pasos generó errores, compruebe los valores de estado".
Por otra parte controlo la primera fila o la última a través de recordcount del recordset del ado, no sé si habrá alguna otra forma que lo haga más directamente, yo leyendo toda la información en la ayuda del Visual Basic sobre el datagrid no lo he encontrado.
No sé si te habrás encontrado con este problema, o sabrás algo al respecto, de cualquier manera muy agradecido por tu atención.
Gracias y un saludo.

1 Respuesta

Respuesta
1
El error que me emnciona puede ser por varias cosas.
1. La tabla o consulta origen del objeto ado, muchas consultas sobre todo en relaciones de uno a muchos o relaciones con right join puede generar el problema.
2. Me imagino que al realizar los eventos hace un find o filter, para mostrar los datos en el segundo datagrid, acá puede haber otro problema ya que puede ser que quede como solo lectura...
3. Que actualize un dato en el datagrid, pero no en el recordset...
Me gustaría que mandara más datos sobre sobre como es el origen de los datos... y sino hay problema un archivo en vb donde se presente el problema y yo te ayudo...
Por otra parte, para saber el total de registros utilice el Recordcount, para saber en que registro se encuentra el AbsolutePosition...
OJO: Cuando trabajo con grillas, me gusta trabajar con los sheridan son grillas espectaculares porque son muy flexibles y las puede trabajar como quiera, fuera de eso viene tanto para ado como dao..
Si te sirve la ultima idea me avisa y yo se las mando comprimidas... pero ocupan mucho espacio... si tienes una cuenta en Yahoo seria mejor...
Suerte
Telemaco
Hola Telemaco:
Respecto de las grillas sheridan, la verdad es que estoy empezando a trabajar con Visual Basic, en plan autodidacta y no tengo información alguna, o sea que no sé si se pueden trabajar con Visual Basic, si es así y son recomendables me lo puedes enviar a la siguiente cuenta [email protected].
En cuanto al otro tema te adjunto el código:
Option Explicit
Dim vt1 As String
Dim vt11 As String
Dim vi1 As Integer
Dim vt2 As String
Dim vt21 As String
Dim vi2 As Integer
Private Sub Form_Load()
vgtu = "01"
DG1.Row = 0
DG1.Col = 0
vt1 = DG1.Text
activar
End Sub
Private Sub DG1_MouseMove(índice As Integer, mayús As Integer, x As Single, y As Single)
vgtu = "01"
DG1.Col = 0
vt1 = DG1.Text
activar
End Sub
Private Sub DG2_MouseMove(índice As Integer, mayús As Integer, x As Single, y As Single)
DG2.Col = 0
vt2 = DG2.Text
activar2
End Sub
Private Sub DG1_KeyPress(KeyAscii As Integer)
contar
If KeyAscii = 13 Then
If DG1.Row = vi1 Then
DG1.Row = 0
DG1.Col = 0
vt1 = DG1.Text
activar
Else
DG1.Row = DG1.Row + 1
DG1.Col = 0
vt1 = DG1.Text
activar
End If
End If
End Sub
Private Sub DG2_KeyPress(KeyAscii As Integer)
'contar2
If KeyAscii = 13 Then
If DG2.Row = vi2 Then
DG2.Row = 0
DG2.Col = 0
vt2 = DG2.Text
activar2
Else
DG2.Row = DG2.Row + 1
DG2.Col = 0
vt2 = DG2.Text
activar2
End If
End If
End Sub
Private Sub DG1_KeyUp(KeyCode As Integer, Shift As Integer)
contar
If KeyCode = vbKeyDown Then
If DG1.Row = vi1 Then
DG1.Row = 0
DG1.Col = 0
vt1 = DG1.Text
activar
Else
DG1.Col = 0
vt1 = DG1.Text
activar
End If
Else
If KeyCode = vbKeyUp Then
If DG1.Row = 0 Then
DG1.Row = vi1
DG1.Col = 0
vt1 = DG1.Text
activar
Else
DG1.Col = 0
vt1 = DG1.Text
activar
End If
End If
End If
End Sub
Private Sub DG2_KeyDown(KeyCode As Integer, Shift As Integer)
'contar2
If KeyCode = vbKeyDown Then
If DG2.Row = vi2 Then
DG2.Row = 0
DG2.Col = 0
vt2 = DG2.Text
activar2
Else
DG2.Col = 0
vt2 = DG2.Text
activar2
End If
End If
End Sub
Private Sub DG2_KeyUp(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyUp Then
If DG2.Row = 0 Then
DG2.Row = vi2
DG2.Col = 0
vt2 = DG2.Text
activar2
Else
DG2.Col = 0
vt2 = DG2.Text
activar2
End If
End If
End Sub
Private Sub activar()
vt11 = "SELECT agendau.Organización, agendau.iau" & _
" FROM usuarios INNER JOIN (gruposu INNER JOIN agendau ON gruposu.igu = agendau.igu) ON usuarios.idu = agendau.idu" & _
" WHERE (((gruposu.igu LIKE '" & vt1 & "'))" & _
" AND ((usuarios.idu LIKE '" & vgtu & "')))" & _
" ORDER BY agendau.Organización"
Ad2.RecordSource = vt11
Ad2.Refresh
DG2.Refresh
contar2
End Sub
Private Sub activar2()
vt21 = "SELECT agendau.Organización, agendau.Tfno," & _
" agendau.Tfno1, agendau.Fax," & _
" agendau.Nombre, agendau.Tfnon, agendau.Nombre1, agendau.Tfnon1," & _
" agendau.Nombre2, agendau.Tfnon2, agendau.Nombre3, agendau.Tfnon3," & _
" agendau.Nombre4, agendau.Tfnon4, agendau.Nombre5, agendau.Tfnon5" & _
" From agendau WHERE (((agendau.iau LIKE '" & vt2 & "')))"
Ad3.RecordSource = vt21
Ad3.Refresh
End Sub
Private Sub contar()
vi1 = Ad1.Recordset.RecordCount
vi1 = vi1 - 1
End Sub
Private Sub contar2()
vi2 = Ad2.Recordset.RecordCount
vi2 = vi2 - 1
End Sub
No sé si te aclararás mucho pues como he indicado soy muy inexperto y me cuesta mucho avanzar en los temas pues las ayudas de Visual basic son muy limitadas y complejas.
Muchas gracias y saludos.
Otra vez:
No te preocupes, por lo de los sheridan.. son muy sencillos de trabajar, son muy flexibles, puedes amarrarlos a un origen de datos, y ademas le mandaría algunos ejemplos...
De todas maneras dejame mirar el código que me mando y te cuento... pero dame un poquito de tiempo, a más tardar te mando todo el Jueves, si puedo antes...
Att:TELEMACO
Disculpa la demora...
Te envíe los Sheridan en tres entregas por el tamaño... trabájalos son muy buenos... me avisa cualquier duda..
No se te olvide finalizar la pregunta

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas