Autor |
Mensaje |
elenagd
Usuario
Registrado: Enero 2011
Mensajes: 16
Edad: 44
|
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....
|
#1 Lunes, 24 Enero 2011, 16:25 |
|
|
tururu
Aprendiz
Registrado: Noviembre 2010
Mensajes: 61
Edad: 52
|
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
|
#2 Lunes, 24 Enero 2011, 16:33 |
|
|
soplo
Analista Programador
Registrado: Septiembre 2009
Mensajes: 843
Edad: 44
|
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"
|
#3 Lunes, 24 Enero 2011, 16:45 |
|
|
elenagd
Usuario
Registrado: Enero 2011
Mensajes: 16
Edad: 44
|
Re: TRAER EL ULTIMO REGISTRO
pero si la coloque varchar!!! precisamente por que iba a guardar ahi numeros y letras.....
estoy tratando de usar format(n_factura, "00000") en el insert pero me da un error....
|
#4 Lunes, 24 Enero 2011, 17:00 |
|
|
tururu
Aprendiz
Registrado: Noviembre 2010
Mensajes: 61
Edad: 52
|
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
|
#5 Lunes, 24 Enero 2011, 17:15 |
|
|
jguardon
Administrador
Registrado: Septiembre 2009
Mensajes: 2708
Edad: 57 Ubicación: Granada
|
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"
|
#6 Lunes, 24 Enero 2011, 17:40 |
|
|
soplo
Analista Programador
Registrado: Septiembre 2009
Mensajes: 843
Edad: 44
|
Re: TRAER EL ULTIMO REGISTRO
Esto es lo que he visto que haces
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
|
#7 Lunes, 24 Enero 2011, 17:43 |
|
|
elenagd
Usuario
Registrado: Enero 2011
Mensajes: 16
Edad: 44
|
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!!!!!!
|
#8 Lunes, 24 Enero 2011, 17:53 |
|
|
soplo
Analista Programador
Registrado: Septiembre 2009
Mensajes: 843
Edad: 44
|
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")
|
#9 Lunes, 24 Enero 2011, 18:44 |
|
|
elenagd
Usuario
Registrado: Enero 2011
Mensajes: 16
Edad: 44
|
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
|
#10 Lunes, 24 Enero 2011, 20:50 |
|
|
|