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

2 dudas que tengo

Estas en el tema de 2 dudas que tengo en el foro de Visual Basic clásico en Foros del Web. 1. Tengo un msflexgrid conectado a una base de datos de acces y lo k quiero hacer es que cuando yo borre una fila de ...
  #1 (permalink)  
Antiguo 16/04/2010, 12:13
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años, 1 mes
Puntos: 0
2 dudas que tengo

1. Tengo un msflexgrid conectado a una base de datos de acces y lo k quiero hacer es que cuando yo borre una fila de la tabla que tenga puesto tambien se borre la fila de la base de datos.

2. Quiero que cuando añada un registro a la base de datos desde un formulario echo en visual basic, el msflexgrid al que esta conectado se actualize sin tener que salir y volver a entrar (creo que se hace con el refresh pero es k no se donde ponerlo)

Gracias y espero que alguien me ayuda

Salu2
  #2 (permalink)  
Antiguo 17/04/2010, 11:44
 
Fecha de Ingreso: mayo-2008
Mensajes: 14
Antigüedad: 16 años
Puntos: 0
Respuesta: 2 dudas que tengo

mira para que cuando cargas un registro nuevo a la base desde el form tienes que volver a llamar la rutina que cargue el msflexgrid, segun entiendo vos lo tenes agregada a la rutina en el evento load del form, por eso se carga cuando abris la pantalla y muestra los valores neuvos, bueno la misma rutina que carga el msflex debes ponerla despues que insertes el registro en la base, espero te sirva y sino publica el codigo asi te podemos ayudar mejor
saludos
  #3 (permalink)  
Antiguo 17/04/2010, 13:48
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: 2 dudas que tengo

Yo lo quiero hacer desde un boton aqui te muestro el codigo que tengo en el

Código vb:
Ver original
  1. Private Sub Command1_Click()
  2. 'Todos los campos que tenemos tienen que estar rellenos
  3. If Text1 = "" Or Text2 = "" Or Text3 = "" Or Text4 = "" Or Text5 = "" Or Text6 = "" Or Combo1 = "" Then
  4. MsgBox "Debes ingresar todos los datos", vbCritical, Me.Caption
  5. Exit Sub
  6. End If
  7. 'crear un objeto conexion
  8. Set cnprueba = New Connection
  9. 'Establecer sus propiedades
  10.     With cnprueba
  11.         .Provider = "Microsoft.Jet.oledb.4.0"
  12.         .ConnectionString = "prueba.mdb"
  13.     End With
  14. cnprueba.Open
  15. 'Crear un conjunto de registros desde la tabla Tbl_Direccion
  16. Set rsTbl_Direccion = New Recordset
  17. 'Establecer sus propiedades
  18. With rsTbl_Direccion
  19.     .CursorLocation = adUseClient
  20.     .Open "SELECT * FROM tbl_direccion", cnprueba, adOpenDynamic, adLockOptimistic
  21. End With
  22. 'Añadimos los registros del formulario a la base de datos
  23. With rsTbl_Direccion
  24. .AddNew
  25. .Fields("Nombre") = Text1.Text
  26. .Fields("Apellidos") = Text4.Text
  27. .Fields("Direccion") = Text5.Text
  28. .Fields("Ciudad") = Combo1.Text
  29. .Fields("Provincia") = Combo2.Text
  30. .Fields("Telefono") = Text2.Text
  31. .Fields("CP") = Text6.Text
  32. .Update
  33. MSFlexGrid1.Refresh
  34. End With
  35. MsgBox ("Datos exportados")
  36. End Sub

En este boton lo que quiero es que se actualize el msflexgrid cuando inserte los datos, y en otro boton que borre la fila de la base de datos que yo seleccione del msflexgrid (espero que se entienda lo que digo)
Salu2
  #4 (permalink)  
Antiguo 19/04/2010, 02:51
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: 2 dudas que tengo

¿¿Nadie sabe hacerlo??

Salu2
  #5 (permalink)  
Antiguo 19/04/2010, 05:45
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: 2 dudas que tengo

Acabo de terminar el de borrar pero me falta el de actualizar, que alguien me ayude que me estoy estresando

Código vb:
Ver original
  1. 'Pregunta
  2. If MsgBox("¿Está seguro de que desea eliminar el registro?", vbQuestion + vbYesNo, Me.Caption) = vbNo Then Exit Sub
  3. 'Se elimina de la base de datos.
  4. Set cnPrueba = New ADODB.Connection
  5. cnPrueba.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\prueba.mdb;Persist Security Info=False"
  6. cnPrueba.Open
  7. cnPrueba.Execute "delete from tbl_direccion where Id = " & MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 0)
  8. cnPrueba.Close
  9. Set cnPrueba = Nothing
  10. 'Se elimina el registro del msflexgrid
  11. MSFlexGrid1.RemoveItem (MSFlexGrid1.Row)
  #6 (permalink)  
Antiguo 19/04/2010, 07:51
 
Fecha de Ingreso: noviembre-2005
Mensajes: 751
Antigüedad: 18 años, 6 meses
Puntos: 13
Respuesta: 2 dudas que tengo

Hola

Yo no utilizo el MsFlexGrid, pero con el Data Grid, después de realizar un cambio (insert, delete, update), yo le suelo volver a pasar el origen de datos (el recordset) y luego lo refresco. Algo como:

Código vb:
Ver original
  1. ' Despues de realizar el Delete
  2. Set Datagrid1.DataSource = reg
  3. DataGrid1.Refresh

No se si eso te servirá con el MsFlexGrid, pero por intentar ...

--Saludos--
  #7 (permalink)  
Antiguo 19/04/2010, 07:59
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: 2 dudas que tengo

hola Insomnia, menos mal que alguien contesta, ya he probado ejemplo asi y no me han resultado pero no se si sera porque no se puede o porque los pongo mal yo:
Código vb:
Ver original
  1. ' Despues de realizar el Delete
  2. Set Datagrid1.DataSource = reg
  3. DataGrid1.Refresh
Código vb:
Ver original
  1. set msflexgrid1.textmatrix = reg
  2. msflexgrid1.refresh

Gracias por contestar
  #8 (permalink)  
Antiguo 19/04/2010, 08:47
 
Fecha de Ingreso: noviembre-2005
Mensajes: 751
Antigüedad: 18 años, 6 meses
Puntos: 13
Respuesta: 2 dudas que tengo

Hola

He estado mirando un poco las diferencias entre el datagrid y msflexgrid, y me parece que el msflexgrid no se puede cargar directamente con la propiedad .DataSource y un recordset.

Como haces para llenar de datos el msflexgrid?, creo que hay que recorrer todo el recordset e ir rellenando todas las celdas.

--Saludos--
  #9 (permalink)  
Antiguo 19/04/2010, 08:56
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: 2 dudas que tengo

Eso lo he echo con ado, importando un archivo de acces al msflexgrid,lo tengo posteado aqui:

http://www.forosdelweb.com/f69/exportar-acces-796989/
  #10 (permalink)  
Antiguo 19/04/2010, 09:21
 
Fecha de Ingreso: noviembre-2005
Mensajes: 751
Antigüedad: 18 años, 6 meses
Puntos: 13
Respuesta: 2 dudas que tengo

Hola

Si no me equivoco, tendrías que volver a rellenar el msflexgrid de la misma forma (limpiandolo primero y volviendolo a llenar)

Código vb:
Ver original
  1. msflexgrid1.clear
  2.  
  3. While Not rsTbl_Direccion.EOF
  4.    MSFlexGrid1.AddItem rsTbl_Direccion("id") & vbTab & rsTbl_Direccion("nombre") & vbTab & rsTbl_Direccion("apellidos") & vbTab & rsTbl_Direccion("direccion") & vbTab & rsTbl_Direccion("ciudad") & vbTab & rsTbl_Direccion("provincia") & vbTab & rsTbl_Direccion("telefono") & vbTab & rsTbl_Direccion("cp")
  5.  
  6.    rsTbl_Direccion.MoveNext
  7.  
  8. Wend
  9. msflexgrid1.refresh

De todas formas me parece un control bastante complicado, mira un poco los controles DataGrid o el MsHFlexGrid (Microsoft Hierarchical FlexGrid) que los puedes enlazar directamente a un recordset como te he puesto en el ejemplo anterior (a mi me parecen más sencillos de manejar). Si necesitas un ejemplo creo que tengo algo.

--Saludos--
  #11 (permalink)  
Antiguo 19/04/2010, 09:26
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: 2 dudas que tengo

Cita:
De todas formas me parece un control bastante complicado, mira un poco los controles DataGrid o el MsHFlexGrid que los puedes enlazar directamente a un recordset (a mi me parecen más sencillos de manejar)
Ya se que es mas facil con datagrid , he estado viendo muchos ejemplos googleando, con datagrid, pero me han mandado que lo haga con msflexfrid.

Voy a probar tu manera a ver si me va

Gracias

edito:
Código vb:
Ver original
  1. 'Borrar el registro
  2. msflexgrid1.clear
  3. 'Añadimos
  4. While Not rsTbl_Direccion.EOF  
  5. MSFlexGrid1.AddItem rsTbl_Direccion("id") & vbTab & rsTbl_Direccion("nombre") & vbTab & rsTbl_Direccion("apellidos") & vbTab & rsTbl_Direccion("direccion") & vbTab & rsTbl_Direccion("ciudad") & vbTab & rsTbl_Direccion("provincia") & vbTab & rsTbl_Direccion("telefono") & vbTab & rsTbl_Direccion("cp")    
  6. rsTbl_Direccion.MoveNext
  7. Wend
  8. 'Refrescamos
  9. msflexgrid1.refresh
No me va, lo unico que hace es eliminar los datos que tengo en las celdas
Salu2

Última edición por Sergio18; 19/04/2010 a las 09:32
  #12 (permalink)  
Antiguo 19/04/2010, 09:33
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: 2 dudas que tengo

Yo tengo puesto esto pero no hace nada, aver si tu sabes el porque:

Código vb:
Ver original
  1. Set cnPrueba = New ADODB.Connection
  2. cnPrueba.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\prueba.mdb;Persist Security Info=False"
  3. cnPrueba.Open
  4. cnPrueba.Execute "update tbl_direccion set Nombre = Nombre, Apellidos = Apellidos, Ciudad = Ciudad, Provincia = Provincia, Telefono = Telefono, CP = CP  WHERE id = " & MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 0)
  5. cnPrueba.Close
  6. Set cnPrueba = Nothing
  7. 'Se actualiza el registro del msflexgrid
  8. MSFlexGrid1.Refresh
  #13 (permalink)  
Antiguo 19/04/2010, 10:11
 
Fecha de Ingreso: noviembre-2005
Mensajes: 751
Antigüedad: 18 años, 6 meses
Puntos: 13
Respuesta: 2 dudas que tengo

Hola

Al utilizar clear te elimina todo lo que tienes, luego tienes que volver a llenarlo de la misma forma que has echo la 1ª vez, dependiendo de donde hayas declarado la conexión a la bd y el recordset, puede que tengas que volver a crear el recordset con toda la select y llenar todo (tienes todo el código en el enlace que tu mismo me has enviado, repite el código utilizado para llenar)

--Saludos--
  #14 (permalink)  
Antiguo 19/04/2010, 14:01
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: 2 dudas que tengo

En cierto modo si que va porque le doy a actualizar y se pone el registro pero se me borran los demas dejando las celdas vacias.Le vuelvo a dar y me aparecen todos los datos pero me empieza a añadir celdas vacias cada vez que le doy. Lo he puesto asi:

Código vb:
Ver original
  1. Private Sub Command3_Click()
  2. 'Borrar el registro
  3. MSFlexGrid1.Clear
  4. While Not rsTbl_Direccion.EOF
  5. MSFlexGrid1.AddItem rsTbl_Direccion("id") & vbTab & rsTbl_Direccion("nombre") & vbTab & rsTbl_Direccion("apellidos") & vbTab & rsTbl_Direccion("direccion") & vbTab & rsTbl_Direccion("ciudad") & vbTab & rsTbl_Direccion("provincia") & vbTab & rsTbl_Direccion("telefono") & vbTab & rsTbl_Direccion("cp")
  6. rsTbl_Direccion.MoveNext
  7. Wend
  8. 'Refrescamos
  9. MSFlexGrid1.Refresh
  10. Set cnPrueba = New Connection
  11. 'Establecer sus propiedades
  12.     With cnPrueba
  13.         .Provider = "Microsoft.Jet.oledb.4.0"
  14.         .ConnectionString = "prueba.mdb"
  15.     End With
  16. cnPrueba.Open
  17. 'Crear un conjunto de registros desde la tabla Tbl_Direccion
  18. Set rsTbl_Direccion = New Recordset
  19. 'Establecer sus propiedades
  20. With rsTbl_Direccion
  21.     .CursorLocation = adUseClient
  22.     .Open "SELECT * FROM tbl_direccion", cnPrueba, adOpenDynamic, adLockOptimistic
  23. End With
  24.  
  25. End Sub

Saludos
  #15 (permalink)  
Antiguo 20/04/2010, 01:50
 
Fecha de Ingreso: noviembre-2005
Mensajes: 751
Antigüedad: 18 años, 6 meses
Puntos: 13
Respuesta: 2 dudas que tengo

Hola

Me parece que no tienes muy claros algunos conceptos, en la linea 4-6 estas intentando llenar el msflexgrid antes de abrir la conexión a la bd y antes de crear el recordset y a eso no le veo sentido. Intenta comprender el concepto.

Para realizar algo con una bd primero tienes que crear una conexión con ella, que será diferente según el metodo utilizado y según la bd (access, sql server,...). Eso lo estas haciendo en las lineas 10-16

Una vez que tienes la conexión, puedes realizar acciones con la bd (Select, insert, delete), para guardar los datos obtenidos de una select te hace falta un recorset que eso lo tienes en las lineas 18-26.

Una vez que tienes los datos en el recordset es cuando puedes pasarlo a un control grid (msflexgrid, datagrid,...) o a unos textos o lo que quieras.

Resumiendo (y si he comprendido bien el código), las lineas 3-9 tienen que ir al final, es decir, despues de la linea 23.

Puede que este confundido, pero te recomiendo que intesten entender el significado de lo que estas haciendo en cada parte del código, para poder aplicarlo luego de distinta forma.

Si me he equivocado presuponiendo que no tienes claros algunos conceptos perdoname, pero es la impresión que me ha dado.

--Saludos--
  #16 (permalink)  
Antiguo 20/04/2010, 01:56
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: 2 dudas que tengo

No pasa nada, pero claros los tenia lo que pasa es que lo hice a prisa sin pensar, y ahora lo acabo de terminar.

Código vb:
Ver original
  1. Private Sub Command1_Click()
  2. 'Todos los campos que tenemos tienen que estar rellenos
  3. If Text1 = "" Or Text2 = "" Or Text3 = "" Or Text4 = "" Or Text5 = "" Or Text6 = "" Or Combo1 = "" Then
  4. MsgBox "Debe ingresar datos en todos los campos", vbCritical, Me.Caption
  5. Exit Sub
  6. End If
  7. 'crear un objeto conexion
  8. Set cnPrueba = New Connection
  9. 'Establecer sus propiedades
  10.     With cnPrueba
  11.         .Provider = "Microsoft.Jet.oledb.4.0"
  12.         .ConnectionString = "prueba.mdb"
  13.     End With
  14. cnPrueba.Open
  15. 'Crear un conjunto de registros desde la tabla Tbl_Direccion
  16. Set rsTbl_Direccion = New Recordset
  17. 'Establecer sus propiedades
  18. With rsTbl_Direccion
  19.     .CursorLocation = adUseClient
  20.     .Open "SELECT * FROM tbl_direccion", cnPrueba, adOpenDynamic, adLockOptimistic
  21. End With
  22. 'Añadimos los registros del formulario a la base de datos
  23. With rsTbl_Direccion
  24. .AddNew
  25. .Fields("Nombre") = Text1.Text
  26. .Fields("Apellidos") = Text4.Text
  27. .Fields("Direccion") = Text5.Text
  28. .Fields("Ciudad") = Combo1.Text
  29. .Fields("Provincia") = Combo2.Text
  30. .Fields("Telefono") = Text2.Text
  31. .Fields("CP") = Text6.Text
  32. .Update
  33. End With
  34. MsgBox ("Datos exportados")
  35. With rsTbl_Direccion
  36. MSFlexGrid1.Refresh
  37. Text1.Text = ""
  38. Text2.Text = ""
  39. Combo1.Text = ""
  40. Combo2.Text = ""
  41. Text4.Text = ""
  42. Text5.Text = ""
  43. Text6.Text = ""
  44. .Update
  45. End With
  46. While Not rsTbl_Direccion.EOF
  47. MSFlexGrid1.AddItem rsTbl_Direccion("id") & vbTab & rsTbl_Direccion("nombre") & vbTab & rsTbl_Direccion("apellidos") & vbTab & rsTbl_Direccion("direccion") & vbTab & rsTbl_Direccion("ciudad") & vbTab & rsTbl_Direccion("provincia") & vbTab & rsTbl_Direccion("telefono") & vbTab & rsTbl_Direccion("cp")
  48. rsTbl_Direccion.MoveNext
  49. Wend
  50.     'Insertamos la cabezera
  51.    MSFlexGrid1.TextMatrix(0, 0) = "ID"
  52.     MSFlexGrid1.TextMatrix(0, 1) = "Nombre"
  53.     MSFlexGrid1.TextMatrix(0, 2) = "Apellidos"
  54.     MSFlexGrid1.TextMatrix(0, 3) = "Direccion"
  55.     MSFlexGrid1.TextMatrix(0, 4) = "Ciudad"
  56.     MSFlexGrid1.TextMatrix(0, 5) = "Provincia"
  57.     MSFlexGrid1.TextMatrix(0, 6) = "Telefono"
  58.     MSFlexGrid1.TextMatrix(0, 7) = "CP"
  59.     Screen.MousePointer = vbDefault
  60. Set cnPrueba = New Connection
  61. 'Establecer sus propiedades
  62.     With cnPrueba
  63.         .Provider = "Microsoft.Jet.oledb.4.0"
  64.         .ConnectionString = "prueba.mdb"
  65.     End With
  66. cnPrueba.Open
  67. 'Crear un conjunto de registros desde la tabla Tbl_Direccion
  68. Set rsTbl_Direccion = New Recordset
  69. 'Establecer sus propiedades
  70. With rsTbl_Direccion
  71.     .CursorLocation = adUseClient
  72.     .Open "SELECT * FROM tbl_direccion", cnPrueba, adOpenDynamic, adLockOptimistic
  73. End With
  74. End Sub

Cita:
Resumen de codigo: Lo que hace este codigo es al llenar un formulario, este lo exporta a la base de datos de acces y actualiza el msflexgrid en modo ejecucion sin tener que entrar y salir.
Muchas Gracias Insomnia me has sido de mucha no te puedes imaginar lo desesperado que estaba con esto.

Saludos
  #17 (permalink)  
Antiguo 20/04/2010, 02:03
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: 2 dudas que tengo

Por cierto ya si no es mucha molestia, me gustaria que me dijeras como hacer que al dar en la tecla TAB vaya directamente a siguiente cuadro de texto, es que por ejemplo yo estoy en nombre,y al darle al TAB de mede irse a apellido se va al boton de exportar,y de hay se va a otro...etc, como podria hacer que de nombre me pase a apellidos, de hay a direccion etc...

Saludos
  #18 (permalink)  
Antiguo 20/04/2010, 02:09
 
Fecha de Ingreso: noviembre-2005
Mensajes: 751
Antigüedad: 18 años, 6 meses
Puntos: 13
Respuesta: 2 dudas que tengo

Hola

Me alegro de que solucionaras el código. La pregunta del Tab es más sencilla. En todos los controles, tienes dos propiedades para definir el orden de moverse con el Tab.

1.- TabStop: Con los valores True o False defines si quieres que al pulsar Tab pase o no por este control
2.- Tab Index: El orden en el que va a pasar por este control

De esta forma si quieres que el primer control en obtener el foco sea el nombre tienes que poner TabIndex 1, en el apellido TabIndex 2 y así el orden de los controles que quieras.

--Saludos--
  #19 (permalink)  
Antiguo 20/04/2010, 02:25
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: 2 dudas que tengo

Ok ya esta echo, Gracias otra vez

Código vb:
Ver original
  1. Text1.TabIndex = 1
  2. Text4.TabIndex = 2
  3. Text5.TabIndex = 3
  4. Combo1.TabIndex = 4
  5. Combo2.TabIndex = 5
  6. Text2.TabIndex = 6
  7. Text6.TabIndex = 7

Saludos

Etiquetas: Ninguno
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 02:47.