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 17-01-2006
Avatar de el_barto
el_barto el_barto is offline
Miembro
 
Registrado: may 2005
Ubicación: Bogota Colombia
Posts: 533
Poder: 19
el_barto Va por buen camino
Arrow Hacer mascaras en consultas sql.

Buenos dias:

estoy haciendo una seleccion de unos proyectos hechos en mi aplicativo pero tengo una duda:

los datos que me imprime son algo asi:

Código:
cod_proyecto     ///// volumen    ///// peso
1                /////      1    /////    0
2                /////      0    /////    1
lo que deseo es cambiar el 1 por Si y cambiar el 0 por No para los campos volumen y peso, es posible hacer el cambio visual solo en la seleccion sin modificar los datos de la base ???

Gracias, esta es mi consulta sql, uso interbase 6.


Código SQL [-]
 
select cod_proyecto, volumen,peso
from transp_total
__________________
Una forma de alcanzar tus metas es ayudando a otros a alcanzar las suyas

Última edición por roman fecha: 17-01-2006 a las 23:00:15.
Responder Con Cita
  #2  
Antiguo 17-01-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Desconozco si IB tiene algún tipo de condicional. En MySql, podrías hacer:

Código SQL [-]
select
  cod_proyecto,
  if(volumen = 1, 'SI', 'NO') as volumen,
  if(peso = 1, 'SI', 'NO') as peso
from
  transp_total

Mira a ver si IB tiene condicionales.

Otra opción es dejar la consulta como está y Utilizar el evento OnGetText del dataset para que muestre los valores que deseas.

// Saludos
Responder Con Cita
  #3  
Antiguo 17-01-2006
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Saludos

Tambien podrias probar con CASE
Código SQL [-]
select
  cod_proyecto,
  Case volumen when
    1 then 'SI'
  Else
     'NO'
  End,
  Case peso when
    1 then 'SI'
  Else 
     'NO'
  End
from
  transp_total
Ahi tienes para escoger, las dos son validas!
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #4  
Antiguo 18-01-2006
Avatar de el_barto
el_barto el_barto is offline
Miembro
 
Registrado: may 2005
Ubicación: Bogota Colombia
Posts: 533
Poder: 19
el_barto Va por buen camino
Gracias

Cita:
Empezado por roman
Código SQL [-]
select
cod_proyecto,
if(volumen = 1, 'SI', 'NO') as volumen,
if(peso = 1, 'SI', 'NO') as peso
from
transp_total
Ya lo habia intentado hacer asi por simple intuicion pero no me habia funcionado por que no reconocia el if.

Cita:
Empezado por roman
Mira a ver si IB tiene condicionales.
pues despues de leer tu mensaje enseguida me puse a buscar y encontre que no. Aqui

Cita:
Empezado por roman
Otra opción es dejar la consulta como está y Utilizar el evento OnGetText del dataset para que muestre los valores que deseas.
No lo estoy haciendo para usarlo en delphi, si no cuadrando el sql para despues pasarlo a Crystal SQL Design.
__________________
Una forma de alcanzar tus metas es ayudando a otros a alcanzar las suyas
Responder Con Cita
  #5  
Antiguo 18-01-2006
Avatar de el_barto
el_barto el_barto is offline
Miembro
 
Registrado: may 2005
Ubicación: Bogota Colombia
Posts: 533
Poder: 19
el_barto Va por buen camino
Cita:
Empezado por vtdeleon
Saludos

Código SQL [-]
select
cod_proyecto,
Case volumen when
1 then 'SI'
Else
'NO'
End,
Case peso when
1 then 'SI'
Else 
'NO'
End
from
transp_total
lo he intentado hacer asi pero me indica :

Cita:
Token unknown - line 3, char 12
when
__________________
Una forma de alcanzar tus metas es ayudando a otros a alcanzar las suyas
Responder Con Cita
  #6  
Antiguo 18-01-2006
Avatar de el_barto
el_barto el_barto is offline
Miembro
 
Registrado: may 2005
Ubicación: Bogota Colombia
Posts: 533
Poder: 19
el_barto Va por buen camino
No lo pude hacer desde ib asi que hice mi reporte normal pero le inserte la siguiente formula y listo me quedo hecho:

