Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Novato en SQL (https://www.clubdelphi.com/foros/showthread.php?t=45215)

mgaytan 26-06-2007 18:16:30

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.

linuz 26-06-2007 18:44:21

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.

Delphius 26-06-2007 18:44:23

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.

mgaytan 26-06-2007 22:08:37

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

Caral 26-06-2007 22:17:18

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

mgaytan 26-06-2007 22:29:59

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.

ContraVeneno 26-06-2007 23:09:21

¿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.

mgaytan 27-06-2007 01:21:18

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;


Caral 27-06-2007 03:14:40

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

ContraVeneno 27-06-2007 16:20:55

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

mgaytan 28-06-2007 23:02:49

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.


La franja horaria es GMT +2. Ahora son las 14:27: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