Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: rokchlafen en Enero 14, 2015, 01:19:27 pm
-
Hola a todos.
Después de darle mil vueltas recurro a ustedes a ver si me pueden ayudar.
Tengo dos formularios. CrearForm y ModificarForm. Ambos llevan un datagrid: grillaregistros.
Los forms por separado funcionan a la perfección, el problema resulta cuando:
A) Si abro CrearForm, luego ModificarForm, al volver a CrearForm me encuentro que eldatagrid esta completamente vacio(nada, ni campos ni el formatoque aplique , nada).
B) lo mismo pero al reves..... Si abro ModificarForm, luego CrearForm , al volver a ModificarForm me encuentro que eldatagrid esta completamente vacio.
''''''''CODIGO FORM CREAR''''''
Private Sub ccmdReestablecer_Click()
LIMPIAR
End Sub
Private Sub cmdCerrar_Click()
Unload Me
End Sub
Private Sub cmdCrear_Click()
If txtNombre.Text = "" Then MsgBox "El campo GRUPO no puede estar vacio", vbInformation, "Aviso": txtNombre.SetFocus: Exit Sub
If txtInt1.Text = "" Then MsgBox "El campo Integrante 1 no puede estar vacio", vbInformation, "Aviso": txtInt1.SetFocus: Exit Sub
If txtInt2.Text = "" Then MsgBox "El campo Integrante 2 no puede estar vacio", vbInformation, "Aviso": txtInt2.SetFocus: Exit Sub
If txtInt3.Text = "" Then MsgBox "El campo Integrante 3 no puede estar vacio.En caso de que solo haya dos miembros en el grupo ponga un punto.", vbInformation, "Aviso": txtInt3.SetFocus: Exit Sub
With RsRegistros
.Requery
.AddNew
!grupo = txtNombre.Text
!fecha = DTPicker1.Value
!integrante1 = txtInt1.Text
!integrante2 = txtInt2.Text
!integrante3 = txtInt3.Text
.Update
.Requery
LIMPIAR
End With
FormatoGrillaRegistros
MsgBox " GRUPO CREADO", vbInformation, ""
Unload Me
End Sub
Private Sub Form_Load()
Skin1.LoadSkin App.Path & "\skin.skn" ''''' CARGAMOS EL SKIN
Skin1.ApplySkin RegistrosForm.hWnd '''''APLICAMOS EL SKIN A NUESTRO FORMULARIO
REGISTROS
DATOS
Set GrillaRegistros.DataSource = RsRegistros
FormatoGrillaRegistros
BLOQUEAR
End Sub
Sub LIMPIAR()
txtNombre.Text = ""
DTPicker1.Value = Date
txtInt1.Text = ""
txtInt2.Text = ""
txtInt3.Text = ""
txtNombre.SetFocus
End Sub
Sub FormatoGrillaRegistros()
With RsRegistros
GrillaRegistros.Columns(0).Width = 0
GrillaRegistros.Columns(1).Width = 2000
GrillaRegistros.Columns(2).Width = 1000
GrillaRegistros.Columns(3).Width = 3500
GrillaRegistros.Columns(4).Width = 3500
GrillaRegistros.Columns(5).Width = 3500
End With
End Sub
Sub BLOQUEAR()
GrillaRegistros.AllowUpdate = False
End Sub
''''''''CODIGO FORM MODIFICAR''''''
Private Sub ccmdReestablecer_Click()
LIMPIAR
End Sub
Private Sub cmdModificar_Click()
If lblIdregistros.Caption = "" Then MsgBox "Selecciona un Grupo a modificar", vbInformation, "Aviso": Exit Sub
If txtNombre.Text = "" Then MsgBox "El campo nombre no puede estar vacio", vbInformation, "Aviso": txtNombre.SetFocus: Exit Sub
If txtInt1.Text = "" Then MsgBox "El campo Integrante 1 no puede estar vacio", vbInformation, "Aviso": txtInt1.SetFocus: Exit Sub
If txtInt2.Text = "" Then MsgBox "El campo Integrante 2 no puede estar vacio", vbInformation, "Aviso": txtInt2.SetFocus: Exit Sub
If txtInt3.Text = "" Then MsgBox "El campo Integrante 3 no puede estar vacio.En caso de que solo haya dos miembros en el grupo ponga un punto.", vbInformation, "Aviso": txtInt3.SetFocus: Exit Sub
With RsRegistros
.Requery
.Find "IdRegistros='" & Val(lblIdregistros.Caption) & "'"
!grupo = txtNombre.Text
!fecha = DTPicker1.Value
!integrante1 = txtInt1.Text
!integrante2 = txtInt2.Text
!integrante3 = txtInt3.Text
.UpdateBatch
.Requery
LIMPIAR
BLOQUEAR
End With
FormatoGrillaRegistros
MsgBox " GRUPO MODIFICADO", vbInformation, ""
Unload Me
End Sub
Private Sub Form_Load()
Skin1.LoadSkin App.Path & "\skin.skn" ''''' CARGAMOS EL SKIN
Skin1.ApplySkin ModificarRegistrosForm.hWnd '''''APLICAMOS EL SKIN A NUESTRO FORMULARIO
REGISTROS
DATOS
Set GrillaRegistros.DataSource = RsRegistros
FormatoGrillaRegistros
BLOQUEAR
GrillaRegistros.AllowUpdate = False
End Sub
Sub FormatoGrillaRegistros()
With RsRegistros
GrillaRegistros.Columns(0).Width = 0
GrillaRegistros.Columns(1).Width = 2000
GrillaRegistros.Columns(2).Width = 1000
GrillaRegistros.Columns(3).Width = 3500
GrillaRegistros.Columns(4).Width = 3500
GrillaRegistros.Columns(5).Width = 3500
End With
End Sub
Private Sub GrillaRegistros_Click()
With RsRegistros
If .BOF Or .EOF Then Exit Sub
.Find "IdRegistros='" & Val(GrillaRegistros.Columns(0).Text) & "'"
lblIdregistros.Caption = !IdRegistros
txtNombre.Text = !grupo
DTPicker1.Value = !fecha
txtInt1.Text = !integrante1
txtInt2.Text = !integrante2
txtInt3.Text = !integrante3
DESBLOQUEAR
'lblCodigo.Caption = !IdRegistros
End With
End Sub
Sub LIMPIAR()
txtNombre.Text = ""
DTPicker1.Value = Date
txtInt1.Text = ""
txtInt2.Text = ""
txtInt3.Text = ""
txtNombre.SetFocus
End Sub
Sub BLOQUEAR()
txtNombre.Locked = True
txtInt1.Locked = True
txtInt2.Locked = True
txtInt3.Locked = True
DTPicker1.Enabled = False
End Sub
Sub DESBLOQUEAR()
txtNombre.Locked = False
txtInt1.Locked = False
txtInt2.Locked = False
txtInt3.Locked = False
DTPicker1.Enabled = True
End Sub
El caso es que en el form modificar al hacer clic me selecciona el registro a modificar, pero si se me vacia me da el error de que "conjunto de filas no esta disponible".
Mencionar que accedo a estos formularios desde los menús de un formulario MDI, y que si cierro los forms y vuelvo abrir funciona perfectamente, no se si se trata de alguna propiedad del grid pero no se exactamente donde puede estar el problema. Muchas gracias de antemano. Un saludo.
-
Hola
No conozco ese control (mejor dicho, no trabajo con el), pero me parece que solo puedes poblar un control de ese tipo a la vez, quiza requiera permanecer conectado , asumo que el RsRegistros lo has declarado en un modulo o en el formulario padre, bueno también que yo declarado el rs en cada modulo que lo necesite y no lo mantengo en memoria pero ya eso es tema de cada proyecto. En todo caso ¿y no te serviria declarar un RsRegistros2? en todo caso descarta eso, si esa solucion no te parece al menos ya sabes por donde va la cosa.
Saludos
-
Estimado rockchlafen
Tomando como referencia el caso B en el formulario CrearForm realiza el siguiente cambio en el evento Load del formulario y nos comentas si la grilla se ha borrado o no.
Private Sub Form_Load()
Skin1.LoadSkin App.Path & "\skin.skn" ''''' CARGAMOS EL SKIN
Skin1.ApplySkin RegistrosForm.hWnd '''''APLICAMOS EL SKIN A NUESTRO FORMULARIO
REGISTROS
DATOS
'Set GrillaRegistros.DataSource = RsRegistros
'FormatoGrillaRegistros
'BLOQUEAR
End Sub
Saludos, desde algún lugar de Lima-Perú
-
De veras muchas gracias por la contestación. Estoy realmente ofuscado con este tema. He realizado el cambio en crearform:
'Set GrillaRegistros.DataSource = RsRegistros
'FormatoGrillaRegistros
'BLOQUEAR
y lamentablemente el problemas persiste. Abro modificarform(aparece todo), luego abro crearform(ahora la grilla aparece vacia por no llamar al set), y al volver a modificarform se borra todo. Recalcar que los abro desde un MDI,el problema solo sale si abro uno y abro otro sin cerrar el priemero(a este es al que se le borran el grid). Si se cierra y vuelve abrir todo esta perfecto (tanto con la "x" del form como con cerrar del cmdbutton)
En cuanto a lo de crear diferentes recordset, no lo he probado....me preguntaba si podría hacerlo igual que el que viene abajo en el código que os muestro pero añadiendo un distintivo(un numero para cada vez que quiera usarlo en una grilla? seria hacer el recordset a la misma tabla).
''''DECLARACION EN UN MODULO'''''
Global Base As New ADODB.Connection
Global RsRegistros As New ADODB.Recordset
'''''''CONEXION EN OTRO MODULO''''''
Sub main()
With Base
.CursorLocation = adUseClient
.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\Base.mdb;Persist Security Info=False"
MDIForm1.Show
End With
End Sub
Sub REGISTROS()
With RsRegistros
If .State = 1 Then .Close
.Open "select * from TablaRegistros", Base, adOpenStatic, adLockOptimistic
End With
End Sub
De nuevo muchas gracias por vuestro esfuerzo, espero que haya una solución por que me pasa tambien en otros formularios en el que utilizo el mismo proceso :'(. Un saludo.
-
Estimado rokchlafen
Para no estar en idas y venidas, lo mejor es que compartas el proyecto o nos prepares un proyecto de ejemplo y lo compartas, claro está debes de adjuntar el control grilla
Saludos desde algún lugar de Lima-Perú
-
Me parece bien, hay alguna forma de compartirlo por el foro o tengo que subirlo yo?? Es que nunca he subido nada .... Gracias
-
Subelo a mega, dropbox, 4shared, etc y nos pones el enlace.
Saludos
-
Bueno he conseguido una cuenta ,ha costado pero muy util ,aquí esta el enlace.
Comentar también que si esta crearform o modificarform abiertos y se va a eliminar y buscar me descuadra el datagrid.
No se si hay alguna forma de que aparezcan los formularios en cascada o cualquier otra forma para poder ver mejor cuales son los que están abiertos.
Por ultimo en los form1 e introducrform , tengo un problema de validación con el primer txbox(txtX), que si pierde el foco al dar el keypress del txtY me lo guarda ya este letras vacio....
Un saludo y si ven cualquier cosa que esta mal soy todo oídos....muchas gracias por su pronta respuesta y preocupación. Un saludo. De nuevo mil gracias¡¡¡¡¡
-
Alguna solución??? o al menos saber si la podria tener??
Un saludo.
-
Y donde esta Link??? :o