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 14-11-2006
Avatar de magnu9
magnu9 magnu9 is offline
Miembro
 
Registrado: nov 2006
Posts: 84
Poder: 18
magnu9 Va por buen camino
Reporte (Desde : Hasta)

Buen Días a todos.

Una pequeña duda, tengo un form desde el cual pido cierta manera de reporte. Al decirles que me busque dese un codigo hasta otro, me lo hace muy bien, pero cuando les digo desde el nombre tal hasta nombre x, no resulta nada.
Responder Con Cita
  #2  
Antiguo 14-11-2006
Avatar de magnu9
magnu9 magnu9 is offline
Miembro
 
Registrado: nov 2006
Posts: 84
Poder: 18
magnu9 Va por buen camino
Observen esto..

Código Delphi [-] FreportCliente.qryCliente.SQL.Add(' Select codcli,nomcli,apelcli, dircli, telcli,cedcli, fecha, estado, codzon, facturacredito, balcli, direc_envio From cliente ');


FreportCliente.qryCliente.SQL.Add(' WHERE cliente.codcli >='''+(edCodigo1.Text)+''' AND cliente.codcli <= '''+(edCodigo2.Text)+'''');





Osea si cambio a este codigo codcli es el codigo del cliente, nombre_cli nombre del cliente..


Código Delphi [-] FreportCliente.qryCliente.SQL.Add(' Select codcli,nomcli,apelcli, dircli, telcli,cedcli, fecha, estado, codzon, facturacredito, balcli, direc_envio From cliente ');
FreportCliente.qryCliente.SQL.Add(' WHERE cliente.NOMCLI >='''+(edNombre1.Text)+''' AND cliente.nombre_CLI <= '''+(edNombre2.Text)+'''');





Osea "Desde codigo x hasta codigo y" muy bien", pero "Desde nombre x hasta nombre y" no me hace nada,

Nota: si colocó el mismo nombre si lo hace bien...
Responder Con Cita
  #3  
Antiguo 14-11-2006
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola magnu9
Mira la diferencia:
Hecho por ti, fijate en el campo rojo:
Código Delphi [-]
FreportCliente.qryCliente.SQL.Add(' WHERE cliente.NOMCLI >='''+(edNombre1.Text)+''' AND cliente.nombre_CLI <= '''+(edNombre2.Text)+'''');
Creo que son dos campos diferentes, deberia ser asi:
Fijate en los campos verdes.
Código Delphi [-]
FreportCliente.qryCliente.SQL.Add(' WHERE cliente.nombre_CLI >='''+(edNombre1.Text)+''' AND cliente.nombre_CLI <= '''+(edNombre2.Text)+'''');
Supongo que esto es lo que pasa.
Saludos
Responder Con Cita
  #4  
Antiguo 14-11-2006
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Podria quedar mejor y mas manejable tu consulta si usas parametros, por ejemplo:

Código Delphi [-]
FreportCliente.qryCliente.SQL.Add(' SELECT codcli,nomcli,apelcli, dircli, te lcli,cedcli, fecha, estado, codzon, facturacredito, balcli, direc_envio From cliente ');
 
FreportCliente.qryCliente.SQL.Add(' WHERE cliente.codcli >=:desde AND cliente.codcli <= :hasta');
 
FreportCliente.qryCliente.ParamByName('desde').AsString :=EdNombre1.Text;
FreportCliente.qryCliente.ParamByName('hasta').AsString :=EdNombre2.Text;

otra variante es usar BETWEEN en vez de >= <=:

Código Delphi [-]
FreportCliente.qryCliente.SQL.Add(' SELECT codcli,nomcli,apelcli, dircli, te lcli,cedcli, fecha, estado, codzon, facturacredito, balcli, direc_envio From cliente ');
 
FreportCliente.qryCliente.SQL.Add(' where codcli BETWEEN :desde AND :hasta');
 
FreportCliente.qryCliente.ParamByName('desde').AsString :=EdNombre1.Text;
FreportCliente.qryCliente.ParamByName('hasta').AsString :=EdNombre2.Text;

El error en tu query es que usas dos campos distintos en la comparacion cuando solo debe ser uno. Si traducimos a lenguaje "humano" tu query queda:

"Dame todos los registros en donde codcli es mayor al numero que te doy y el nombre sea menor o igual al otro numero que te doy"

Obviamente en esta condicion pueden caer muchos registros, por ejemplo si aplicas tu query a una tabla como esta y en Edtext1='1' EdText2='5':
Código:
codcli        nombre_cli
1              Alfa
2              Algaguara
3              Bravo 
4              Charlie
5              Delta
no te devuelve nada porque no hay ningun registro cuyo codigo sea mayor que uno y al mismo tiempo el nombre sea "menor" que 5...

En el query que te puse puedes cambiar el campo sobre el que quieres hacer la búsqueda sin ningun problema ya que los parametros te garantizan que se construya correctamente la instruccion SQL.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #5  
Antiguo 15-11-2006
Avatar de magnu9
magnu9 magnu9 is offline
Miembro
 
Registrado: nov 2006
Posts: 84
Poder: 18
magnu9 Va por buen camino
Saludo...

He intentado la anterior respuesta, me es imposible utilizar los parametros.. seria bueno que me dieran una mano en este caso de como lo uso...

Estuve leyendo sobre parameters en el libro la Cara Oculta 4, pero entiendo que debo hacer una funcion ParaByName()...

En mis intentos, cuando coloco FreportCliente.qryCliente.ParamByName esta propiedad no
me sale al colocar el punto solo me da opción de Parameters,
si coloco FreportCliente.qryCliente.Parameters.ParamByName(),
en este caso si me da a escoger el ParamByName(),
luego el asString pero no me da esta opcion sale el asString..
Saludos a todos.
Responder Con Cita
  #6  
Antiguo 15-11-2006
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola magnu9
Pon codigo, a ver que hago, no se de que se trata.
Saludos
Responder Con Cita
  #7  
Antiguo 15-11-2006
Avatar de magnu9
magnu9 magnu9 is offline
Miembro
 
Registrado: nov 2006
Posts: 84
Poder: 18
magnu9 Va por buen camino
Saludo...

Es el que coloco AsiRaid, antes de mis dudas observaras el codigo.
Responder Con Cita
  #8  
Antiguo 15-11-2006
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
No me dices que reporteador ocupas (QReport, FastReport, etc.), de todas formas cualquier descendiente de TQuery contiene la propiedad "Parameters" y el metodo ParamByName(name:string) que devuelve el parametro con el nombre especificado. Notese que no puedes poner solo ParamByName().AsString...es necesario indicar que parametro quieres accesar.

Por ejemplo: Si haces este query:

Código Delphi [-]
FreportCliente.qryCliente.SQL.Clear; // Es necesario asegurarse que queda en blanco
FreportCliente.qryCliente.SQL.Add(' select * from cliente where codcli=:codigoabuscar');
Delphi en automático crea el parametro "codigoabuscar" y lo agrega al Query, Por ejemplo digamos que quieres buscar el codigo de cliente 100; entonces hacemos esto:
Código Delphi [-]
FreportCliente.qryCliente.ParamByName('codigoabuscar').AsInteger :=100;
Cuando corras el Query, Delphi en realidad genera la siguiente instruccion SQL
Código SQL [-]
 SELECT * FROM CLIENTE WHERE CODCLI=100
Es decir, sustituye el parametro que habiamos puesto por el valor que le dimos.
Si quisieras otra consulta nueva con otro numero, solo necesitas volver a cambiar el parametro con ParamByNAme..el query ya no lo tocas.

Ventajas? Te evitas esos engorros de concatenar cadenas 'select * from cli where nombre='+ mydato + ' and' + myotrodato...etc.

Además no necesitas hacer la conversion a texto para poder concatenar la instruccion ni escribir varias veces el mismo query.

Solo usas AsString, AsDateTime, AsInteger, AsCurrency, etc.. segun el tipo de datos que quieras guardar en tu parametro. Delphi hace cualquier conversion al generar la sentencia SQL

Si pones mas datos te podemos ayudar mejor
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #9  
Antiguo 15-11-2006
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola magnu9
Esto de los parametros no tiene gran ciencia.
AzidRain te esta dando una opcion de hacerlo, creo, si no me equivoco depende de la base de datos que uses.
Por ejemplo:
AzidRain lo hace asi:
Código Delphi [-]
FreportCliente.qryCliente.SQL.Add(' SELECT codcli,nomcli,apelcli, dircli, te lcli,cedcli, fecha, estado, codzon, facturacredito, balcli, direc_envio From cliente ');
 
FreportCliente.qryCliente.SQL.Add(' WHERE cliente.codcli >=:desde AND cliente.codcli <= :hasta');
 
FreportCliente.qryCliente.ParamByName('desde').AsString :=EdNombre1.Text;
FreportCliente.qryCliente.ParamByName('hasta').AsString :=EdNombre2.Text;
Esta bastante claro.
Particularmente uso los parametros diferente, insisto creo que es por la base de datos que uso (access).
Lo hago asi:
Código Delphi [-]
FreportCliente.qryCliente.SQL.Add(' SELECT codcli,nomcli,apelcli, dircli, te lcli,cedcli, fecha, estado, codzon, facturacredito, balcli, direc_envio From cliente ');
 
FreportCliente.qryCliente.SQL.Add(' WHERE cliente.codcli >=[desde] AND cliente.codcli <=[hasta]');
 
FreportCliente.qryCliente.Parameters[0].Value :=EdNombre1.Text;
FreportCliente.qryCliente.Parameters[1].Value :=EdNombre2.Text;
Ademas coloco en el inspector de objetos en el query (qryCliente) en parameters los dos parametros.
Desde. parametro 0 y hasta parametro 1.
Creo que esto te saldra, revisalo y me cuentas.
Saludos
Responder Con Cita
  #10  
Antiguo 16-11-2006
Avatar de magnu9
magnu9 magnu9 is offline
Miembro
 
Registrado: nov 2006
Posts: 84
Poder: 18
magnu9 Va por buen camino
Saludo Caral...

Me salio muy bien lo que me dijiste anteriormente... no envio la manera que me quedaron, por que he dejado todo en casa hoy... veremos si luego hay dudas... ya que no tuve mucho tiempo para revisarlo bien ayer.
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
como sumar valores desde el inicio de una tabla hasta el fin de esta. andre navarrete Conexión con bases de datos 2 13-08-2006 16:47:36
Crear reporte desde un formulario jose_c27 Impresión 2 01-11-2005 18:13:45
imprimir reporte desde codigo Mario1980 Impresión 0 20-01-2005 13:45:32


La franja horaria es GMT +2. Ahora son las 19:57:16.


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