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 26-06-2007
mgaytan mgaytan is offline
Miembro
 
Registrado: jun 2007
Posts: 18
Poder: 0
mgaytan Va por buen camino
Arrow Novato en SQL

Buenas chavos, soy nuevo en esto de Sql no tengo ni idea de como funciona
tengo algunas dudas espero me puedan ayudar:

tengo una tabla de la cual quiero extraer todos los registros que se encuentren en un rango de fecha dado por dos DateTimePicker (ejemplo de >=01/01/2007 a <=30/02/2007 fecha inicial y fecha final), y el numero de empleado.

mis conocimientos solo llegan hasta aqui:
Select Fecha From EMP_YEE
Where FECHA>='01/01/2007' and FECHA<='31/01/2007' and
NUMEMP='100'
order by FECHA

esto funciona pero con datos especificados. tengo que hacer que el usuario los ingrese.

Por su atencion y ayuda gracias.
Responder Con Cita
  #2  
Antiguo 26-06-2007
Avatar de linuz
linuz linuz is offline
Miembro
 
Registrado: sep 2004
Posts: 88
Poder: 20
linuz Va por buen camino
Hola

Hola mgaytan,

Veo que eres nuevo en el foro, asi que bienvenido, te recomendaria que ojearas la Guia de estilo .

Por lo que he podido ver creo que trabajas con delphi.
Para poder recoger los datos debes crear un componente, por ejemplo un "IBDataSet", y poner ahi tu consulta, donde más tarde le pasarías los parametros.

Un ejemplo:

Tu IBDataSet se llama Empleados.

Código Delphi [-]
Empleados.SelectSQL.Text = ' Select Fecha From EMP_YEE Where FECHA>= :Fecha_ini and FECHA<=:Fecha_fin and
NUMEMP=:num_emp
order by FECHA'

Código Delphi [-]
with Empleados do
  begin
    Close;
    Params.ByName('Fecha_ini').asdatetime := DateTimePicker1.date;
    Params.ByName('Fecha_fin').asdatetime := DateTimePicker2.date;
    Params.ByName('Num_emp').asinteger := strtoint(Emple.text);
    open;
  end;

Esto es una idea de lo que podrías hacer

Espero haberte ayudado.

Última edición por linuz fecha: 26-06-2007 a las 18:46:49.
Responder Con Cita
  #3  
Antiguo 26-06-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Hola, mgaytan.
Nadie nace aprendiendo, y aqui estamos para ayudarnos.
Bueno, no te molestes si no te hago toda la tarea. Yo te voy a dar unos Tips.
Lo que buscas hacer es pasarle parámetros. Un parámetro es una varible cualquiera que está precedida por los dos puntos. Por ejemplo tu consulta podría ser:

Código SQL [-]
Select Fecha From EMP_YEE
Where FECHA>=:FechaInicio and FECHA<=:FechaFin and
NUMEMP=:NumEmp
order by FECHA

Ahora, una vez pasada la consulta a la propiedad SQL debes indicar los parámetros que espera. Como tip y ayuda te digo que busces por ParamsByeName.

El motivo de que no te puedo ayudar más es que quiero hacer que tu mismo encuentre la solución (el tema ya fue ampliamente tratado aquí) y también se debe al hecho de que no tengo Delphi a mano.

Si tienes más dudas, ya sabes donde encontrar respuestas.
Saludos,

EDITO Y AGREGO:
Por lo visto, ya te dieron la solución.
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #4  
Antiguo 26-06-2007
mgaytan mgaytan is offline
Miembro
 
Registrado: jun 2007
Posts: 18
Poder: 0
mgaytan Va por buen camino
Gracias por su respuenta
perdon por mi ignarancia pero no entiendo nada de lo que me contestaron !!!
La verdad no se donde poner este codigo fuente que me mandan o que pasos tengo que hacer para que funcione.
Creo que mi nivel en delphi es muy inferior a esto.

les agradeceria si me ayudan un poco o un demaciado mas.
Gracias
Responder Con Cita
  #5  
Antiguo 26-06-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Siempre es bueno indicar la mayor cantidad de cosas que se pueda cuando se hace una pregunta, por ejemplo:
Que base de datos usas?
Con que componentes la enlazas?
La sentencia sql la quieres que se ejecute en?
Estas son preguntas que no necesitaria hacer si conociera tu proyecto, como ves, es importante especificar un poco mas.
Si nos ayudas, sera mas facil.
Ha bienvenido al Club.
Saludos
Responder Con Cita
  #6  
Antiguo 26-06-2007
mgaytan mgaytan is offline
Miembro
 
Registrado: jun 2007
Posts: 18
Poder: 0
mgaytan Va por buen camino
Gracias caral por tu sugerencia:
Bueno en primer lugar tengo una tabla que se llama EMP_YEE.Dbf
La cual guarda tareas realizadas por trabajadores.
Un ejemplo: En una jornada laboral un empledo hace 10 tareas las cuales se controlan por codigo de barras.
Al termino se captura el codigo de barras el numero de empleado la fecha. Para generar un destajo.

Fecha
Numero de empledo
codigo de barras (trabajo)

Necesito un reporte del cual yo ingrese el rango de fecha y el numero de empleado y me despliege todas las tareas realizadas en eso periodo de fechas.

Todo esto esto que te menciono lo hace el sistema relizo una busqueda cn codigo delphi y lleno una tabla 2 la cual muestro en un QuickReport. Pero esta consulta tine una desventaja es muy lenta me comentaron que con Sql se pueden hacer consultas mucho mas rapidas.
Mas sin enbargo yo no se nada de Sql es por eso que recurro a los expertos en el tema.

