Visual Basic - SENTENCIA SQL SUM () WHERE... que no funciona

Life is soft - evento anual de software empresarial
   
Vista:

SENTENCIA SQL SUM () WHERE... que no funciona

Publicado por Alberto (76 intervenciones) el 30/12/2017 16:37:48
A ver si alguien me consigue sacar del atasco. En el código siguiente se me da como resultado de la suma NULL, cuanto todos los campos de la columna 'importe' en la tabla remesas están bien están debidamente llenos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0.;Data source=C:\users\Alberto Moreno Gil\Documents\Lending.mdb"
Cn.Open
Rs.Open "SELECT COUNT(0)AS 'cuantosinv' FROM inversores", Cn, adOpenStatic, adLockPessimistic
cuantosinvx = Rs(0)
    MsgBox cuantosinvx, 16, "Nº inversores" ' cuantosinvx es la variable que indica el nº de inversores. Ciclo exterior.
Rs.Close
Rs.Open "SELECT COUNT(0)AS 'cuantasplat' FROM plataforma", Cn, adOpenStatic, adLockPessimistic
cuantasplatx = Rs(0)
    MsgBox cuantasplatx, 16, "Nº plataformas" ' cuantasplatx es la v. que indica el nº de plataformas. Ciclo interno
Rs.Close
'+++++++++++++++++++++
'CICLO EXTERIOR (DE LOS INVERSORES)(principio)
tfin = 0
Rs.Open "SELECT * FROM inversores ORDER BY inversor", Cn, adOpenStatic, adLockPessimistic
Rs.MoveFirst
Do While tfin < cuantosinvx
    inversorx = Rs.Fields.Item(1)
    'CICLO INTERIOR (principio)
    Rs1.Open "SELECT SUM(importe) AS 'granremesa' FROM remesas WHERE INVERSOR = ' " & inversorx & " ' ", Cn, adOpenStatic, adLockOptimistic
    remesatot = Rs1(0)
    MsgBox remesatot, 16, "Importe remesas"

En Rs1(0) me da como resultado de la suma NULL y a partir de ahí todo ya está mal. "inversorx" que es la condición está bien tanto en la línea de código como en una MsgBox que puse después de la sentencia SQL SUM()
En cuanto a las comillas y comas de inversorx en la expresión SQL creo que están bien. Me he dado varias vueltas por la red intentando aclararlo, pero nada. 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

SENTENCIA SQL SUM () WHERE... que no funciona

Publicado por Alberto (76 intervenciones) el 30/12/2017 17:11:57
Recibo el mensaje: "Error 94: Uso no válido de NULL"
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

SENTENCIA SQL SUM () WHERE... que no funciona

Publicado por Nicolas (1 intervención) el 30/12/2017 17:34:21
Hola Alberto.
Probaste generar la consulta directamente sobre la BBDD??
No se que SGBD estás utilizando pero por ejemplo podrías probar la consulta: "SELECT SUM(importe) AS granremesa FROM remesas WHERE INVERSOR = 102"

De todas formas puedes tambien probar agrupando para que pueda sumar.
Ejemplo: SELECT SUM(importe) AS granremesa FROM remesas WHERE INVERSOR = 102 GROUP BY INVERSOR;

Espero que te sea de ayuda.
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

SENTENCIA SQL SUM () WHERE... que no funciona

Publicado por Juan Gilberto (315 intervenciones) el 31/12/2017 18:18:09
Veo 1 espacio antes y despues de inversorx y las comillas simples... no se si eso le afecta al query
1
= ' " & inversorx & " ' ",
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

SENTENCIA SQL SUM () WHERE... que no funciona

Publicado por Alberto (76 intervenciones) el 01/01/2018 10:55:12
Feliz año Nuevo.
Gracias por vuestras respuestas. Por si aclara algo más el problema aquí copio el resultado de las distintas pruebas que he hecho.

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
' SELECT SUM() CON CONDICIÓN inversor = 'AMG'
Rs1.Open "SELECT SUM(importe) FROM remesas WHERE inversor = 'AMG' ", Cn, adOpenStatic, adLockOptimistic
totalrem = Rs1(0)
MsgBox totalrem, 16, "Suma de las remesas de AMG"
'Valor devuelto en totalrem 19216. OK
Rs1.Close
 
 'SELECT SUM() CON CONDICION inversor = inversorx
Rs.Open "SELECT * FROM inversores ORDER BY inversor", Cn, adOpenStatic, adLockOptimistic
Rs.MoveFirst
inversorx = Rs(1)
MsgBox inversorx, 16, "Inversor 1º"  'Me devuelve en inversorx = "AMG"
Rs.Close
Rs1.Open "SELECT SUM(importe) FROM remesas WHERE inversor =inversorx", Cn, adOpenStatic, adLockOptimistic
totalrem1 = Rs1(0)                 'Valor devuelto en totalrem1 = Vacio
MsgBox totalrem1, 16, "Suma de las remesas de inversorx 1"
'Mensaje de error: No se han especificado valores para algunos de los parámetros requeridos
Rs1.Close
'+++++
 
SELECT SUM() con  condición inversor = 'inversorx'
Rs.Open "SELECT * FROM inversores ORDER BY inversor", Cn, adOpenStatic, adLockOptimistic
Rs.MoveFirst
inversorx = Rs(1)
MsgBox inversorx, 16, "Inversor 1º"  'Me devuelve en inversorx = "AMG"
Rs1.Open "SELECT SUM(importe) FROM remesas WHERE inversor = 'inversorx'", Cn, adOpenStatic, adLockOptimistic
totalrem2 = Rs1(0)   'Valor devuelto en totalrem2 = Nulo; Rs1(0) = Nulo
MsgBox totalrem2, 16, "Suma de las remesas de 'inversorx' "
'Mensaje de error: 'Uso no válido de NULL
Rs1.Close
 
'SELECT SUM() CON CONDICIÓN INVERSOR = ' " & inversorx & " '
 
Rs.Open "SELECT * FROM inversores ORDER BY inversor", Cn, adOpenStatic, adLockOptimistic
Rs.MoveFirst
inversorx = Rs(1)
MsgBox inversorx, 16, "Inversor 1º"  'Me devuelve en inversorx = "AMG"
Rs1.Open "SELECT SUM(importe) FROM remesas WHERE inversor = ' " & inversorx & " ' ", Cn, adOpenStatic, adLockOptimistic
 
totalrem3 = Rs1(0)                 'Valor devuelto en totalrem3 = Nulo, ; en Rs21(0) = Nulo
        STOP
MsgBox totalrem3, 16, "Suma de las remesas de inversorx 3"
'Mensaje de error: en tiempo de ejecución. Uso no válido de Null
Rs1.Close

Muchas gracias y hasta luego, Alberto.
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

SENTENCIA SQL SUM () WHERE... que no funciona

Publicado por Alberto (76 intervenciones) el 03/01/2018 07:28:19
Gracias por vuestras respuestas, pero no me funcionaban. Buscando en una página de Microsoft dedicada a comas, comillas y cometas he visto este procedimiento que dice es semejante a los que proponéis pero que sí me ha funcionado. Es éste:

1
2
3
4
5
6
7
8
9
10
11
Rs.Open "SELECT * FROM inversores ORDER BY inversor", Cn, adOpenStatic, adLockOptimistic
Rs.MoveFirst
inversorx = Rs(1)
MsgBox inversorx, 16, "Inversor 1º"  'Me devuelve en inversorx = "AMG" ' Bien, aunque esto no era el problema.
 
Rs1.Open "SELECT SUM(importe)  FROM remesas WHERE inversor = """ & inversorx & """", Cn, adOpenStatic, adLockOptimistic
totalrem3 = Rs1(0)
MsgBox totalrem3, 16, "Suma de las remesas de inversorx "  'FUNCIONA. Ha reconocido la variable, cosa que no hacía antes.
 
Rs1.Close
Rs.Close
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
Revisar política de publicidad