Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-01-2010
dtomeysoto dtomeysoto is offline
Miembro
 
Registrado: dic 2005
Posts: 173
Poder: 20
dtomeysoto Va por buen camino
Hacer un and en una consulta SQL

Amigos, estoy haciendo una aplicación en Delphi 7. Esta aplicación hace uso de varias tablas Paradox. En una de estas tablas, tengo una con un campo de tipo SHORT llamado INFO. Me gustaria hacer una consulta que me seleccionara los registros que al hacerle un and al campo INFO con un valor entero (máscara) me retorne el valor esperado.

Por ejemplo:

SELECT *
FROM FACTURAS
WHERE (INFO AND 8) = 8

Muchas gracias.
Responder Con Cita
  #2  
Antiguo 15-01-2010
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Según creo que pides:
Código SQL [-]
SELECT *
FROM FACTURAS
WHERE INFO  = 8

Sino es así explícalo más ampliamente.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 15-01-2010
dtomeysoto dtomeysoto is offline
Miembro
 
Registrado: dic 2005
Posts: 173
Poder: 20
dtomeysoto Va por buen camino
No amigo, no es tan fácil ni tan obvio, al menos lo veo más complicado. El campo info como ya dije es un valor entero y estoy usando los bits para guardar más de una cosa en un único valor.

Por ejemplo, el bit 7 significa que la factura está cancelada, el 6 que fue impresa, el 5, el 4 y el 3 el tipo de factura, etc.

Entonces yo quiero en una consulta seleccionar todas las facturas que no están canceladas (bit 7 = 1) sin importarme el valor que puedan tener los demás bits.

Si pudiera en una sentencia SQL hacer lo siguiente:

Código SQL [-]
SELECT *
FROM FACTURAS
WHERE (INFO AND 128) = 0)

Estaría recuperando todos los registros (facturas) que el bit 7 del campo INFO lo tienen en 0.

Me expliqué mejor esta vez?

Última edición por dtomeysoto fecha: 15-01-2010 a las 17:39:49.
Responder Con Cita
  #4  
Antiguo 15-01-2010
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Es que eso en SQL no te va a funcionar al menos en Paradox.

Hubiese sido mejor en el caso de persistir en la idea de guardar en un solo campos tantas cosas utilizar un campo texto de ancho 8, en el que solamente sean válidos los 0 y 1, de esta manera con la función extract te sería fácil hacer lo que quieres.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #5  
Antiguo 15-01-2010
dtomeysoto dtomeysoto is offline
Miembro
 
Registrado: dic 2005
Posts: 173
Poder: 20
dtomeysoto Va por buen camino
Bueno creo que voy a darme por vencido y probar algo como lo que me dices o sino poner los campos según sean mis necesidades aunque esto uncremente el tamaño de la base de datos.

Quería optimizar el espacio porque esta aplicación es para un PC algo viejito pero bueno no creo que pasando yo tanto trabajo logre mucho.

Gracias a todos, byeee
Responder Con Cita
  #6  
Antiguo 15-01-2010
Avatar de afunez2007
afunez2007 afunez2007 is offline
Miembro
 
Registrado: oct 2007
Ubicación: La Ceiba, Honduras
Posts: 170
Poder: 18
afunez2007 Va por buen camino
Lightbulb

Oye eso lo estas complicando mas de lo que deberias, normalmente ese tipo de manejos se hace con un campo de estado, ya sea integer o un campo de tipo varchar de un solo caracter, y guardas los estados por ejemplo:
A=activa
C=cancelada
E=emitida
D=Devuelta
o los que necesites, y luego con un simple where podrias hace lo que necesitas.
Es altamente recomendable que el estado quede independizado del tipo de facturas, y asi facilmente podrias combinar 2 wheres, por ejemplo asumiendo
que tipo 1= Contado y 2=Credito
podria ser asi:
Código SQL [-]
SELECT *FROM FACTURAS WHERE TIPO=1 AND STATUS='E'
Con eso filtrarias las facturas de contado que fueron impresas.
Espero te sirvan estas ideas.

Saludos
__________________
Si robas, roba un beso, si mientes que sea por amor y si engañas que sea a la muerte!!
Responder Con Cita
  #7  
Antiguo 15-01-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 18
rgstuamigo Va por buen camino
Arrow

Cita:
Empezado por dtomeysoto Ver Mensaje
Bueno creo que voy a darme por vencido y probar algo como lo que me dices o sino poner los campos según sean mis necesidades aunque esto uncremente el tamaño de la base de datos.

Quería optimizar el espacio porque esta aplicación es para un PC algo viejito pero bueno no creo que pasando yo tanto trabajo logre mucho.

Gracias a todos, byeee
Por que no hacer esta consulta:
Código SQL [-]
SELECT *
FROM FACTURAS
WHERE INFO >=128 and INFO <=255
Explicacion:
Todos los numero entre 128 y 255 tienen el bit # 7 con uno(1).
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7

Última edición por rgstuamigo fecha: 15-01-2010 a las 20:39:15.
Responder Con Cita
  #8  
Antiguo 18-01-2010
[fer21unmsm] fer21unmsm is offline
Miembro Premium
 
Registrado: dic 2005
Ubicación: Lima
Posts: 627
Poder: 20
fer21unmsm Va por buen camino
Entiendo más o menos lo que deseas hacer, me parece que son operaciones con bits yo en sql he usado esto

Ejemplo:
Código SQL [-]
select rper.dni_ruc, rper.nom_usu, rper.clave, ascii(macc.nivel_acceso) & ascii(rol.nivel_acceso)
 from rol_persona 
rper left join roles rol on (rol.id_rol=rper.id_rol) left join mod_acceso macc
 on ((ascii(macc.nivel_acceso) & ascii(rol.nivel_acceso))=ascii(macc.nivel_acceso))
 where macc.id_modulo=@id_mod and rper.dni_ruc=@id_usuario
quizas puedas usar el mismo ampersand pero en sql tuve que usar el valor ascii

saludos.
__________________
"La información tiene más valor cuando se comparte"

Última edición por marcoszorrilla fecha: 18-01-2010 a las 19:07:51.
Responder Con Cita
  #9  
Antiguo 18-01-2010
dtomeysoto dtomeysoto is offline
Miembro
 
Registrado: dic 2005
Posts: 173
Poder: 20
dtomeysoto Va por buen camino
Y esto se puede hacer en tablas paradox?
Cual es el significado del @?
Responder Con Cita
  #10  
Antiguo 21-01-2010
[fer21unmsm] fer21unmsm is offline
Miembro Premium
 
Registrado: dic 2005
Ubicación: Lima
Posts: 627
Poder: 20
fer21unmsm Va por buen camino
Cita:
Empezado por dtomeysoto Ver Mensaje
Y esto se puede hacer en tablas paradox?
Cual es el significado del @?
Hola el @ son los variables que le paso a la consulta, nunca he usado paradox, pero si hace uso de transact-sql entonces quizá sea válido lo que te pasé

en el caso de la instrucción dentro de la consulta

(ascii(macc.nivel_acceso) & ascii(rol.nivel_acceso), el ampersand hace la operacion and (lógico) a nivel de bits.

Saludos.
__________________
"La información tiene más valor cuando se comparte"

Última edición por fer21unmsm fecha: 21-01-2010 a las 21:03:49.
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
hacer consulta en un query Carlos León Conexión con bases de datos 2 22-09-2008 10:06:51
hacer un SUM de una consulta ya hecha egarc Conexión con bases de datos 9 27-05-2008 09:10:43
Problema al hacer consulta SQL pabliyo SQL 6 29-01-2008 10:56:17
hacer una consulta de eliminacion JODELSA SQL 6 07-06-2005 16:01:36


La franja horaria es GMT +2. Ahora son las 01:04:50.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi