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 12-01-2009
Avatar de Carmelo Cash
Carmelo Cash Carmelo Cash is offline
Miembro
 
Registrado: jul 2003
Ubicación: Buenos Aires
Posts: 261
Poder: 21
Carmelo Cash Va por buen camino
Tabular consulta segun el nivel

Hola Foro:

Estoy Utilizando InterBase y Delphi 7 y Necesito hacer una consulta tabulada. Ahora hago

Select nivel, Cuenta
from plan de cuentas


El Resultado es:

Nivel Cuenta
1 Activo
2 Activo Corriente
3 Disponibilidades
4 Bancos
5 Banco PEPE
5 Banco Toto
5 Banco Pipo

Necesito que el campo nivel haga un string para que quede algo así:

Activo
..Activo Corriente
....Disponibilidades
......Bancos
........Banco PEPE
........Banco Toto
........Banco Pipo

Por ahora se me ocurrió crear un campo "Espacios", donde guardo los espacios en blanco de acuerdo al campo nivel, pero no me gusta.
¿Alguna Idea?

Desde ya gracias por su atención.
Responder Con Cita
  #2  
Antiguo 12-01-2009
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.285
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
La consulta está bien, lo que necesitas conseguir es que la visualización en pantalla salga "tabulada".
Si buscas información sobre el evento OnGetText en los foros verás que hay muchos ejemplos. Básicamente te permite modificar el valor que se visualiza de un campo cuando lo muestras en un DBGrid. (ej1, ej2,...); de esta forma lo único que debes hacer es añadir a tu valor X espacios por delante segun el campo nivel.

Revisa también DupeString para montar una cadena de n espacios.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 12-01-2009
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 Carmelo, como te dice el amigo Neftali puedes utilizar el evento OnGetText de tu campo Cuenta y quedaría mas o menos así:

Código Delphi [-]
procedure TForm1.Query1CuentaGetText(Sender: TField; var Text: String;
  DisplayText: Boolean);
var
 Nivel : Integer;
begin
 Nivel := Query1.FieldByName('Nivel').AsInteger;
 Text := StringOfChar(' ',Nivel*5)+Sender.AsString;
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
  #4  
Antiguo 12-01-2009
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Otra forma sería desde la propia SQL hacer un case para concatenar tantos espacios como nivel, así el programa cliente recibiría la información directamente para presentarla en el grid, listado, ... o donde sea.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #5  
Antiguo 12-01-2009
luisgutierrezb luisgutierrezb is offline
Miembro
 
Registrado: oct 2005
Ubicación: México
Posts: 925
Poder: 19
luisgutierrezb Va por buen camino
los componentes Jedi traen un componente que se llama DBTreeView, que te podria servir, solo que necesita al menos 3 campos, 1 el id del padre, 2 id del elemento en si y 3 el texto o caption del elemento
Responder Con Cita
  #6  
Antiguo 12-01-2009
Avatar de Carmelo Cash
Carmelo Cash Carmelo Cash is offline
Miembro
 
Registrado: jul 2003
Ubicación: Buenos Aires
Posts: 261
Poder: 21
Carmelo Cash Va por buen camino
Casi Casi !!!

Gracias por su ayuda. Estuve haciendo algunas pruebas y casi me sale.

Probando esto en MySQL sale bién

select left('----------------------', (nivel )) + Cuenta
from Cuentas


Quise hacer el equivalente en InterBase, quedaría así:

select Cast('----------------------' as Varchar(nivel ))||Cuenta
from Cuentas


Pero Varchar(nivel ) . No lo reconoce.

Seguiré probando, Espero si a alguien se le ocurre una Idea. Porfavor... que no sea Migrar a MySQL.

Saludos y gracias por las sugerencias recibidas.
Responder Con Cita
  #7  
Antiguo 12-01-2009
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Te dejo una query para que la pruebes.
Probada en Firebird 2.0
Te queda de deberes concatenar los campos y poner los de tu tabla
Código SQL [-]
select case  cod_cli 
                 when 1 then '-' 
                 when 2 then'--' 
                 when 3 then '---' 
                 else 'no encontrado' 
                 end as nivel,
                 cast(cod_cli as varchar(2)) as cod from cliente

resultado
Código Delphi [-]
Nivel cod
-       1
--      2
---    3
----  4
no encontrado 27

Suerte
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #8  
Antiguo 13-01-2009
Avatar de Carmelo Cash
Carmelo Cash Carmelo Cash is offline
Miembro
 
Registrado: jul 2003
Ubicación: Buenos Aires
Posts: 261
Poder: 21
Carmelo Cash Va por buen camino
No .

Gracias fjcg02, pero esta debe ser una de las diferencias entre IbterBase y FireBird, me da:

"Token unknown - line 2, char 16
when"


select case nivel
when 1 then '-'
when 2 then'--'
when 3 then '---'
end as nivel,
Cuenta
from cuentas

No se... Gracias por sus aportes.
Responder Con Cita
  #9  
Antiguo 13-01-2009
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
En interbase funciona iif() ?
prueba substring('-------', 1,nivel) si es que la funcion existe.
Un procedimiento almacenado ?
¿ Cambiar interbase por firebird ? ;-)

Ya nos dirás.
Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
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
¿En que nivel estoy? - ¿En que nivel estas? movorack Varios 46 20-06-2008 21:19:26
Consulta que muestre Si o No segun el valor Cecil SQL 4 17-01-2008 00:49:38
Nivel de bateria de una laptop dagsoft API de Windows 1 14-01-2008 19:38:08
Consulta que obtiene campos de una tabla u otra según condición Gabo SQL 10 20-08-2007 08:53:02
jedi cvs: manejar versiones a nivel módulo y a nivel proyecto pvizcay Varios 3 17-04-2007 16:17:59


La franja horaria es GMT +2. Ahora son las 10:52:47.


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