Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   DBGrid llenar valores Booleanos mostrando forma String (https://www.clubdelphi.com/foros/showthread.php?t=61858)

mrnovice 24-11-2008 23:32:33

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.

Caro 25-11-2008 03:08:48

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

mrnovice 25-11-2008 17:59:57

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.

Delphius 25-11-2008 18:07:51

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,

Caro 25-11-2008 18:08:50

Cita:

Empezado por mrnovice (Mensaje 327873)
:) 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

Delphius 25-11-2008 18:32:19

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,

luisgutierrezb 25-11-2008 21:03:34

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...

mrnovice 26-11-2008 04:11:30

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 :)

Caro 26-11-2008 04:18:43

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

mrnovice 26-11-2008 04:24:29

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

Delphius 26-11-2008 04:33:05

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,

mrnovice 26-11-2008 04:35:55

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

Delphius 26-11-2008 05:03:12

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,

mrnovice 26-11-2008 05:06:16

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.

Lepe 26-11-2008 09:46:20

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

Caro 26-11-2008 15:59:45

Cita:

Empezado por Delphius (Mensaje 328012)
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 (Mensaje 328023)
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


La franja horaria es GMT +2. Ahora son las 16:40:01.

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