Visual Basic - Un guru del flexgrid...

Life is soft - evento anual de software empresarial
 
Vista:

Un guru del flexgrid...

Publicado por Omar (56 intervenciones) el 22/11/2008 00:50:21
Que tal foro, quiero actualizar solo el registro que le indico (obvio) y me actualiza todo. Alguien me puede decir donde esta el error ?

Este es mi codigo:

Function ModificarStatusFactura()
Dim F As Integer
For F = 1 To MSFlexGrid.Rows - 1
Descrip = Trim(MSFlexGrid.TextMatrix(F, 2))

AbrirDAO
Cadena = "SELECT FechaPago,StatusFact,iDMovimientoFact FROM Facturas WHERE NoFact='" & Descrip & "'"
Set Dr = BaseDatos.OpenRecordset(Cadena)

Do While Not Dr.EOF
Dr.Edit
Dr!FechaPago = Format(TXTFECHA.Text, "mm/dd/yyyy")
Dr!StatusFact = Trim(MSFlexGrid.TextMatrix(F, 7))
Dr!iDMovimientoFact = iDMov
Dr.Update
Dr.MoveNext
Loop
CerrarDAO
Next F
End Function

En la columna 2 del grid tengo el campo NoFact. Si por ejemplo tengo la factura 1, 2 y 3 y solo quiero modificar los datos de la dos como le hago, asi de esta manera me modifica todo.

De antemano, gracias...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Un guru del flexgrid...

Publicado por Denis (24 intervenciones) el 24/11/2008 17:15:41
Tu problema es el FOR pues le estas diciendo que recorra todo el grid.

Podrías hacer dentro del evento click del MSFLEXGRID lo siguiente:

Private Sub MSFlexGrid1_Click()
Dim a, b As Long

a = Val(MSFlexGrid1.Col)
b = Val(MSFlexGrid1.Row)

c = MSFlexGrid1.TextMatrix(b, a)

AbrirDAO
Cadena = "SELECT FechaPago,StatusFact,iDMovimientoFact FROM Facturas WHERE NoFact='" & c & "'"
Set Dr = BaseDatos.OpenRecordset(Cadena)

Do While Not Dr.EOF
Dr.Edit
Dr!FechaPago = Format(TXTFECHA.Text, "mm/dd/yyyy")
Dr!StatusFact = Trim(MSFlexGrid.TextMatrix(F, 7))
Dr!iDMovimientoFact = iDMov
Dr.Update
Dr.MoveNext
Loop
CerrarDAO

End Sub

Cómo puedes ver se posiciona exclusivamente en el dato que selecciones
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Un guru del flexgrid...

Publicado por Omar (56 intervenciones) el 24/11/2008 18:11:24
Que tal Denis, primero darte las gracias por responder.

Probablemente no me explique bien, o no se como aplicar lo que me dices.
Tengo un check sobre el grid y al darle click me da la opcion de cambiar el status de la factura, por default me aparecen todas las de "pendiente de cobro", al darle click la cambio a pagada. Quiero recorrer todo el grid porque probablemente me paguen mas de una factura con un solo movimiento, entonces serian varias lineas del grid las que aparecerian como "Pagada".
El problema es que me asigna el idMov (Es la relacion en mi tabla facturas con los movimientos) y la fechapago a todos los registros de mi tabla facturas, y yo solo quiero que me lo asigne a las que en mi flexgrid tenga como Status="Pagada", que es mi columna 7 en el grid.
Necesito barrer todo el grid, y solo donde columna 7 sea ="Pagada" me aplique la modificacion.

De antemano, gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Un guru del flexgrid...

Publicado por Denis (24 intervenciones) el 25/11/2008 10:12:08
Hola Omar

Mira viendo tu código pienso que está bien hecho, creo que el problema es algo similar que me ha pasado a mi anteriormente.

No sé si sea la solución pero pienso que deberías declarar dentro de la función:

Function ModificarStatusFactura()
Dim F As Integer
Dim Dr As New ADODB.Recordset
Cadena=""

For F = 1 To MSFlexGrid.Rows - 1
Descrip = Trim(MSFlexGrid.TextMatrix(F, 2))
Cadena = "SELECT FechaPago,StatusFact,iDMovimientoFact FROM Facturas WHERE NoFact='" & Descrip & "'"
Set Dr = BaseDatos.OpenRecordset(Cadena)

Do While Not Dr.EOF
Dr.Edit
Dr!FechaPago = Format(TXTFECHA.Text, "mm/dd/yyyy")
Dr!StatusFact = Trim(MSFlexGrid.TextMatrix(F, 7))
Dr!iDMovimientoFact = iDMov
Dr.Update
Dr.MoveNext
Loop
Next F
Dr.close
End Function

Como ves agregue 2 líneas nuevas al principio y cerré la base de datos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Un guru del flexgrid...

Publicado por Denis (1 intervención) el 25/11/2008 10:19:24
Ups, perdona pero creo que

cadena="" y Dr.close deben ir dentro del FOR

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Mil gracias Denis

Publicado por O (56 intervenciones) el 29/11/2008 17:14:41
Gracias por tu tiempo y paciencia, lo pongo para quien mas le sirva !!!

Function ActualizarStatusFactura()
Dim I As Integer

For I = 1 To MSFlexGrid.Rows - 1
Cadena = ""
Descrip = Trim(MSFlexGrid.TextMatrix(I, 2))

Cadena = "SELECT FechaPago,StatusFact FROM Facturas WHERE NoFact='" & Descrip & "'"

AbrirDAO
Set Dr = BaseDatos.OpenRecordset(Cadena)
If MSFlexGrid.TextMatrix(I, 7) = "PAGADA" Then
Do While Not Dr.EOF
Dr.Edit
Dr!FechaPago = Format(TXTFECHA.Text, "mm/dd/yyyy")
Dr!StatusFact = MSFlexGrid.TextMatrix(I, 7)
Dr.Update
Dr.MoveNext
Loop
End If
CerrarDAO
Next I
End Function
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar