Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-11-2008
Avatar de mrnovice
mrnovice mrnovice is offline
Miembro
 
Registrado: oct 2006
Posts: 163
Poder: 18
mrnovice Va por buen camino
DBGrid llenar valores Booleanos mostrando forma String

Saludos muy buen día, he estado buscando pero no encuentro la forma
lo que pasa es que en MySQL creé una tabla en la cual un campo es de tipo "booleano" en realidad dice TyniInt(1) en el cual la lógica sería si es 1 significaría "ATENDIDO" y 0 "PENDIENTE" el chiste de todo esto es que lleno un DBGrid con esta tabla pero me obviamente me aparecen los registros con 0 y 1's¿cómo le pudiera mostrar al usuario? el estado en que están sin afectar la tabla o ya sea hacer una instrucción SQL que me detecte 1 sea esto y 0 sea aquello
Saludos y gracias por su tiempo.
Responder Con Cita
  #2  
Antiguo 25-11-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola, tienes que utilizar el evento OnGetText de tu campo.

Código Delphi [-]
procedure TForm1.Query1CampoGetText(Sender: TField; var Text: String;
  DisplayText: Boolean);
begin
 if Sender.AsInteger = 1 then
  Text := 'ATENDIDO'
 else
  Text := 'PENDIENTE';
end;

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #3  
Antiguo 25-11-2008
Avatar de mrnovice
mrnovice mrnovice is offline
Miembro
 
Registrado: oct 2006
Posts: 163
Poder: 18
mrnovice Va por buen camino
Smile Gracias sigo buscando

jeje no encontré el evento en el query o en el DBGrid pero recuerdo haberusado al menos la función GetText voy a seguir investigando gracias por tu tiempo.
Responder Con Cita
  #4  
Antiguo 25-11-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
mrnovice, lo que dice caro es que utilices el evento OnGetText del CAMPO, ni el DBGrid ni el TQuery tienen este evento. Haz tus campos persistentes, seleccionalo y verás los eventos que dispone.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #5  
Antiguo 25-11-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Cita:
Empezado por mrnovice Ver Mensaje
jeje no encontré el evento en el query o en el DBGrid pero recuerdo haberusado al menos la función GetText voy a seguir investigando gracias por tu tiempo.
Hola, el evento no esta en el DBGrid tampoco en el query, esta en el campo, dale doble click a tu DataSet (Query/Table) , ahí, click derecho y añades los campos, esta en los eventos de los campos que añadas, tu debes escoger el OnGetText del campo que necesites.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #6  
Antiguo 25-11-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Ahora bien, si tus consultas van a ser armadas en tiempo de ejecución, no es posible emplear campos persistentes. En este caso lo que debes emplear es el CASE en tu SQL.

Desconozco MySQL, pero algunos motores tienen la sentencia CASE.

Se puede hacer algo como:
Código SQL [-]
SELECT tus_campos, 
CASE campo_booleano WHEN '1' THEN 'Atendido' ELSE 'Pendiente' end 
FROM tabla
...

Puedes verificar también si MySQL tiene además alguna función equivalente a IIF() de Firebird 2.0

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #7  
Antiguo 25-11-2008
luisgutierrezb luisgutierrezb is offline
Miembro
 
Registrado: oct 2005
Ubicación: México
Posts: 925
Poder: 19
luisgutierrezb Va por buen camino
Creando los campos en el dataset no es necesario usar el GetText, esta la propiedad Display values la cual mostrara el valor por ejemplo

Campo.DisplayValues := 'Atendido;Pendiente';
son los valores que puede tener separados por ";"
o
Campo.DisplayValues := ';Pendiente';

en este ultimo solo mostraria algo en falso...
Responder Con Cita
  #8  
Antiguo 26-11-2008
Avatar de mrnovice
mrnovice mrnovice is offline
Miembro
 
Registrado: oct 2006
Posts: 163
Poder: 18
mrnovice Va por buen camino
Smile Instrucción SQL funciona en MySQL pero en Delphi no?

Saludos nuevamente, ya estuve viendo las propuestas y me parecio muy interesante la instrucción SQL el problema es que Delphi no me la detecta incluso si la hago vista saben a qué se debe esta situación?
esta es mi instrucción

Código SQL [-]
SELECT CASE ESTADO WHEN '1' THEN 'ATENDIDO' ELSE 'PENDIENTE' AS ESTADO FROM TABLA

Y la converti a Vtabla(es la vista) pero no me detecta delphi ese campo qué ondas :S jojo gracias nuevamente a su contribución thanks. en cuanto a displayvalues o gettext ando muy perooo muy perdido :S JEJE PERO YA LO ENCONTRÉ PERO ME GUSTARIA ENTENDER LO QUE PASO CON EL SQL POR FAVOR

Última edición por mrnovice fecha: 26-11-2008 a las 04:18:30.
Responder Con Cita
  #9  
Antiguo 26-11-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola de nuevo, yo también pienso que es mejor que utilices el Case en tu consulta. En mysql si funciona, tal cual te lo ha puesto Delphius. En lo que tu nos estas mostrando lo unico que veo que el falta es un end

Código Delphi [-]
SELECT CASE ESTADO WHEN '1' THEN 'ATENDIDO' ELSE 'PENDIENTE' END AS ESTADO FROM TABLA

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #10  
Antiguo 26-11-2008
Avatar de mrnovice
mrnovice mrnovice is offline
Miembro
 
Registrado: oct 2006
Posts: 163
Poder: 18
mrnovice Va por buen camino
Si Si Me Falto El End Pero...

Si Se Lo Habia Puesto En La Sql /query Ese No Es El Detalle
No Me Lo Detecta Delphi El Campo "as Nombrecampo" <---por Ejemplo
Responder Con Cita
  #11  
Antiguo 26-11-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Hola mrnovice,
¿Podríamos ver el código y la consulta que tienes?
Si te da un error, por favor copia y pega el nombre exacto del error para saber a que enemigo nos enfrentamos

Tal vez exista un inconveniente, muy poco probable... pero puede que exista, en nombrar un alias a un campo cuando se emplea el CASE. No uso MySQL por lo que no te sabría decir.

Cuanto más detalles nos puedas dar sobre el caso mejor te asesoraremos.

Por cierto, si no es molestia te pediría que no escribieras de ese modo... la verdad es que hace más difícil la lectura.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #12  
Antiguo 26-11-2008
Avatar de mrnovice
mrnovice mrnovice is offline
Miembro
 
Registrado: oct 2006
Posts: 163
Poder: 18
mrnovice Va por buen camino
Thumbs up Saludos

HOLAS, PUES LO HE RESUELTO CON EL GETTEXT PERO ME SIGUE PICANDO LA DUDA EL MÉTODO USANDO SQL AGRADEZCO A TODOS SU AYUDA EN SERIO
AQUI VA

Código SQL [-]
SELECT IDSERV,FECHASERV,TIPOSERV,
CASE estado WHEN '1'THEN 'ATENDIDO' ELSE 'PENDIENTE' END  AS ESTADO
FROM SISTEMA.SERVICIO ORDER BY IDSERV ASC
Responder Con Cita
  #13  
Antiguo 26-11-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Pues la verdad es que debería funcionar. ¿Probaste sin el AS?
Como he dicho, a riesgo de equivocarme, a lo mejor no se permite nombrar un alias a un campo en un CASE en MySQL.

Lo que si veo es que no hay un espacio entre la "condición" y el THEN. Por otro lado, mezclar mayusculas con minúsculas... eso no es saludable, evita las mezclas

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #14  
Antiguo 26-11-2008
Avatar de mrnovice
mrnovice mrnovice is offline
Miembro
 
Registrado: oct 2006
Posts: 163
Poder: 18
mrnovice Va por buen camino
Smile gracias voy a probar eso de las mayúsculas ops! jeeje

gracias, en cuanto sepa la respuesta lo notificaré, un saludo muy cordial y lo que se les ofrezca ya saben que en lo que pueda ayudar.
Responder Con Cita
  #15  
Antiguo 26-11-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
lo que veo "extraño" es que el alias que has usado para el campo es el mismo que el nombre del campo....jo que lioso que soy:

Cita:
SELECT IDSERV,FECHASERV,TIPOSERV,
CASE estado WHEN '1'THEN 'ATENDIDO' ELSE 'PENDIENTE' END AS ESTADO
FROM SISTEMA.SERVICIO ORDER BY IDSERV ASC
El sql no distingue mayúsculas de minúsculas así que el alias coincide con nombre del campo. Yo también Quitaría el "AS ESTADO"

Otra cosita, ya que has creado un Vista, allí mismo podrías incluir ese SQL que has puesto aquí, de forma que la Vista ya sustituye el cero y uno por el texto y entonces, tu consulta pasaría a ser:
Código SQL [-]
select * from Vtabla


Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #16  
Antiguo 26-11-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Cita:
Empezado por Delphius Ver Mensaje
Pues la verdad es que debería funcionar. ¿Probaste sin el AS?
Como he dicho, a riesgo de equivocarme, a lo mejor no se permite nombrar un alias a un campo en un CASE en MySQL.
Con el As o sin el As debería funcionar y si permite mysql poner un alias a un Case.

Cita:
Empezado por Lepe Ver Mensaje
lo que veo "extraño" es que el alias que has usado para el campo es el mismo que el nombre del campo....jo que lioso que soy:

El sql no distingue mayúsculas de minúsculas así que el alias coincide con nombre del campo. Yo también Quitaría el "AS ESTADO"
Yo no lo quitaría porque sin el alias el nombre del campo no va a ser ESTADO sino todo el chorizo del Case y tendría que refreirse a todo eso, conste que esto es hablando de mysql, pero podría utilizar la propiedad Fields para acceder a la posición donde esta el Case.

Tu consulta debería quedar así:

Código Delphi [-]
 Query1.Active := False;
 Query1.SQL.Text := 'SELECT CASE ESTADO WHEN ''1'' THEN ''ATENDIDO'' ELSE ''PENDIENTE'' END AS ESTADO FROM TABLA';
 Query1.Active := True;
 
 Showmessage(Query1.FieldByName('estado').AsString);
 
 //o, si no le pusieras el alias
 
 showmessage(Query1.fields[0].AsString);

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
Respuesta



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
Llenar con ceros a la izquierda una variable string egostar .NET 9 22-08-2007 08:57:19
Llenar DbGrid sin Instrucciones SQL CamiloU OOP 7 16-01-2006 23:54:14
comparar un string con un rango de valores locorez Varios 2 09-01-2006 15:54:43
Dbgrid Que Permita Checkbox Para Datos Booleanos SoftMakerMex OOP 4 19-12-2003 20:46:38
Restaurar los valores de una forma Newbie Varios 1 21-07-2003 20:44:15


La franja horaria es GMT +2. Ahora son las 22:50:09.


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