Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-02-2016
davidmedina29 davidmedina29 is offline
Miembro
NULL
 
Registrado: feb 2016
Posts: 34
Poder: 0
davidmedina29 Va por buen camino
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 !!
Responder Con Cita
  #2  
Antiguo 19-02-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por davidmedina29 Ver Mensaje
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
Obviamente, no se puede, salvo que guardes "1", "2", "3", ...
Responder Con Cita
  #3  
Antiguo 19-02-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
La forma de manejar esto es usar funciones de conversion

Código Delphi [-]
function MesAInt(const TextMes: strnig): Integer;
function IntAMes(const IntMes: Integer): string;

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:

Código Delphi [-]
var
  AMonth: TMonth;
  I: Integer;
  Text: string;
begin
  AMonth := TMonth.Enero;
  ShowMessage(AMonth.ToStr); // imprime Enero en pantalla
  AMonth := AMonth.Next; // AMonth = TMonth.Febrero;

  I := AMonth.ToInt; // I = 2

  Text := 'Julio';
  AMonth := TMonth.Parse(Text); // AMonth = TMonth.Julio  

  Text := TMonth.ParseInt(12).ToStr; // TMonth.ParseInt(12) = TMonth.Diciembre -> ToStr = 'Diciembre'
end;
Responder Con Cita
  #4  
Antiguo 19-02-2016
davidmedina29 davidmedina29 is offline
Miembro
NULL
 
Registrado: feb 2016
Posts: 34
Poder: 0
davidmedina29 Va por buen camino
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
Responder Con Cita
  #5  
Antiguo 19-02-2016
bitbow bitbow is offline
Miembro
 
Registrado: jul 2006
Posts: 366
Poder: 18
bitbow Va camino a la fama
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.
__________________
¡Ni como ayudarte Niño!!
bitbow
Responder Con Cita
  #6  
Antiguo 19-02-2016
davidmedina29 davidmedina29 is offline
Miembro
NULL
 
Registrado: feb 2016
Posts: 34
Poder: 0
davidmedina29 Va por buen camino
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!!
Responder Con Cita
  #7  
Antiguo 19-02-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Cita:
Empezado por davidmedina29 Ver Mensaje
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

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:

Código Delphi [-]
  ShowMessage(Enumerativo.ToStr);

Que esto:

Código Delphi [-]
  ShowMessage(EnumerativoToStr(Enumerativo));

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
Responder Con Cita
  #8  
Antiguo 20-02-2016
davidmedina29 davidmedina29 is offline
Miembro
NULL
 
Registrado: feb 2016
Posts: 34
Poder: 0
davidmedina29 Va por buen camino
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..
Responder Con Cita
  #9  
Antiguo 20-02-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
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
Responder Con Cita
  #10  
Antiguo 20-02-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola David.
Cita:
Empezado por davidmedina29 Ver Mensaje
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
Otra opción, es traer el nombre directamente desde la consulta SQL:
Código SQL [-]
SELECT PERIODOS,
       (CASE  MES
        WHEN 1 THEN 'ENERO'
        WHEN 2 THEN 'FEBRERO'
        WHEN 3 THEN 'MARZO'
        WHEN 4 THEN 'ABRIL'
        ...
        WHEN 12 THEN 'DICIEMBRE' END) AS MES 
        EJERCICIO,
        ...
FROM RH_PERIODOS_SEM
...

Cita:
Empezado por davidmedina29 Ver Mensaje
...
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 !!
Este es otro tema, pero coincido con bitbow que podes tomar el número del mes seleccionado del índice del combo:
Código Delphi [-]
...
  if ComboBox1.ItemIndex <> -1 then
    tuDataSet.FieldByName('MES').Value := ComboBox1.ItemIndex + 1;  // (1er índice = 0)
  ...

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #11  
Antiguo 22-02-2016
davidmedina29 davidmedina29 is offline
Miembro
NULL
 
Registrado: feb 2016
Posts: 34
Poder: 0
davidmedina29 Va por buen camino
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!
Responder Con Cita
  #12  
Antiguo 22-02-2016
davidmedina29 davidmedina29 is offline
Miembro
NULL
 
Registrado: feb 2016
Posts: 34
Poder: 0
davidmedina29 Va por buen camino
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?
Responder Con Cita
  #13  
Antiguo 22-02-2016
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #14  
Antiguo 22-02-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Otra vez repitiendo hilos??

La respuesta de ecfisa te debería servir perfectamente
Responder Con Cita
  #15  
Antiguo 22-02-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por davidmedina29 Ver Mensaje
buenas tardes
Buenas tardes, y deja de repetir hilos, gracias
Responder Con Cita
  #16  
Antiguo 23-02-2016
davidmedina29 davidmedina29 is offline
Miembro
NULL
 
Registrado: feb 2016
Posts: 34
Poder: 0
davidmedina29 Va por buen camino
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:

Código Delphi [-]
procedure TfPeriodosNominaNvo.cxComboBox2PropertiesChange(Sender: TObject);
var
  ID: Integer;
begin
  if cxComboBox2.ItemIndex <> -1  then
  MSQuery1.FieldByName('MES').Value := cxComboBox2.ItemIndex +1;
end;

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:
Captura_converted.png

cualquier aporte se los agradeceria compañeros.. saludos.

Última edición por davidmedina29 fecha: 23-02-2016 a las 20:01:12. Razón: puse codigo delphi donde no debia ponerlo
Responder Con Cita
  #17  
Antiguo 23-02-2016
davidmedina29 davidmedina29 is offline
Miembro
NULL
 
Registrado: feb 2016
Posts: 34
Poder: 0
davidmedina29 Va por buen camino
la variable :

Código Delphi [-]
ID: Integer;

es de otro ejemplo que tenia ahi pero no me funciono se me paso quitarla.
Responder Con Cita
  #18  
Antiguo 23-02-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
La excepcion se produce en el evento cxComboBox2PropertiesChange o en otro lado?
Responder Con Cita
  #19  
Antiguo 23-02-2016
davidmedina29 davidmedina29 is offline
Miembro
NULL
 
Registrado: feb 2016
Posts: 34
Poder: 0
davidmedina29 Va por buen camino
Hola AgustinOrtu
no tengo alguna excepcion solo el codigo que puse arriba lo tengo en el evento propertiesChange

saludos
Responder Con Cita
  #20  
Antiguo 23-02-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Solamente podemos adivinar

Ese error no te puede aparecer en ese evento, ya que seria una contradicción

Código Delphi [-]
  if cxComboBox2.ItemIndex <> -1 then
  ...

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:

Código Delphi [-]
  MSQuery1.FieldByName('MES').Value := cxComboBox2.ItemIndex +1;

Estas asignando un Ordinal (Integer, Word, Byte, etc) al campo MES

Por lo tanto es imposible que salga un error:

Cita:
'05 mayo' is not a valid integer value for field 'MES'
Yo creo que hay algo que te falta mostrarnos.

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?
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Convertir blob en varchar Mauro Daniel Firebird e Interbase 6 27-08-2010 14:43:05
Convertir un varchar a number nelem Oracle 1 06-05-2008 15:48:02
Convertir de varchar a decimal nelem Oracle 3 13-03-2008 09:40:58
Como convertir un campo VARCHAR a uno BLOB, si se puede? judoboy Firebird e Interbase 10 31-07-2003 18:28:45


La franja horaria es GMT +2. Ahora son las 11:30:05.


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
Copyright 1996-2007 Club Delphi