Código:
IIF ({Query.PESO} = 1,'Si','No')
Gracias totales
__________________
Una forma de alcanzar tus metas es ayudando a otros a alcanzar las suyas
Responder Con Cita
  #7  
Antiguo 18-01-2006
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Puedes probar mediante un store procedure...

Código SQL [-]
create procedure sp_transp_total
returns (
  cod_proyecto integer, /* o varchar(n) */
  volumen char(2),
  peso char(2))
as
  declare variable volumen_int integer;
  declare variable peso_int integer;
begin
  for
    select cod_proyecto, volumen, peso from transp_total into
      :cod_proyecto, :volumen_int, : peso_int; /* El : y peso no llevan espacio */
  do
  begin
    if (volumen_int == 1) then
      volumen = 'SI';
    else
      volumen = 'NO';
    if (peso_int == 1) then
      peso = 'SI';
    else
      peso = 'NO';
    suspend;
  end
end^

Y este ya lo puedes usar:

Código SQL [-]
select cod_proyecto, volumen, peso from sp_transp_total



Saludos...
Responder Con Cita
  #8  
Antiguo 18-01-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Algo complicado ¿no? A veces me sorprende la facilidad con que algunas cosas se pueden hacer en MySql.

Va otra opción, quizá ésta sí funcione en IB:

Código SQL [-]
select
  cod_proyecto,
  substring('SINO', 2*volumen + 1, 2) as volumen,
  substring('SINO', 2*peso + 1, 2) as peso
from
  transp_total

// Saludos
Responder Con Cita
  #9  
Antiguo 18-01-2006
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Esa también es otra opción, solo que requiere que se agregue la UDF substring a la base de datos...


Saludos...
Responder Con Cita
  #10  
Antiguo 18-01-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¡No inventes!

¿Por qué es tan complicado IB? Je, je, bueno, sería ridículo de mi parte ponerme a criticar IB pero me gustaría entender la filosofía que hay detrás. ¿Por qué funciones tan elementales (según yo) no vienen por defecto en el lenguaje?

// Saludos
Responder Con Cita
  #11  
Antiguo 18-01-2006
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Pues quien sabe... es algo que hasta ahora todavía no entiendo... Tal vez es así para apegarse lo más posible al estándar SQL92, no se, podría ser cualquier cosa... jejeje



Saludos...
Responder Con Cita
  #12  
Antiguo 18-01-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Mmmm.. Hubiera jurado que substring era parte del standard.

// Saludos
Responder Con Cita
  #13  
Antiguo 18-01-2006
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Las funciones que soporta IB son: AVG, CAST, COUNT, EXTRACT, GEN_ID, MAX, MIN, SUM y UPPER. Esto lo saqué de la documentación de la versión 7.

La función substring no está soportada, y solo se puede hacer usando la UDF substr.




Saludos...
Responder Con Cita
  #14  
Antiguo 18-01-2006
Avatar de el_barto
el_barto el_barto is offline
Miembro
 
Registrado: may 2005
Ubicación: Bogota Colombia
Posts: 533
Poder: 19
el_barto Va por buen camino
Talking

store procedure perfect ¡¡¡¡ lo probe mas no lo implemente en mi reporte dado que como lo explique anteriormente es muy facil desde crystal reports, y como dice roman para que complicarce si existen maneras mas sencillas para solucionar mi caso, claro, un store procedure podria ser mas optimo para otros casos
__________________
Una forma de alcanzar tus metas es ayudando a otros a alcanzar las suyas

Última edición por roman fecha: 18-01-2006 a las 21:23:43.
Responder Con Cita
  #15  
Antiguo 18-01-2006
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Prueba la consulta que hace uso de la UDF, es más simple de implementar... jejeje
Responder Con Cita
  #16  
Antiguo 18-01-2006
Avatar de el_barto
el_barto el_barto is offline
Miembro
 
Registrado: may 2005
Ubicación: Bogota Colombia
Posts: 533
Poder: 19
el_barto Va por buen camino
Te prometo que lo intentare
__________________
Una forma de alcanzar tus metas es ayudando a otros a alcanzar las suyas
Responder Con Cita
  #17  
Antiguo 18-01-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
el_barto

De tu último mensaje eliminé la cita al código de maeyanes. Te pido que no cites mensajes completos, hace más difícil la lectura.
Responder Con Cita
  #18  
