Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
TRAER EL ULTIMO REGISTRO
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje TRAER EL ULTIMO REGISTRO 
 
Hola a todos..... y muchas gracias de antemano...

estoy trabajando con gambas y mysql, guardando numeros de facturas con este formato AA-000001, cuando guarda el base de datos, se guarda asi: AA-1, cuando quiero insertar una nueva factura me traigo el ultimo para asi calcular el nuevo numero:

        query_f = "SELECT n_factura FROM factura order by n_factura desc LIMIT 0,1"

como le estoy diciendo que los ordene, cuando encuentra el num AA-8 dice que es mayor que AA-10, por lo que calcula mal el siguiente numero a generar. traté sin el order by asi:
         query_f = "SELECT n_factura FROM factura LIMIT 0,1", pero asi me trae el primero...
 
cómo hago para que me guarde AA-00001 en lugar de AA-1???? así creo que no habria problemas al ordenarlos....
 



 
elenagd - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: TRAER EL ULTIMO REGISTRO 
 
No utilices un int en ese campo, y utiliza un char()

de esta manera, tendras los ceros, incluidos en el campo

Un saludo
 



 
última edición por tururu el Lunes, 24 Enero 2011, 16:33; editado 1 vez 
tururu - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: TRAER EL ULTIMO REGISTRO 
 
Citar:
cómo hago para que me guarde AA-00001 en lugar de AA-1???? así creo que no habria problemas al ordenarlos....

Como tu comprenderás 00001 no es un número entero válido. En cuanto metas algo así en una variable entera estaa valdrá 1.

La solución es que no sea de tipo entero sino string aunque contenga números.

Por otra parte si en un determinado cálculo has obtenido el valor 7 y quieres convertirlo en 000007 tendrás que añadirle 5 ceros, pero si has obtenido el ńumero 27 tendrás que añadirle cuatro y si has obtenido el 127 tendrás que añadirle tres.

Así que por una parte necesitas el comando string que te crea un string de X veces el caracter que quieras. Tu lo usarás para crear un string de X ceros.

Para saber cuantos caracteres tienes que mirar la longitud del string que has calculado. Si es 7 entonces la longitud es 1. Si es 27 entonces la longitud es 2. Si es 127 entonces la longitud es 3. El número de ceros que tienes que generar es 6-longitud. Así si el valor calculado es 7 (que tiene longitud 1) te hará un string de cinco ceros. Si es 27 entonces cuatro ceros. Si es 127 entonces tres ceros. Concatenas esos ceros con tu "7" y ya tienes el "000007"
 



 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: TRAER EL ULTIMO REGISTRO 
 
pero si la coloque varchar!!! precisamente por que iba a guardar ahi numeros y letras.....  
 
pantallazo

estoy tratando de usar format(n_factura, "00000") en el insert pero me da un error....
 



 
elenagd - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: TRAER EL ULTIMO REGISTRO 
 
utiliza char('aqui numero de caracteres que quieres')

veras, como si que funciona.

Un saludo
 



 
última edición por tururu el Lunes, 24 Enero 2011, 17:16; editado 1 vez 
tururu - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: TRAER EL ULTIMO REGISTRO 
 
Citar:
estoy tratando de usar format(n_factura, "00000") en el insert pero me da un error....


Puede que estés cometiendo un error de sintaxis en la sentencia SQL.

DIM n_factura, letras_factura,  sql AS String
DIM res AS Result
DIM numero_factura as Integer

letras_factura = "AA"
numero_factura = 25
n_factura = format(numero_factura, "0000") 'se convierte a String con el formato especificado

n_factura = letras_factura & "-" & n_factura  ' concatenamos letras y números

' o mejor así:
n_factura = Subst("&1-&2",  letras_factura, n_factura)

' preparamos la sentencia sql, usando placeholders (comodines)
sql = "INSERT INTO tabla (n_factura, otro_campo) VALUES (&1, &2);"

' OJO, no confundir la variable n_factura con el nombre de campo en la tabla, aunque
' en este caso sean iguales!!

' ejecutamos la consulta sustituyendo los comodines
res.exec(sql, n_factura, otra_variable)


Para poder operar con los números de factura, éstos deben de ser Integer, pero para poder representarlos debes de hacer la conversión hacia la BD a String y de nuevo, al extraerlo de la BD volver a convertir a Integer para poder operar (sumar, restar, etc).

Además, usando la sustitución de comodines &1, &2, &3, etc, tendrás la ventaja de no tener que preocuparte del tipo de dato y olvidarte de quotear y concatenar los valores que pases al sql, evitando en gran medida errores en sql, independientemente del motor de BD que uses.

Si lo haces así, no tendrás problemas, te lo aseguro.
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: TRAER EL ULTIMO REGISTRO 
 
Esto es lo que he visto que haces
IF Val(nuevo_n) < 999 THEN
                  nuevo_n = nuevo_n + 1
else
 

y luego
nuevo_codigo = Chr$(nueva_li) & Chr$(nueva_ld) & "-" & nuevo_n ' aqui los paso a caracter y los concateno..

Cuando incrementas nuevo_n tienes un entero sin ceros. luego concatenas ese número que no tiene ceros a algo y naturalmente que en el resultado no hay ceros. De hecho nuevo_n cuando concatenas es entero.

Entre un paso y otro tienes que pasar nuevo_n a una variable string y añadirle los ceros que le correspondan. Luego haces nuevo_codigo concatenando con esa variable. La forma de hacerlo te la explique'antes.

Un saludo
 



 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: TRAER EL ULTIMO REGISTRO 
 
Gracias por sus respuestas, tenían razón con lo del  comando String, ya lo probé varias veces y funciona perfectamente

      longitud = Len(Str(nuevo_n))
      nuev_codig = String$(10 - longitud, "0")
      nuevo_codigo = Chr$(nueva_li) & Chr$(nueva_ld) & "-" & nuev_codig & nuevo_n

así al guardar nuevo numero_codigo, se guarda con los respectivos 0 que falten...

Mil Gracias!!!!!!
 



 
elenagd - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: TRAER EL ULTIMO REGISTRO 
 
vale, pero lo has hecho en tres sentencias cuando podrías hacerlo de un golpe

nuevo_codigo=chr(nueva_li) & chr(nueva_ld) & string(10-len(str(nuevo),"0")
 



 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: TRAER EL ULTIMO REGISTRO 
 
cierto!!!
siempre había tenido dudas respecto a hacer varias operaciones con una sola instrucción, (soy nueva.. evidente verdad!!))) bueno, ya veo que se pueden hacer y funciona perfecto....

muchas gracias...
 



 
última edición por elenagd el Lunes, 24 Enero 2011, 20:50; editado 1 vez 
elenagd - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron