Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   ASP Clásico (http://www.forosdelweb.com/f15/)
-   -   ordenar registros en pantalla (http://www.forosdelweb.com/f15/ordenar-registros-pantalla-254162/)

suntus 14/12/2004 05:56

ordenar registros en pantalla
 
Hola

Veran Tengo en mi DB un Campo TEXTO en el que guardo numeros del 1 al 20 y cuando los saco en pantalla

sql= "SELECT distinct numeros from tabla"

se ordenan de la siguiente forma

1
11
12
13
2
3
4
5

necesito que se ordenen correctamente, ¿alguna idea? ¿y q no sea pasar el campo a numerico?

gracias

lexus 14/12/2004 06:44

hacelo asi:
sql= "SELECT distinct numeros FROM tabla ORDER BY numeros ASC"

usas ASC para ordenarlo de forma ascendente y DESC para descendiente. espero sea lo qeu buscas

suntus 14/12/2004 07:43

gracias lexus

pero no

El problema es que el campo de la db es texto, y cuando le das a ordenar te lo ordena como ya comente antes, por oden alfabetico.

alguna recomendacion??

Myakire 14/12/2004 08:08

Si es TEXT, debes hacer un doble cast:
Código:

SELECT  numeros
FROM    tabla
ORDER BY CAST(CAST(numeros AS nvarchar) AS INT)

Saludos

Myakire 14/12/2004 08:18

mmmmmm, si la cosa es en Access, el asunto es más fácil:

SELECT *
FROM texto order by CLng (txtnumero)

o

SELECT *
FROM texto order by CInt(txtnumero)

suntus 14/12/2004 08:54

Myakire

Si es en access y me da un error

1º me dice con:
SELECT distinct numeros from tabla1 order by CLng (txtnumeros)
[Microsoft][Controlador ODBC Microsoft Access] La cláusula ORDER BY (CLng(txtnumeros)) está en conflicto con DISTINCT.

y luego cuando por probar le quito el distinct me sale:
SELECT numeros from tabla1 order by CLng (txtnumeros)
2º me dice que
[Microsoft][Controlador ODBC Microsoft Access] Pocos parámetros. Se esperaba 1.

:(

ayudame... gracias

flacoluis 14/12/2004 09:12

a la instruccion
SELECT numeros from tabla1 order by CLng (txtnumeros)

sacale el txt

SELECT numeros from tabla1 order by CLng (numeros)

suntus 14/12/2004 09:15

hola flacoluis

me da el error

[Microsoft][Controlador ODBC Microsoft Access] No coinciden los tipos de datos en la expresión de criterios.

q podra ser?

flacoluis 14/12/2004 09:21

a ver con:
SELECT numeros from tabla1 order by Cint (numeros)

suntus 14/12/2004 09:32

el error es el mismo, hace exactmante lo mismo

si uso distinct dice que esta en conflicto y si no lo uso no coinciden los tipos :(

gracias por tu ayuda..

flacoluis 14/12/2004 09:57

que pasa si el cint se lo pones asi?
SELECT cint(numeros) from tabla

Myakire 14/12/2004 13:31

Vamos, es cosa de ser algo lógico, si una función de casting truena, es por que no se ha podido realizar la conversión, Seguramente un registro en esa tabla, no tiene un valor que pueda ser pasado a número (como una letra, un espacio o un nulo).

Existe una función en SQL Server ISNULL para esos casos, habrá que buscar un equivalente en Access o ingeniarselas con subconsultas.

Saludos

u_goldman 14/12/2004 14:00

Algo como esto utilizando arreglos, no lo he probado y le hice unas adecuaciones je je je, por lo cual seguramente tendrá algun error, pero ahí está la idea.

Código:

'Función para ordenar un arreglo, método de la burbuja
Function OrdenaArreglo(arreglo)
        If isArray(arreglo) Then
                Dim temp
                For i = 0 to uBound(arreglo)
                        For j = i + 1 to uBound(arreglo)               
                                If arreglo(i) > arreglo(j) Then
                                        temp = arreglo(i)
                                        arreglo(i) = arreglo(j)
                                        arreglo(j) = temp
                                End If
                        Next
                Next
        Else
                OrdenaArreglo = Null
        End If
        OrdenaArreglo = arreglo
End Function




Set rs = Server.createObject....bla bla
strSQL = "Select numeros FROM tabla1"
rs.Open strSQL, ObjConn, 3, 3

temp = ""
While Not rs.EOF
  If not IsNull(rs("numeros")) Then
    temp = temp & ","
  End If
  rs.MoveNext
Wend

If temp <> "" Then
  temp = left(temp, len(temp) - 1)
  arrTemp = split(temp, ",")
  Dim intArrTemp()
  For i = 0 to uBound(arrTemp)
    intArrTemp(i) = Cint(arrTemp(i))
  Next
  MiArreglo = OrdenaArreglo(intArrTemp)
  If Not IsNull(MiArreglo)
    'Lo muestras
  End If
End If

Salu2,


La zona horaria es GMT -6. Ahora son las 09:06.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2014, Jelsoft Enterprises Ltd.

SEO by vBSEO 3.3.2