Problema con ADO

Hola Charli!
Estoy empezando en esto y me pierdo un poco. Tengo un pequeño proyecto con Ado una DB de una sola tabla y varios frms el frm principal para entrada de datos otro con un DataList para seleccionar registros y otro con una DataGrid solo para visualizarlos, todos con su control Adodc1 conectados con la DB.
En el frm principal es donde se realiza todo el proceso botones de Agregar, Aceptar, Borrar etc.. Y sus TextBox correspondientes a cada uno de los campos de la Tabla.
Todo funciona más o menos bien hasta que llamo al DataList o al DataGrid por medio de sus botones que tengo en el frm principal y cuando vuelvo a éste pierdo la conexión del control Adodc1 con la DB, o sea que no me deja moverme cuando pico en sus flechas adelante, atrás, principio, fin... Se queda fijo en el registro que esté visializado en ese momento.
No se cual sera el problema ¿habrá qué hacer una nueva conexión con la DB y el Recordset? Tal vez, pero ¿dónde? Y ¿Cómo? Si tú me puedes ayudar, pues te lo agradecería muchísimo. Saludos Alf

1 Respuesta

Respuesta
1
Así a bote pronto no te puedo decir nada concreto puede que cierres en algún sitio la conexión y al volver te la encuentres cerrada, puede que cambies el origen de datos de la datagrid por código y luego no encuentre el origen que le has dado por diseño, no se. Una cosa, si quieres mándame el código y le echo un ojo porque ya te digo que puede ser por bastantes cosas.
Siento dejarte así.
Que tal charli! No está todo pero te mando lo que creo que es esencial.
Te espero, chao! Alf
<Módulo>
Global EntradaRegistro As Boolean
-------------------------------------
<frmInicio>
Private Sub Command1_Click()
Dim NumReg As Integer
frmdatos.Adodc1.Recordset.MoveLast
NumReg = frmdatos.Adodc1.Recordset.RecordCount
frmdatos.Label22.Caption = NumReg
frmdatos.Adodc1.Recordset.MoveFirst
frmdatos.Show
End Sub
--------------------------------------
<frmdatos>
Private Sub cmdAgregar_Click()
On Error GoTo Interrupcion
txtnombre(0).SetFocus
Adodc1.Recordset.AddNew
Exit Sub
Interrupcion:
MsgBox Err.Description
End Sub
Private Sub cmdAceptar_Click()
On Error GoTo Interrupcion
Dim Reply As String
Dim NumReg As Integer
Reply = MsgBox("¿Los datos son correctos?", vbYesNo + vbQuestion, "ACEPTAR ó CANCELAR REGISTRO")
If Reply = vbYes Then
Adodc1.Recordset.Update
EntradaRegistro = False
Adodc1.Enabled = True
Adodc1.Recordset.Requery
Adodc1.Recordset.MoveLast
NumReg = Adodc1.Recordset.RecordCount
Label22.Caption = NumReg
End If
If Reply = vbNo Then
Adodc1.Recordset.CancelUpdate
Adodc1.Refresh
EntradaRegistro = False
Adodc1.Enabled = True
End If
txtnombre(0).SetFocus
Exit Sub
Interrupcion:
MsgBox Err.Description
End Sub
Private Sub cmdMCaducadas_Click()
frmMatCaducadas.Show
End Sub
Private Sub cmdHojaDatos_Click()
frmHojaDatos.Show
End Sub
Private Sub cmdListado_Click()
frmListado.Show
End Sub
Private Sub cmdSalir_Click()
Dim Reply As String
Reply = MsgBox("¿Desea salir del programa?", vbYesNo + vbQuestion, "SALIR")
If Reply = vbYes Then End
End Sub
Private Sub cmdEliminar_Click()
Dim Reply As String
Dim NumReg As Integer
Reply = MsgBox("¿Desea eliminar ésta materia?", vbYesNo + vbQuestion, "ELIMINAR MATERIA")
If Reply = vbNo Then Exit Sub
NumReg = Adodc1.Recordset.RecordCount
Label22.Caption = NumReg - 1
Adodc1.Recordset.Delete
Adodc1.Recordset.MoveNext
End Sub
Private Sub cmdBuscarModificar_Click()
On Error GoTo Interrupcion
Dim Reply As String
Dim Actual As String
Dim mensaje As String
Reply = InputBox("Introducir nombre a Buscar o Modificar", "BUSCAR O MODIFICAR MATERIA")
If Reply = "" Then Exit Sub
Actual = "SELECT * FROM Tabladatos WHERE [Materia Activa] ='" & Reply & " ' "
Adodc1.RecordSource = Actual
Adodc1.Refresh
txtnombre(0).SetFocus
If Reply <> txtnombre(0).Text Then
mensaje = MsgBox("Nombre no encontrado-¿desea buscar otro?", vbYesNo + vbQuestion, "BUSCAR O MODIFICAR MATERIA")
If vbNo = vbNo Then Exit Sub
End If
Adodc1.Recordset.Update
EntradaRegistro = False
Adodc1.Enabled = True
Adodc1.Recordset.Requery
Exit Sub
Interrupcion:
MsgBox Err.Description
End Sub
---------------------------------------
<frmListado>
Private Sub cmdCerrar_Click()
Unload frmListado
frmdatos.txtnombre(0).SetFocus
End Sub
Private Sub DataList1_Click()
On Error GoTo Interrupcion
Dim str As String
str = "Select * FROM Tabladatos WHERE [Materia Activa] ='" & _
DataList1.BoundText & "'"
With frmdatos.Adodc1
frmdatos.Adodc1.RecordSource = str
frmdatos.Adodc1.Refresh
End With
With DataList1
DataList1.Refresh
End With
frmdatos.txtnombre(0).SetFocus
Exit Sub
Interrupcion:
MsgBox Err.Description
End Sub
-------------------------------------
<frmHojaDatos>
Private Sub Cerrar_Click()
frmdatos.Show
frmdatos.txtnombre(0).SetFocus
End Sub
--------------------------------------
<frmMatCaducadas>
Private Sub Cerrar_Click()
frmdatos.Show
frmdatos.txtnombre(0).SetFocus
End Sub
Creo que el problema es el siguiente: tal y como te dije en la 1º respuesta, cambias el origen de datos (adodc1), y luego no lo vuelves a dejar como lo tenias. Me imagino que por diseño le habrás dado un recordsource al adodc1.
Bien, hay 2 momentos en los que cambias ese origen de datos:
1-
Actual = "SELECT * FROM Tabladatos WHERE [Materia Activa] ='" & Reply & " ' "
Adodc1.RecordSource = Actual
2-
str = "Select * FROM Tabladatos WHERE [Materia Activa] ='" & _
DataList1.BoundText & "'"
With frmdatos.Adodc1
frmdatos.Adodc1.RecordSource = str
Y luego no veo en ningún momento que anules ese recordsource y lo dejes como lo tenias por diseño, de ahí que se te quede pillado con los datos que arrastra del cambio de recordsource. Si consigues dejar el recordsource como lo tienes al principio, después de trabajar con los orígenes de datos distintos, lo tendrás solucionado, pero eso ya depende de ti, de como le hayas dado el origen de datos (recordsource) al principio.
Hola charli! Creo que hemos dado con el problema pues casi me funciona.
Me dices que anule el recordsource ¿qué quieres decir con anular? ¿Cerrar el adodc1?
Mira ¿qué te parece si te mando el proyecto zipeado? Solo ocupa 209 KB, como ves no me he complicado mucho.
Espero, hasta pronto Alf
De acuerdo: [email protected]
Mándamelo en cuanto pueda le echo un ojo y te comento. Si puedes mándame también base de datos y así trabajo con tus datos en real.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas