Visual Basic - Error:"La operación en varios pasos generó errores. Compruebe los valores de estado"

Life is soft - evento anual de software empresarial
 
Vista:
Imágen de perfil de Miguel
Val: 3
Ha aumentado su posición en 65 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Error:"La operación en varios pasos generó errores. Compruebe los valores de estado"

Publicado por Miguel (2 intervenciones) el 06/07/2017 17:34:01
Muy buenas, escribo después de mucho tiempo para plantear un gran problema que tengo, esta vez con VB6. Resulta y acontece que, de acuerdo al título, este es el mensaje de error que obtengo tras querer cambiar los datos de una fila de datos previamente obtenidos, y al que previamente se le ejecutan ciertas fórmulas. No puedo resumirlo porque es un problema complejo, y las ideas que dan en la internet (y sí, ya la googleé) no me han servido, así que lo planteo así:
En una ventana se obtiene los datos del personal, tales como su nombre, apellido, sueldo y cargo, y otros como las deducciones realizadas a dicho sueldo, cuyas fórmulas se ejecutan dentro de la consulta a dicha base de datos. Luego, se busca calcular los días extras y feriados para adicionarlos al valor del sueldo. Los valores, a su vez, se les suman a las deducciones, pero en la ejecución del cambio, sale el error que da nombre al título, y al decir "depurar", llega a justo esa línea del primer valor de deducción que no se deja cambiar, es decir, la variable tiene el valor del campo, y lo que está después del igual tiene otro, con lo cual no me queda claro qué está fallando; por ello recurro a vosotros para saber qué está fallando.
Si necesitan que les pase del código fuente, pues puedo intentarlo; mientras, ver cómo lo resuelvo.
Otras pistas, aunque no sé si sean relevantes: SO: Windows 7, SGBD: Access 2007.
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
Imágen de perfil de Andres Leonardo
Val: 3.117
Oro
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Error:"La operación en varios pasos generó errores. Compruebe los valores de estado"

Publicado por Andres Leonardo (1798 intervenciones) el 06/07/2017 18:31:19
Pon el codigo diria yo para verlo ...
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
Imágen de perfil de Miguel
Val: 3
Ha aumentado su posición en 65 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Error:"La operación en varios pasos generó errores. Compruebe los valores de estado"

Publicado por Miguel (2 intervenciones) el 06/07/2017 20:52:24
Pues el código es bien largo, pero pasaré las partes que son las que causa problemas: Primero, el formulario problema:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Private Sub imgGuardar_Click()
Dim a As Integer
Dim b As String
Dim d As String
Dim c As String
Dim SSO As Double
Dim LRPE As Double
Dim FAOV As Double
Dim Total As Double
 
 tb_pers_grilla.Clone
 
a = Fix(((((Val(txt_sueldo.Text) + Val(txt_horas_total.Text) + Val(txt_dia.Text) * 12) / 52) * 4) / 100) * txt_lunes.Text)
b = Fix((((((Val(txt_sueldo.Text) + Val(txt_horas_total.Text) + Val(txt_dia.Text)) * 12) / 52) * 0.05) / 100) * txt_lunes.Text)
c = Fix((((((Val(txt_sueldo.Text) + Val(txt_horas_total.Text) + Val(txt_dia.Text)) * 595) / 360) * 1) / 100))
d = Fix((((((Val(txt_sueldo.Text) + Val(txt_horas_total.Text) + Val(txt_dia.Text)) - Fix((((((Val(txt_sueldo.Text) + Val(txt_horas_total.Text) + Val(txt_dia.Text)) * 12) / 52) * 4) / 100) * txt_lunes.Text)) - Fix((((((Val(txt_sueldo.Text) + Val(txt_horas_total.Text) + Val(txt_dia.Text)) * 12) / 52) * 0.05) / 100) * txt_lunes.Text)) - Fix((((((Val(txt_sueldo.Text) + Val(txt_horas_total.Text) + Val(txt_dia.Text)) * 595) / 360) * 1) / 100)))))
 'tb_pers_grilla(6) = txt_horas_total
 'tb_pers_grilla(7) = txt_dia
 '.Open "select
 'tb_personal.cod_per as Codigo, tb_pers_grilla(0)
 'tb_personal.cedula as Cedula , tb_pers_grilla(1)
 'tb_personal.apellido as Apellido, tb_pers_grilla(2)
 'tb_personal.nombre as Nombre, tb_pers_grilla(3)
 'tb_personal.gerencia as Gerencia, tb_pers_grilla(4)
 '(tb_personal.sue_per/2) as Sueldo, tb_pers_grilla(5)
 'insidencias.horas_ex as Horas, tb_pers_grilla(6)
 'insidencias.feriados as Feriado, tb_pers_grilla(7)
 'fix(((((((tb_personal.sue_per*12)/52)*0.4)/100)*'" + txt_lunes.Text + "')/2)) as SSO, tb_pers_grilla(8)
 'fix(((((((tb_personal.sue_per*12)/52)*0.05)/100)*'" + txt_lunes.Text + "')/2)) as LRPE, tb_pers_grilla(9)
 'fix((((((tb_personal.sue_per*595)/360)*1)/100)/2))  as FAOV, tb_pers_grilla(10)
 '(Sueldo+Horas+Feriado-SSO-LRPE-FAOV) as Total tb_pers_grilla(11)
 'from tb_personal,insidencias
 'where tb_personal.tipo_personal = '" + txt_nomina.Text + "' and insidencias.id = 1",
 'Base, adOpenStatic, adLockOptimistic
 tb_pers_grilla(2) = a
 tb_pers_grilla(3) = "B"
 tb_pers_grilla(4) = "C"
 tb_pers_grilla(5) = "D"
 tb_pers_grilla(6) = "E"
 tb_pers_grilla(7) = "F"
 'tb_pers_grilla(9) = b
 'tb_pers_grilla(10) = c
 'tb_pers_grilla(11) = d
 
 
 Set frm_edit_persomal = Nothing
' DataGrid1.Refresh
 Unload Me
 
 
End Sub

Y acá el otro formulario que trae los datos previamente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Sub tb_personal_grilla()
Dim SSO As Double
Dim a As String
Dim Total As Long
Dim total1 As Long
a = txt_lunes.Text
With tb_pers_grilla
If .State = 1 Then .Close
.Open "select tb_personal.cod_per as Codigo,(tb_personal.sue_per/2) as Sueldo,insidencias.horas_ex as Horas,insidencias.feriados as Feriado,fix(((((((tb_personal.sue_per*12)/52)*0.4)/100)*'" + txt_lunes.Text + "')/2)) as SSO, fix(((((((tb_personal.sue_per*12)/52)*0.05)/100)*'" + txt_lunes.Text + "')/2)) as LRPE,fix((((((tb_personal.sue_per*595)/360)*1)/100)/2)) as FAOV,(Sueldo+Horas+Feriado-SSO-LRPE-FAOV) as Total from tb_personal,insidencias where tb_personal.tipo_personal = '" + txt_nomina.Text + "' and insidencias.id = 1", Base, adOpenStatic, adLockOptimistic
'tb_personal
'.Open "select tb_personal.cod_per as Codigo,tb_personal.cedula as Cedula ,tb_personal.apellido as Apellido,tb_personal.nombre as Nombre,tb_personal.gerencia as Gerencia,(tb_personal.sue_per/2) as Sueldo,insidencias.horas_ex as Horas,insidencias.feriados as Feriado,fix(((((((tb_personal.sue_per*12)/52)*0.4)/100)*'" + txt_lunes.Text + "')/2)) as SSO,fix(((((((tb_personal.sue_per*12)/52)*0.05)/100)*'" + txt_lunes.Text + "')/2)) as LRPE,fix((((((tb_personal.sue_per*595)/360)*1)/100)/2)) as FAOV,(Sueldo+Horas+Feriado-SSO-LRPE-FAOV) as Total from tb_personal,insidencias where tb_personal.tipo_personal = '" + txt_nomina.Text + "' and insidencias.id = 1", Base, adOpenStatic, adLockOptimistic
 
 Do While Not .EOF
      Total = Total + !Total
        total1 = total1 + 1
      .MoveNext
      lblcantidad.Caption = "Cantidad de empelados: " & total1
       lbtotal.Caption = "Total a pagar: " & Total
      Loop
End With
End Sub

P.D.: Cuando le indique a quien está haciendo este <code> que escribió mal insidencias me reiré de la cara de vergüenza que ponga
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
Imágen de perfil de Antoni Masana
Val: 1.259
Plata
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Error:"La operación en varios pasos generó errores. Compruebe los valores de estado"

Publicado por Antoni Masana (558 intervenciones) el 07/07/2017 08:03:52
No sé dónde está el error, no tengo ni idea.

Lo que si veo son líneas excesivamente largas con demasiados paréntesis y no sé hasta qué punto el proceso sabe resolver estas líneas de código.

Por ejemplo esta:

d = Fix((((((Val(txt_sueldo.Text) + Val(txt_horas_total.Text) + Val(txt_dia.Text)) - Fix((((((Val(txt_sueldo.Text) + Val(txt_horas_total.Text) + Val(txt_dia.Text)) * 12) / 52) * 4) / 100) * txt_lunes.Text)) - Fix((((((Val(txt_sueldo.Text) + Val(txt_horas_total.Text) + Val(txt_dia.Text)) * 12) / 52) * 0.05) / 100) * txt_lunes.Text)) - Fix((((((Val(txt_sueldo.Text) + Val(txt_horas_total.Text) + Val(txt_dia.Text)) * 595) / 360) * 1) / 100)))))

o está otra:

.Open "select tb_personal.cod_per as Codigo,(tb_personal.sue_per/2) as Sueldo,insidencias.horas_ex as Horas,insidencias.feriados as Feriado,fix(((((((tb_personal.sue_per*12)/52)*0.4)/100)*'" + txt_lunes.Text + "')/2)) as SSO, fix(((((((tb_personal.sue_per*12)/52)*0.05)/100)*'" + txt_lunes.Text + "')/2)) as LRPE,fix((((((tb_personal.sue_per*595)/360)*1)/100)/2)) as FAOV,(Sueldo+Horas+Feriado-SSO-LRPE-FAOV) as Total from tb_personal,insidencias where tb_personal.tipo_personal = '" + txt_nomina.Text + "' and insidencias.id = 1", Base, adOpenStatic, adLockOptimistic

Te aconsejo que los desgranes paso a paso o mejor dicho calculo a calculo, se leerá mejor y quizas arregles el error.
Te puedo asegurar que si aparcas el proyecto 6 meses, cuando lo retomes lamentadas haber escrito estas lineas tan largas si las tienes que modificar:

Te pongo un ejemplo simple:

1
2
3
4
5
6
7
8
9
10
11
a = Fix(((((Val(txt_sueldo.Text) + Val(txt_horas_total.Text) + Val(txt_dia.Text) * 12) / 52) * 4) / 100) * txt_lunes.Text)
 
-------------
 
Sueldo = Val(txt_sueldo.Text)
Horas  = Val(txt_horas_total.Text)
Dia    = Val(txt_Dia.Text) * 12
 
Suma = Sueldo + Horas + Dia
 
a = fix( (Suma * 4 * txt_lunes.Text) / (52 * 100) )

Primero esta tu línea y después como lo haría yo, además de poner comentarios de que estoy calculando..

Saludos.
\\//_
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