Ayuda con do while y mshflexgrid

Hola migos .. Pues resulta que en un post anterior solicitaba ayuda de como guardar datos de un mshflex a una base de datos sql.. Pues investigando y estudiando ya pude
solo que ahora tengo un problema.. Que al guardar los datos también me guarda lo que tiene la ultima fila del grid, que en mi caso no tiene nada son vacías las celdas
este es mi código para guardar al dar cleck al botom
rs.Open "select *from empleados ", cnn, adOpenDynamic, adLockOptimistic
With Grid1
For j = 1 To Grid1.Rows - 1
rs.AddNew
For i = 1 To Grid1.Cols - 1
If Not IsNull(Grid1.TextMatrix(j, i)) Then
rs(i - 1) = Grid1.TextMatrix(j, i)
End If
Next i
rs.Update
Next j
End With
En que momento le pongo para que la ultima fila no me la guarde.. Osea que si son vacías la fila o celdas no guarde nada.. No haga el update...
este es m,i codigo donde inserto datos al grid desde unos textbox
Private Sub CmdAgregar_Click()
With Grid1
.TextMatrix(.Row, 1) = Text1
.TextMatrix(.Row, 2) = Text2
.TextMatrix(.Row, 3) = Text3
.TextMatrix(.Row, 4) = Text4
If .Row + 1 >= .Rows Then
.AddItem ""
End If
.Row = .Row + 1
'Suponemos que al menos se pueden mostrar 5 filas
If .Row > 5 Then
.TopRow = .Row - 5
End If
End With
End Sub
Cuando le doy al botón me pasa los datos de los text a el grid pero también me
agrega una fila...
Me pueden ayudar

2 respuestas

Respuesta
1
De los campos que tiene la grilla 1 debe ser clave primaria, o así espero que sea sino revisa la base de datos haber como esta normalizada.
Pero ¿por qué desde los text box no los grabas directamente a la base de datos y la grilla solo la usas para mostrar los datos?
Prefiero darte esta solución que andar emparchando algo de código.
Seria al botón agregar los mandas directamente a la base con el addnew.
De esa manera evitas la recorrida, ya ganas tiempo vital.
Después podes hacer un control mostrar, o sino una función o procedimiento que se llame llenar_grilla y ahí pones
la consulta de la base de datos con recordset (rs)
Nombregrilla. Clear (borras todo lo de la grilla)
set nombregrilla.datasource = rs 'pasas los datos a la grilla
y listo
como quedaria a grandes rasgos el codigo seria asi
boton agregar
rs.addnew
campos textbox
rs.update
rs.close
llamada a procedimiento para llenar_grilla
y cada vez que das un alta te llena la grilla, y poniendo el llenado en un procedimiento
entras en el form y llenas la grilla, das un alta y llenas, das de baja y llenas
bueno, espero que te haya servido.
Por favor, de no servirte esta forma de trabajar, contestame la pregunta planteándome devuelta tu problema
gracias
leandro
Esta bien tu sugerencia, pero lo que quiero es que el usuario el final de capturar los datos desde los textbox al final del grid en unos label le tengo puesto cuanto registros capturo y una suma de una columna donde indica la cantidad capturada en este caso metros . porque captura entrada de rollos de tela..
Por eso no lo guardo directamente desde los textbox... es como para que revise si algo estuvo mal.. bueno.. así me lo pidió mi jefe... podría ser la posibilidad de tu sugerencia.. pero en este caso.. si realizo una captura mal, como se haría.. ¿eliminar desde el grid?
¿Me podrías ayudar con tus consejos?
Disculpa pero tu jefe no tiene en cuenta que si cargas 200 y no lo grabaste y pasa algo perdiste todos los datos que la persona cargo y tiene que empezar devuelta.
De mi manera, y te lo digo por experiencia, es genial porque se actualiza solo
y para solucionar lo de los label, si lo ingresas con fecha del día, hace un count a la base y ahí tienes la cantidad de registros que cargo en el día, y la cantidad de metros en vez de count un sum.
Para eliminar o modificar se hace así. Voy a ejemplificar todo trada de seguirme ¿ok?
Bueno vos tienes 3 textbox = text1, text2 y text3
después tienes la grilla con 3 columnas = col1, col2, col3, o podes tener más pero esos 3 campos si o si van a estar en la grilla.
Vos quieres modificar 1 registro que esta en la grilla, bueno lo que tienes que hacer es un click en ese registro.
y en el evento click de la grilla programas asi
text1=grilla.textmatrix(grilla.rowsel,1), (fila seleccionada,numero de columna)
text2=grilla.textmatrix(grilla.rowsel,2)
text3=grilla.textmatrix(grilla.rowsel,3)
Una vez que están los datos en los textbox, ahí tienes que tener los botones ALTA, BAJA Y MODIFICACIONES Y LISTO
CADA UNO DE LOS BOTONES CUANDO TERMINA DE HACER SUS ACCIONES TIENE QUE TENER UN LLAMADO AL PROCEDIMIENTO LLENAR_GRILLA ASÍ REFRESCA
CUALQUIER DUDA ME AVISAS
SALUDOS
LEANDRO
Ok... esa observación es muy buena.. le estoy comentando ami jefe en este momento estamos en mexico y son las 08:21 am. ok... al parecer igual le pareció muy buena esta
manera como tu lo indicas..
Ahora otra duda, para terminar este post, como puedo hacer que el grid tenga apariencia de dos colores... osea una linea azul y la otra blanca, linea azul, linea blanca.. etc...
si, se puede hacer dejame ver el codigo, te lo paso tal cual lo tengo programado porque sino es un caos
trato de explicarte el codigo, lo principal es ubicarse bien la fila que queremos pintar
esa es .row = .rows-1 o puede ser -2 o +2 depende de lo que quieras hacer
with grilla
For c = 0 To 10
                     .Col = c
                     .Row = .Rows -1
                     .ColSel = .Col
                    .RowSel = .Row
                    .CellBackColor = QBColor(1)
                  Next c
end with
Creo que ese es el color azul
Respuesta
1
A mi modo de ver, solo debes hacer el .AddItem cuando realmente haya datos y se vaya a grabar no en el momento que quieres abrir los datos para escribir un registro, ¿qué pasa si hay que cancelar esta acción se puede? Si se cancela de todas formas quedaría agregado un registro en blanco que es tu problema en este momento.
Deberías mover el AddItem el veento del botón garbar datos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas