Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-02-2014
xalo xalo is offline
Miembro
 
Registrado: ene 2011
Posts: 18
Poder: 0
xalo Va por buen camino
ADOQuery que devuelva campo booleano...

Buenos dias a todos,
Estoy intentando que la siguiente consulta devuelva el campo 'Seleccionado' como booleano y no soy capaz:
Código SQL [-]
SELECT True as Seleccionado,Id,Nombre FROM Clientes

He probado lo siguiente, pero sigue sin identificar el campo como booleano
Código Delphi [-]
DM.Consulta.Active := False;
DM.Consulta.SQL.Text := 'SELECT True as Seleccionado,Id,Nombre FROM Clientes';
DM.Consulta.FieldDefs.Update;
DM.Consulta.fielddefs.Items[1].DataType := ftBoolean;
DM.Consulta.Active := True;

He provado con CAST y varias combinaciones y nada. El resultado que se obtiene es un -1 o 0. Seguramente será algo trivial pero no he sido capaz de verlo.
Se os ocurre alguna alternativa?

Gracias de antemano
Responder Con Cita
  #2  
Antiguo 25-02-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Y el campo "seleccionado" de qué tipo es y qué valores almacena?
Si es un campo numérico y contiene los valores 0 ó 1 (0.false 1.true) entonces tienes varias formas de hacerlo.
Código Delphi [-]
variablebooleana = "select seleccionado from clientes" = 1
Si seleccionado=1 entonces la variablebooleanda almacenará true, en caso contrario almacenará false.
Responder Con Cita
  #3  
Antiguo 25-02-2014
xalo xalo is offline
Miembro
 
Registrado: ene 2011
Posts: 18
Poder: 0
xalo Va por buen camino
El campo es de tipo boolean, para que salga un checkbox directo en un dbgrid sin tener que añadir más código. De hecho con sqlite lo tengo funcionando, ya que el wrapper que uso tiene un evento que cuando crea los campos el query (onInitFieldDef) donde le indicas que el campo Seleccionado sea de tipo ftBoolean.
En el caso del ADOQuery no veo la forma.

Gracias por tu interés
Responder Con Cita
  #4  
Antiguo 25-02-2014
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 xalo.

Según esta documentación Datatypes In SQLite:
Cita:
...
1.1 Boolean Datatype

SQLite does not have a separate Boolean storage class. Instead, Boolean values are stored as integers 0 (false) and 1 (true).
...
Entonces, como te comenta Casimiro, si logras que te devuelva el valor como entero la asignación es tán simple como:
Código Delphi [-]
  ...
  CheckBox1.Checked:= Boolean(DM.Consulta.FieldByName('SELECCIONADO').AsInteger);
  ...

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 25-02-2014
xalo xalo is offline
Miembro
 
Registrado: ene 2011
Posts: 18
Poder: 0
xalo Va por buen camino
Buenas tardes,
Gracias por vuestras respuestas
Realmente lo que busco es que de forma directa reconozca el campo que creo en la consulta como boolean, para que al mostrar el dbgrid salga lo que se muestra en resultadodeseado.png
y no de la manera que se muestra en resultadoactual.png

Se que en el dbgrid se puede hacer que cambie el comportamiento, pero de la misma manera que hice con sqlite, intuyo que con adoquery habrá alguna forma más simple y directa también.

(Nota: En este ejemplo la columna en cuestion se llama SELE)

Gracias
Imágenes Adjuntas
Tipo de Archivo: png resultadoactual.png (6,7 KB, 2 visitas)
Tipo de Archivo: png resultadodeseado.png (7,0 KB, 2 visitas)
Responder Con Cita
  #6  
Antiguo 25-02-2014
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 xalo.

La verdad es que como no vemos el código donde asignas el valor es dificil darte una respuesta acertada. Como comentas mas arriba estas usando los componentes ADO, por lo que podrías hacer directamente:
Código Delphi [-]
...
  CheckBox1.Checked:=DM.Consulta.FieldByName('SELECCIONADO').AsBoolean;
...
No se me ocurre otra forma de asignar el valor de un campo a la propiedad Checked de un TCheckBox.

Me pregunto si no estarás hablando de un TDBCheckBox... Por que si es el caso, este último posee las propiedades ValueChecked y ValueUnChecked que podes configurar con los valores que desees que considere como verdadero y falso.

Por ejemplo para que interprete los valores 0 y 1 como False y True respectivamente:
Código Delphi [-]
...
  { Ambas propiedades estan publicadas }
  DBCheckBox1.ValueChecked  := '1';
  DBCheckBox1.ValueUnchecked:= '0';
...


Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 26-02-2014
orodriguezca orodriguezca is offline
Miembro
 
Registrado: ene 2009
Posts: 221
Poder: 16
orodriguezca Va por buen camino
No tengo mi entorno de desarrollo a la mano pero quizás sirva lo siguiente :

1. Escribir la sentencia select con valores permitidos por el motor específico de bases de datos : 'SELECT Cast(1 as integer) as Seleccionado, Id, Nombre FROM Clientes';

2. Crear campos persistentes en el adoquery y forzar el campo "Seleccionado" como un TBooleanField. La secuencia de pasos más o menos sería Click derecho sobre el AdoQuery -> Adicionar todos los campos -> de la lista borrar el campo "Seleccionado" -> Adicionar campo para adicionar un nuevo campo con nombre "Seleccionado" de tipo boolean.

Insisto, es solo una idea, pero podría funcionar.

Nota 1: Los pasos en el punto 2 suponen que el AdoQuery existe en tiempo de diseño.

Nota 2: El codigo del #1 :
Código Delphi [-]
DM.Consulta.fielddefs.Items[1].DataType := ftBoolean;

debería ser
Código Delphi [-]
DM.Consulta.fielddefs.Items[0].DataType := ftBoolean;

La colección de Items empieza en cero y no en uno.

Última edición por orodriguezca fecha: 26-02-2014 a las 03:00:28. Razón: Fallo en la red. No pude terminar el texto.
Responder Con Cita
  #8  
Antiguo 26-02-2014
xalo xalo is offline
Miembro
 
Registrado: ene 2011
Posts: 18
Poder: 0
xalo Va por buen camino
Gracias orodriguezca y ecfisa,
He probado lo que me dices y continua identificando un smallint aunque lo fuerces muestra un -1 para un true o el numero que especifiques.
No hay código que mostrar, es tan simple como un adoquery->datasetprovider->clientdataset->jvDBUltimgrid y el único código es el de asignar consulta y abrir el adoquery como muestro en el primer post. Tienes razon orodriguezca en el elemento 0 del item por lo que quedaría:
Código Delphi [-]
DM.ADOQuery.Active := False;
DM.ADOQuery.SQL.Text := 'SELECT 0 as Seleccionado,Id,Nombre FROM Clientes';
DM.ADOQuery.FieldDefs.Update;
DM.ADOQuery.fielddefs.Items[0].DataType := ftBoolean; //probado tambien en clientdataset.fieldefs
DM.Clientdataset.Active := True;

y el objetivo es poder tener en el clientdataset los elementos seleccionados/no seleccionados marcando el checkbox que sale en el dbgrid y tratarlos (como ya dije en sqlite lo tengo implementado y funcionando) por eso me extraña este comportamiento.
Responder Con Cita
  #9  
Antiguo 26-02-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Haz lo que te ha dicho ecfisa
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
recorrer tabla y verificar Campo Booleano n03l Tablas planas 3 10-03-2012 00:00:05
Campo Booleano en MySQL cmfab Varios 5 29-12-2010 11:40:01
filtrar por campo booleano ale_metall Varios 4 03-10-2008 22:52:28
Funcion que devuelva la longitud de un campo en una SQL para BDE en Delphi7 Kivan SQL 5 20-05-2005 20:10:49
Ordenar un campo Booleano en MySQL Brewster MySQL 3 24-01-2005 10:52:38


La franja horaria es GMT +2. Ahora son las 20:41:19.


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