Antiguo 19-01-2006
cuburu cuburu is offline
Miembro
 
Registrado: mar 2005
Posts: 63
Poder: 20
cuburu Va por buen camino
Post

Cita:
Empezado por el_barto
store procedure perfect ¡¡¡¡ lo probe mas no lo implemente en mi reporte dado que como lo explique anteriormente es muy facil desde crystal reports, y como dice roman para que complicarce si existen maneras mas sencillas para solucionar mi caso, claro, un store procedure podria ser mas optimo para otros casos
Pues yo pienso que si puedes dejar todo el trabajo pesado a la BD y programas lo minimo indispensable es mejor.

Cuando manejas esta clase de condiciones por medio de Store Procedures, Views o cualquer caso y que la BD puede hacerlo, es mejor dejarselo a ella.

La respuesta que doy es muy simple.

Qué pasaria si de repente te dicen que necesita hacerse una reestructuración de todo el programa o se necesita hacer otra aplicación en un lenguaje diferente para trabajar los mismos datos en la misma BD. Pues ya no tendrías que volver a codificar este tipo de operaciones en la otra aplicación pues ya las tienes dentro de la misma BD. Solo tendrías que llamarlas.

Ademas, cuando se trabaja con grandes volumenes de información, es mejor dejar todo el asunto de integridad referencial, updates, commits, rollbacks y todas esas cosas a la BD y no tratar de controlarlas desde nuestra aplicación..... despues de todo, para que un negocio funcione cada quien debe de hacer su trabajo, y si la BD nos puede ahorrar dolores de cabeza tratando de contener posibles errores en la BD pues hagamoslo.
Responder Con Cita
  #19  
Antiguo 19-01-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por cuburu
Pues yo pienso que si puedes dejar todo el trabajo pesado a la BD y programas lo minimo indispensable es mejor.
Al César lo que es del César...

Trabajo pesado habrá de ambos lados, aplicación y servidor.

Cita:
Empezado por cuburu
Cuando manejas esta clase de condiciones por medio de Store Procedures, Views o cualquer caso y que la BD puede hacerlo, es mejor dejarselo a ella.
No sé si una UDF pueda considerarse parte del servidor, pero en el caso de MySql, las funciones mencionadas sí que lo son.

Cita:
Empezado por cuburu
Qué pasaria si de repente te dicen que necesita hacerse una reestructuración de todo el programa o se necesita hacer otra aplicación en un lenguaje diferente para trabajar los mismos datos en la misma BD. Pues ya no tendrías que volver a codificar este tipo de operaciones en la otra aplicación pues ya las tienes dentro de la misma BD. Solo tendrías que llamarlas.
De acuerdo. Pero toma en cuenta que no todas las aplicaciones son susceptibles de cambios tan drásticos y hay que tener cuidado con "¿qué pasa si...?" pues puede uno terminar complicandose la vida por una supuesta futura necesidad. Trabajo en un sistema hecho sobre MySql, y ha funcionado bien durante más de tres años. Y aún cuando he pensado en la posibilidad de migrar a FireBird, mientras no lo haga, me siento cómodo con él y todas las funciones predefinidas que incluye; no las cambiaría en aras de una estandarización o hipotéticos reajustes futuros.

// Saludos
Responder Con Cita
  #20  
Antiguo 21-01-2006
cuburu cuburu is offline
Miembro
 
Registrado: mar 2005
Posts: 63
Poder: 20
cuburu Va por buen camino
En eso tienes toda la razón. Es incoherente tratar de controlar algo que no sabes si se va apresentar o no.

Quizas el error mio fue darle un enfoque basado en experiencia propia. Por lo regular trabajo con sistemas de esta indole y es más sencillo realizar este tipo de "maniobras".
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
Delphi y SQL server 2000 whiti MS SQL Server 19 17-05-2005 22:06:54
Programa para conexion con servidor SQL en red RyAr MS SQL Server 2 17-02-2005 01:34:36
Como hacer un Query con dbf y Sql Leomar SQL 0 02-02-2005 14:28:52
Error en SQL tgsistemas SQL 1 30-12-2003 00:04:45


La franja horaria es GMT +2. Ahora son las 17:34:51.


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