Disculpen si me dejo ver muy novato pero nimodo mas vale preguntar que ser ignorante.

Espero me puedan ayudar Gracias.
Responder Con Cita
  #7  
Antiguo 26-06-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
¿como haces la búsqueda? ¿como llenas la tabla?

Lo más simple sería utilizar componente TQuery para hacer la búsqueda. Necesitarías un TDataset enlazado al TQuery y además, enlazar el Dataset a un TDBGrid para mostrar los resultado. El quickreport estaría enlazado al TQuery y diseñado para que muestre los resultado.

Supongo que tendrás dos TDTPicker para seleccionar las fechas, un TEdit para ingresar el número de empleado, un botón "Buscar" y un TDBGrid par amostrar los resultados.

En el evento onclick del tu botón Buscar:

Código Delphi [-]
with TuQuery do begin
 If Active then Close;
 SQL.Clear;
 SQL.Add('Select A.Fecha, T.NombreTrabajo');
 SQL.Add('From Emp_YEE A');
 SQL.Add('join Empleados E on A.IDEmpleado = E.IDEMpleado');
 SQL.Add('join Trabajos T on E.IDTrabajo = T.IDTrabajo');
 SQL.Add('Where A.IDEmpleado = :Empleado');
 SQL.Add('And A.Fecha Between :FechaIni and :FechaFin');
 SQL.Add('Order by A.fecha, A.IDTrabajo');
 ParamByName('Empleado').AsString := Edit1.Text;
 ParamByName('FechaIni').AsDateTime := dtpFechaINi.DateTime;
 ParamByName('FechaFin').AsDateTime := dtpFechaFIN.DateTime;
 Open;
end; //with

Dos cosas:
1. Si utilizas "FECHA>=:FechaInicio and FECHA<=:FechaFin" la fecha final siempre tendrá que ser mayor a la fecha inicial, de lo contrario no te mostrará resultado. Con lo que tendrías que validar que la fecha sea correcta.

Pero, si utilizas "Fecha Between :FechaIni and :FechaFin" no tendrás que hacer esta validación ya que no importa cuál fecha es mayor a la otra.

2. Para ingresar el query puedes utilizar SQL.Text he ir agregando línea por línea, igual que como se hace con SQL.Add. La diferencia es que si utilizas SQL.Text y tienes un error, tu manejdor de base de datos siempre te dirá que tienes un error en la línea 1; y si utilizas SQL.Add, tu base de datos te dirá el número exacto de la línea donde esta el error.

P.D. Los nombres de las tablas y de los campos deberás ajustarlos a los que tu tienes.
__________________


Última edición por ContraVeneno fecha: 26-06-2007 a las 23:13:56.
Responder Con Cita
  #8  
Antiguo 27-06-2007
mgaytan mgaytan is offline
Miembro
 
Registrado: jun 2007
Posts: 18
Poder: 0
mgaytan Va por buen camino
ooorale esto si funciona caon
soloamente que si pides un rango igual no muestra nada
y empieza un dia despues es decir solamnte valua el rango mayor el igual nop
me prodian ayudar
Gracias
a puse esto para validar fecha:
Cita:
with Query1 do begin
If Active then Close;
SQL.Clear;
SQL.Add('Select FECHA');
SQL.Add('From Emp_YEE ');
SQL.Add('Where FECHA Between :FechaIni and :FechaFin');
SQL.Add('Order by FECHA');
ParamByName('FechaIni').AsDateTime := DateTimePicker1.DateTime;
ParamByName('FechaFin').AsDateTime := DateTimePicker2.DateTime;
Open;
end;
QuickRep1.Preview;
end;
Responder Con Cita
  #9  
Antiguo 27-06-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Código Delphi [-]
with Query1 do begin
If Active then Close;
SQL.Clear;
SQL.Add('Select FECHA');
SQL.Add('From Emp_YEE ');
SQL.Add('Where Fecha >=' +DateToStr(DateTimePicker1.DateTime)+' AND Fecha <=' +DateToStr(DateTimePicker2.DateTime));
SQL.Add('Order by FECHA');
Open;
end;
QuickRep1.Preview;
end;
Saludos
Responder Con Cita
  #10  
Antiguo 27-06-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
Cita:
Empezado por mgaytan
ooorale esto si funciona caon
soloamente que si pides un rango igual no muestra nada
Recuerda que el DTpicker tambien verifica la hora y tal vez sea por eso por lo que no te muestra nada. Define la hora del primer dtpicker a las 0 horas y el segundo a las 23:59 horas
__________________

Responder Con Cita
  #11  
Antiguo 28-06-2007
mgaytan mgaytan is offline
Miembro
 
Registrado: jun 2007
Posts: 18
Poder: 0
mgaytan Va por buen camino
Antes que nada gracias por su paciencia.

El sistema quedo funcionando a la perfeccion. Espero que cuando tengan alguna duda con dephli porder ayudar yo tambien.
no soy muy experto como ustedes pero si puedo con mucho gusto.

GRACIAS A TODOS.
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
novato delphijuan JAVA 2 20-03-2007 07:48:42
Novato sanrp2004 Firebird e Interbase 8 09-06-2006 21:15:00
Novato nachete Varios 6 11-03-2005 13:04:03
Pregunta de novato.. pero de muy novato CFPA86 PHP 1 08-08-2004 06:53:42
Novato fabu_dina Firebird e Interbase 1 02-07-2004 21:15:40


La franja horaria es GMT +2. Ahora son las 13:20:33.


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