elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  SQL SUM() AS .. FROM ... WHERE... que no funciona
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: SQL SUM() AS .. FROM ... WHERE... que no funciona  (Leído 3,667 veces)
Baldomero123

Desconectado Desconectado

Mensajes: 18


Ver Perfil
SQL SUM() AS .. FROM ... WHERE... que no funciona
« en: 30 Diciembre 2017, 16:38 pm »

 ver si alguien me consigue sacar del atasco.  En el código siguiente se m da como resultado de la suma NULL, cuanto todos los campos de la columna de la columna 'importe' en la tabla remesas están bien están debidamente llenos:
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.
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.


En línea

Baldomero123

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Re: SQL SUM() AS .. FROM ... WHERE... que no funciona
« Respuesta #1 en: 30 Diciembre 2017, 17:22 pm »

Recibo el mensaje: Error 94 Uso no válido de NULL"


En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.349


Ver Perfil
Re: SQL SUM() AS .. FROM ... WHERE... que no funciona
« Respuesta #2 en: 31 Diciembre 2017, 02:43 am »

El código resulta un poco espagueti, por la vaguedad en los nombres, pero bueno...

Según tú...: ...where inversor = 'inversorx'
Pero ausmo que inversorX es una variable no una cadena de texto literal...

es decir si fuera una cadena de texto literal, hubieras puesto:
 
Código
  1.  ...where inversor = "'inversorx'"
 
Pero si es una variable debe poner:
 
Código
  1.  
  2. ...where inversor = inversorx
Y si el contenido de  inversorx, debe estrar entre comillas simples deberías poner:
Código
  1. inversorX = "'" & inversorX & "'"  ' en alguna parte pondrías esto
  2.  ...
  3. ...where inversor = inversorX   ' par al final hacer esto
  4.  

...en fin apunta el ratón en la palabra inversorx, y con el otro botón del ratón da click, y cuando emerja el menú flotante, selecciona: 'definición' y te llevará a la declaración de la variale, si lo es... (aunque es algo que tu debieras saber (los demás no, porque no vemos declaraciones de variables por ningún lado en tu código escueto).

Corrige las comillas según lo que sea (uno de los 3 casos antedichos).


p.d.: también si encerraras tu código entre etiquetas GeSHi, el coloreado del texto, lo haría más legible...
« Última modificación: 31 Diciembre 2017, 02:46 am por NEBIRE » En línea

Baldomero123

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Re: SQL SUM() AS .. FROM ... WHERE... que no funciona
« Respuesta #3 en: 31 Diciembre 2017, 07:17 am »

Muchísimas gracias por tu respuesta y consejos. Imprimo y estudiaré "most carefully" tu contestación. Tras que mis conocimientos son los que son, a base de darle vueltas y vueltas a esta cuestión ya estaba aprendiendo a decir "carchuto" . Feliz año nuevo.
En línea

Baldomero123

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Re: SQL SUM() AS .. FROM ... WHERE... que no funciona
« Respuesta #4 en: 31 Diciembre 2017, 08:08 am »

Hola, de nuevo. Efectivamente inversorx es una variable. He hecho con el ratón como me has dicho y en Definición me dice "No se reconoce el identificador que está debajo del cursor". Esto en un Recordset, creo que Rs2, pero en la línea inmediatamente anterior de código, en Rs1(1), sí aparece inversorx como reconocido y con un valor. Por si fuera cosa de Public o Private he puesto al principio del módulo: Public inversorx As Var.  Sigue con el mensaje de "no se reconoce...". Seguiremos con la lucha. Gracias y hasta luego.
En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.349


Ver Perfil
Re: SQL SUM() AS .. FROM ... WHERE... que no funciona
« Respuesta #5 en: 31 Diciembre 2017, 16:11 pm »

A ver... yo te puse eso de "te llevará a la declaración de la variale, si lo es... (aunque es algo que tu debieras saber (los demás no, porque no vemos declaraciones de variables por ningún lado en tu código escueto).", e smás una crítica que otra cosa. Por la mala costumbre de no poner las declraciones y que tengamos que jugar a adivinar que tipo es una variable.

Está claro que es  (o debiera ser) un Recordset, para recibir la asignación de la línea:
Código
  1. inversorx = Rs.Fields.Item(1)

No lo declares como Variant si sabes el tipo que va a recibir. Ralentiza mucho las operaciones con Variant y debe usarse exclusivamente cuando un parámetro ha de recibir diferentes tipos... éste no parece ser el caso.

Luego, como te fallan las comillas, venía decirte que si no estás seguro de si lo has hecho correctamente, una forma de saber si por error, lo tratas como un literal, en vez de como variable, es reclamar su "definición", si la variable está declarada, irá a la línea donde aparece declarada, si no lo está o está descrita como un literal, te indiará que 'no se reconoce como un identificador (nombre de variable, función, propiedad, clase, constante, etc...)

...pero ya te dije que corrigieras las comillas como corresponde... y si no tienes claro donde falla exactamente, ejecuta el programa paso a paso, en la función donde esté ese fragemnto de código (pon una línea de pausa (con F9), al comienzo de ese código, y luego ejecuta paso a paso (con F8), mirando tras la ejecución de cada paso, si las variables contienen el valor que cabe esperar... Y si precisas evaluar una expresión, en vez de una variable suelta, selecciona la expresión 'completa' y con el ratón selecciona "inspección rápida" ( ó SHIFT+F9)... así logras llegar fácilmente al punto donde no está como corresponde.

...en fin, tienes que aprender algo sobre depuración del código usando el propio entorno de programación. VB6 es muy completo al caso.
En línea

Baldomero123

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Re: SQL SUM() AS .. FROM ... WHERE... que no funciona
« Respuesta #6 en: 3 Enero 2018, 07:29 am »

Muy buenos días.
Lo intenté sin éxito. Buscando después, en una página de Microsoft  especializada en comas, comillas y cometas encontré estas instrucciones que sí me han solucionado al fin:

 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)
    MsgBox totalrem3, 16, "Suma de las remesas de inversorx "  'FUNCIONA
   
    Rs1.Close
    Rs.Close

Tengo que decir que en esta página dice que esto de las """& ... & """" (tres " más la final " es  equivalente al procedimiento que tú me indicaste, pero el procedimiento de las tres " me ha funcionado y el otro no. Misterios.
Muchas gracias por aguantar  la matraca que te he dado y feliz año.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
psx no me funciona
Juegos y Consolas
faju 4 2,498 Último mensaje 23 Febrero 2005, 00:25 am
por ¤ Nerviozzo ¤
X-oom funciona pero no funciona (sungoku?)
Multimedia
Lordofchaos 4 3,811 Último mensaje 12 Diciembre 2005, 20:44 pm
por Sourraund
Login con md5 , BD funciona pero no funciona « 1 2 »
PHP
securedigital 16 9,575 Último mensaje 25 Mayo 2007, 17:46 pm
por securedigital
Context-root en eclipse no funciona, pero si genero ear y despliego, si funciona
Desarrollo Web
JobFer 0 1,921 Último mensaje 26 Septiembre 2014, 10:09 am
por JobFer
como es posible que este programa funciona y como funciona?
Ingeniería Inversa
insider dealing 7 8,811 Último mensaje 1 Octubre 2017, 01:23 am
por BloodSharp
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines