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 23-01-2007
Avatar de m.ruiz
m.ruiz m.ruiz is offline
Miembro
 
Registrado: ene 2007
Posts: 43
Poder: 0
m.ruiz Va por buen camino
Agregar Varios campos en la sentencia SELECT

Hola a Todos. Tengo un pequeño problema al hacer una consulta. Os comento:
Tengo una aplicación en la cual el cliente va a poder sacar un informe personalizado con rave. Esto consiste en que tengo un formulario con 10 CheckBoxs. Cada uno de ellos corresponde a los 10 campos que tiene mi tabla. Lo que necesito hacer es que se cree un formulario de impresion con esos campos. Es decir que si el cliente marca 5 campos, el select de mi consulta coja solo esos 5 para mostrarlos.
El problema es que no se como hacer para que en la sentencia select aparezcan esos 5 campos. ya que las combinaciones pueden ser de muy diverso tipo. Por ejemplo:
Si tengo marcado el primero (campo1) y el tercero (campo3), necesito que la consulta sea:
SELECT campo1, Campo3
FROM tabla;
Pero claro, tambien puedo coger el cuarto(campo4), el sexto (campo6) Y el noveno (campo9) y entonces seria:
SELECT Campo4, campo6, campo9
FROM Tabla;
Creo qeu no es muy complicado lo que pretendo, pero no consigo solucionarlo. a ver si alguien me puede echar una mano.
Muchas gracias con antelación. Saludos.
__________________
MoNiCa
Responder Con Cita
  #2  
Antiguo 23-01-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Pues no, lo que si será complejo es crear las cajas en el rave

Código Delphi [-]

var strSelect : TstringList;
begin
 if checkbox1.checked then
    strselect.add('campo1');
 if checkbox2.checked then
    strselect.add('campo2');
 if checkbox3.checked then
    strselect.add('campo3');

query1.sql.text := ' select ' + strselect.commatext + ' from tabla';
query1.open;

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 23-01-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

El asunto puede enfocarse y solucionarse de diversos modos. Así a bote pronto se me ocurre utilizar un "CheckListBox" o "CheckBox", como dices, pero agrupados en un "TGroupBox".

El siguiente código podría darte una idea de cómo iterar por un "CheckListBox", buscar los "Items marcados" e ir conformando la cadena "de los campos" que luego se incluirá en la cadena que contenga la consulta SQL en cuestión:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
  c,s: string;
begin
  c := '';
  for i := 0 to CheckListBox1.Count - 1 do
  begin
    if(CheckListBox1.Checked[i])then
    begin
      if c = '' then
        c := CheckListBox1.Items[i]
      else
        c := c +','+ CheckListBox1.Items[i];
    end;
  end;
  s := Format('SELECT %s FROM tabla', [c]);

  ShowMessage(s);
end;

Y este otro código es similar al anterior, salvo que se utiliza un "GroupBox" y distintos "CheckBox" dentro del mismo, como queda dicho:

Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var
  i: integer;
  c,s: string;
begin
  for i := 0 to GroupBox1.ControlCount-1 do
  begin
    if(TCheckBox(GroupBox1.Controls[i]).Checked)then
    begin
      if c ='' then
        c := TCheckBox(GroupBox1.Controls[i]).Caption
      else
        c := c +','+ TCheckBox(GroupBox1.Controls[i]).Caption;
    end;
  end;
  s := Format('SELECT %s FROM tabla', [c]);

  ShowMessage(s);
end;

Disclaimer: Fíjate que en este segundo código fuente se asume que en el "GroupBox" sólo habrá "CheckBox"; que no se comprueba si nos topamos con otro tipo de controles, etc. En fin, es sólo para que te hagas una idea de una posible solución para el caso.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #4  
Antiguo 23-01-2007
richi richi is offline
Miembro
 
Registrado: jun 2006
Ubicación: Portosin - A Coruña
Posts: 51
Poder: 18
richi Va por buen camino
Prueba a ver si te vale lo que pongo a continuacion:
Código Delphi [-]
filtro:= 'SELECT ';

if CheckBox1.Checked then
  filtro:= filtro + 'campo1,';
if CheckBox2.Checked then
   filtro:= filtro + 'campo2,';
if CheckBox3.Checked then
   filtro:= filtro + 'campo3,';
        ......
filtro := Copy(filtro, 1, (length(filtro) - 1));

siendo filtro una variable de tipo string.

A lo mejor hay alguna manera de hacerlo mejor.
Espero que te sirva.
Responder Con Cita
  #5  
Antiguo 23-01-2007
Avatar de m.ruiz
m.ruiz m.ruiz is offline
Miembro
 
Registrado: ene 2007
Posts: 43
Poder: 0
m.ruiz Va por buen camino
Solucionado

Muchas gracias!! Esto es exactamente lo que quería hacer.
Como aún me considero principiante, me atasco en cosas como esta, de tan fácil solución. Ahiiii tendré que estudiar más!!!
Un saludo a todos!!!
__________________
MoNiCa
Responder Con Cita
  #6  
Antiguo 23-01-2007
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
Que bueno ya lo has solucionado. Sin embargo me gustaría agregar mi comentario.

Para mi sería mucho más sencillo utilizar una TListCheckBox en lugar de CheckBoxes individuales para cada campo. Utilizando un Listcheckbox (como ya recomendó Dec) puedes tener una lista de 10, 30, o 50 campos, sin necesidad de tanto espacio en tu diseño, ni de escribir un If por cada checkbox que quieras comprobar, además, puedes utilizar un StringList para generar la lista de campos automáticamente:

Código Delphi [-]
var i: integer;
Campos: TStringList;

begin; //del método que más te convenga
 Campos:= TStringList.Create;
 for i:=0 to Lista.Items.Count-1 do begin
  if Lista.Checked [i] then begin
   Campos.Add(Lista.items.strings[i]);
  end;
 end;
 showmessage(Campos.CommaText);
 Campos.Free;
end;

Esto lo puedes utilizar para el número de campos que quieras.
__________________


Última edición por ContraVeneno fecha: 23-01-2007 a las 17:51:14.
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
Problema con entrecomillado en sentencia select in dentro de un Store Procedure Caballero Negro MS SQL Server 3 12-01-2007 02:46:37
Se borra mi sentencia select jzginez Firebird e Interbase 2 23-07-2005 15:22:13
Sentencia SELECT ... AS .... mutant09 SQL 7 30-04-2004 18:28:58
agregar campos en combobox @-Soft Conexión con bases de datos 4 24-02-2004 13:00:23
Varios SELECT ¥0n1 SQL 2 06-06-2003 09:51:22


La franja horaria es GMT +2. Ahora son las 15:31: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
Copyright 1996-2007 Club Delphi