Convertir valores int de un campo a varchar
Buen dia compañeros de nuevo con un detalle.
tengo una base de datos llamada RH_PERIODOS_SEM en sqlserver con los campos: PERIODOS, MES, EJERCICIO el problema es que el campo MES esta en data type: Int y registra los numeros del mes del 1 al 12 y hay dos detalles.. quiero que en cxGrid que tengo en ves de que se vea el numero del MES(1-12) que se vea el nombre del mes por ejemplo asi se ve: MES 2 4 11 y quiero que se vea asi MES Febrero Aril Noviembre y hice un combobox con los 12 meses pero puse los items con nombre.. Enero, Febrero, Marzo etc.. como puedo guardarlos en la tabla si los valores son int ayuda porfavor !! |
Cita:
|
La forma de manejar esto es usar funciones de conversion
Dependiendo de la version de Delphi, la mejor forma de hacerlo es combinando un tipo enumerado con su correspondiente helper Te permite implementar algo como esto:
|
Gracias por tu aporte agustin, lo implemente y tuve otros problemas
decidi cambiar el data type a varchar y cambiar los valores manualmente les agradesco sus comentarios ;):D:) |
Hola davidmedina29, en algún momento me toco hacer algo similar, te comento como se resolvio.
Para los meses >> Genere un Array con los meses y acceder mediante la posicion del 1 al 12. Para guardar el dato >> Mencionas un combobox, puedes guardar el indice de este. Para mostrar el nombre del mes en lugar de numero puedes usar los eventos del dataset y cambiarlos con le array previo. Saludos. |
hola bitbow gracias por responder
me podrias dar un ejemplo porque no se me ocurre como hacer el array mas bien no estoy familiarizado con ellos te lo agradeceria mucho!! |
Cita:
Que problemas? Como lo implementaste? Si tenes la posibilidad de usar record helpers te aconsejo que no la dejes pasar; te permiten escribir codigo altamente legible :) A ver, es mucho mas agradable leer:
Que esto:
Un lugar interesante para obtener ideas de implementacion es en la unidad System.SysUtils, en donde se definen distintos tipos de record helpers para tipos como string, Integer, etc |
El detalle es que habia cambiado de int a varchar en el campo MES y cambie todo manualmente
pero no pude acomodarlos con el order by me aparecen alfabeticamente: Abril Agosto Diciembre etc.. y los quiero acomodados en orden deacuerdo al calendario Enero Febrero Marzo etc.. |
A mi me parece una buena idea almacenar los meses como un valor numerico
En realidad, cuando armo una BD, de todas las opciones los tipos string son "casi siempre", la peor; si puedo poner otra cosa, mejor El pro mas importante de los tipos numericos es que son extremadamente rápidos, para realizar busquedas, filtros y ordenamiento de tablas son muchisimo mas eficientes Luego cuando se quiere presentar al usuario el valor "real", es decir, para un usuario quiza no le haga mucha gracia ver el numero 3 en lugar de "Marzo", pero es bastante "economico" realizar un par de conversiones desde el valor 3 a Marzo Pero al fin y al cabo es como que de este paso no podes escapar porque siempre terminas aplicando algun formato a cualquier campo (fechas, importes monetarios, horas, etc) asi que podria considerarse como una de las operaciones mas de "formato" Ahora, si hay que ordenar una tabla con millones de registros, en donde el valor a comparar son todos strings, madre mia :) |
Hola David.
Cita:
Cita:
Saludos :) |
hola ecfisa gracias por aporte me sirvio!!
cambie en data type a varchar y funciono me mostro los meses con nombre pero el detalle es que no debo de cambiarlos el date type lo tengo que dejar en int. tengo un query.. Select Periodo, Ejercicio, Mes, from RH_PERIODOS_SEM. mi duda donde podria poner esa consulta en mi codigo delphi para que funcione gracias! |
combobox item en texto pero guardar en numero
buenas tardes tengo un cxcombobox que tiene los meses de enero a diciembre
lo que quiero es que cuando guarde me lo guarde en numero del 1 al 12 segun el mes alguna sugerencia?:( |
Aunque cxcombobox no es un control estándar de delphi, debe ser similar a un combobox, el cuál tiene una propiedad ItemIndex que indica el índice del elemento seleccionado. Este índice es el que tendrías que guardar (0 - enero, 1 - febrero, 2 - marzo, etc.) Si lo quieres basado en 1, sólo tienes que sumar 1 a ItemIndex.
LineComment Saludos |
|
Cita:
|
1 Archivos Adjunto(s)
buen dia compañeros, pues le e buscado y no e encontrado la solucion ya proble con lo que me compartio ecfisa lo plantie asi:
y nada me digue marcando este error '05 mayo' is not a valid integer value for field 'MES' mi cxcomboboox tiene los siguientes items: 01 Enero 02 Febrero 03 Marzo 04 Abril 05 Mayo 06 Junio 07 Julio 08 Agosto 09 Septiembre 10 Octubre 11 Noviembre 12 Diciembre aqui les dejo tmbien la interfaz del sistema con el error: Archivo Adjunto 3320 cualquier aporte se los agradeceria compañeros.. saludos. |
la variable :
es de otro ejemplo que tenia ahi pero no me funciono se me paso quitarla. |
La excepcion se produce en el evento cxComboBox2PropertiesChange o en otro lado?
|
Hola AgustinOrtu
no tengo alguna excepcion solo el codigo que puse arriba lo tengo en el evento propertiesChange saludos |
Solamente podemos adivinar
Ese error no te puede aparecer en ese evento, ya que seria una contradicción
Con esa linea se puede deducir que cxComboBox2.ItemIndex es un ordinal, presuntamente de tipo Integer; si fuera string Delphi no te dejaria compararlo contra -1. Y recordemos que Delphi es fuertemente tipificado Por lo tanto, si la siguiente linea dice:
Estas asignando un Ordinal (Integer, Word, Byte, etc) al campo MES Por lo tanto es imposible que salga un error: Cita:
No tendras algun codigo que asigne valores a los campos y luego haga Post? No estaras usando algun componente Query/Command para enviar un Insert o Update? No tendras conectado componentes mediante propiedades DataSource? |
ok lo que pasa es que mi base de datos guarda en el campo MES solamente INT osea del 1 al 12
en el combobox tengo los meses de enero a diciembre y cuando los quiero guardar pues obiamente me marca ese error ya que la base de datos espera valores de tipo int y no string intente poniendo el aporte del compañero ecfisa pero no soluciono el error que me seguia apareciendo
lo que en si quiero es que no me guarde el texto del combobox si no el entero osea, si selecciono 'Enero' que me guarde el '1', si selecciono 'Abril' que me guarde el '4' .. etc te comparto mi boton guardar.
|
Te estás haciendo líos tú sólo. Ya Agustín lo explicó muy bien: es imposible ese mensaje de error con el código que ponías. Ese mensaje sale por el código que ahora pones, que es distinto. Así que, las líneas:
cámbialas por
LineComment Saludos |
Por otro lado, si la única diferencia entre el insert y el update es el texto del mensaje, no vale la pena distinguir los dos casos. Déjalo así:
LineComment Saludos |
La franja horaria es GMT +2. Ahora son las 00:49:22. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi