ASP

Hynack

Tengo una base de datos que asigna a cada nombre un numero a modo de puntuación.

En la aplicación ASP, recupero ese numero a por medio de un formulario.

Pero luego tengo que sumar varios de estos numeros, y aqui viene el problema. Al escribir var1 + var2 , si estas son 10 y 20 por ejemplo, me devuelve 1020, en vez de 30, que es el numero que yo necesito.

Si en la base de datos defino las variables como algo que no sea VARCHAR, la rutina me da error, dice que no puede comparar dos tipos distintos de datos.

Ah! Y si pongo Dim variable as Integer me dice que esperaba el final de la instruccion, y no va la aplicacion.

¿Alguna solución?

ElRuso

VarSuma=Cint(var1)+Cint(Var2)

Si son numeros decimales usa Cdbl.

ElRuso

Edited: Que base de tados usas? Access? MS SQL? MySQL? DB2 :P?

IS4kO

En la base de datos, si quieres que te devuelva numeros enteros, los campos deben ser integer si o si... a no ser que hagas un parse tipo Cint...

Péganos esa rutina que dices que da error al cambiar varchar por integer..

salu2

Hynack

es MySQL 4.1 . Voy a probar ahora con lo de #2 y os digo si funcionó

EDIT: Funciona a la perfeccion. Muchas gracias

ElRuso

#5 En MySql tienes que crear el campo como alguno de esos, y pasar el value sin comillas en INSERT o UPDATE accion:
TINYINT( ) -128 to 127 normal
0 to 255 UNSIGNED.
SMALLINT( ) -32768 to 32767 normal
0 to 65535 UNSIGNED.
MEDIUMINT( ) -8388608 to 8388607 normal
0 to 16777215 UNSIGNED.
INT( ) -2147483648 to 2147483647 normal
0 to 4294967295 UNSIGNED.
BIGINT( ) -9223372036854775808 to 9223372036854775807 normal
0 to 18446744073709551615 UNSIGNED.
FLOAT A small number with a floating decimal point.
DOUBLE( , ) A large number with a floating decimal point.
DECIMAL( , )

Tambien lo que te puede pasar es que si pillas la data por ejmplo desde un textbox la informacion alli sera un texto, entonces la tines que convertir a un valor numerico (Cint(var);Cdbl(var); etc) antes de grabar en DB.

Y es preferible hacer lo ultimo.

Hynack

Aprovechando este tema planteo otra duda a ver si podeis ayudar:

Tengo lo siguiente:
-Una DB con una tabla que relación Eventos con fechas, es decir, dos columnas, una evento y otra fecha. Lógicamente he marcado la fecha como tipo date.

Necesito conseguir una aplicación que me seleccione el evento siguiente, basándose en la fecha de hoy, es decir, del dia de la consulta.

Como ejemplo:

Concierto 1 // 01/10/2002
Concierto 2 // 10/11/2010

La aplicación debería devolverme "Concierto 2"

He probado incluyendo en la consulta "where fecha > fecha_actual, pero parece no funcionar.

A ver si alguien tiene alguna idea, lo agradecería un montón.

AtollOndrao_

A ver Hynack, qte veo verdecito. Manejas el sniper mejor que el SQL xDDD (y eso que en algún pcw te he owneado, pero de esto hace años)

Tabla event_hynack
Col evento varchar
Col fecha date

Ejemplo:

    Concierto1   |    "01/01/2005"
    Concierto2   |    "02/03/2007"
    Concierto3   |    "02/03/2008"

La select sería la siguiente:

select evento from event_hynack where fecha > today order by fecha

Te devolvería más de una fila si hay más de un evento posterior a hoy, pero al tener el order, la primera fila en devolver cumpliría tu objetivo.

Y si lo que quieres es que te lo devuelva en una sola fila, del tirón xD:

select evento from event_hynack where fecha > today
and fecha = (select min(fecha) from event_hynack where fecha > today)

Si te das cuenta el SQL es superlógico, la consulta dice:

Dame el evento cuya fecha sea mayor que hoy y además cuya fecha sea igual a la fecha mínima de todas las que son mayores que hoy.

Es más, la primera cláusula de la where ya te sobraría, pq va implícita en la segunda. Con lo cual la sentencia quedaría así:

select evento from event_hynack where fecha = (select min(fecha) from event_hynack where fecha > today)

Para los iniciados en SQL, os recomiendo aplicar ese tipo de lógica y luego traducirla al SQL. Primero escribirlo como frase y luego traducirlo.

FACILÍSIMO!

Hynack

Eso que dices es exactamente lo que hago, pero me devuelve el puntero vacio, es decir, segun el no hay ninguna fecha en esa tabla superior a la de hoy, pero si la hay!

Si cambio el operador a < entonces el hijo puta si devuelve eventos, pero claro, no el que quiero.

Puede ser un problema de formato de la fecha? Y si es asi como solucionarlo?

SeiYa

#9 pero has puesto "today" o "10/11/2006" por que es diferente XD

ElRuso

#9
Echate un ojo a esta pagina:
http://www.w3schools.com/asp/asp_examples.asp
En la seccion de:
Date/Time Functions (VBScript)

para mas informacion sobre la funcion Date usa google.

Hynack

la variable del tiempo de hoy la defino como fecha = date()

Lo curioso es que si escribo = fecha, me lo devuelve como 10/08/06 o lo que sea, en ese formato quiero decir.

Ah una cosa mas, el data de MySQL me obliga a ponerlo como XXXX-XX-XX, yo supongo que será año-mes-dia, posiblemente este ahi el problema, pero no se como solucionarlo

ElRuso

#12 Hasta no te voy a mandar a google:
Hay varis formas de hacerlo, aqui de dejo una

<%var =year(date) & "-" & month(date) & "-" & day(date) %>

Si no te funciona asi como es, converta la variable a date
var=Cdate(var)

Hynack

Mil gracias tio, me lo has solucionado con esa definicion de variable.

Usuarios habituales

  • Hynack
  • ElRuso
  • SeiYa
  • AtollOndrao_
  • IS4kO