PDA

Ver la Versión Completa : Insert continuo entre dos fechas


enecumene
13-07-2008, 01:17:06
Hola compañeros, quería preguntar lo siguiente, ¿se puede hacer un insert continuo entre dos fechas?, o sea, como una especie de ciclo o bucle, por ejemplo, quiero insertar mi nombre entre dos fechas:

las fechas serían entre el 12/07/2008 y 15/07/2008, este sería el resultado.

Nombre Fecha

Fernando 12/07/2008
Fernando 13/07/2008
Fernando 14/07/2008
Fernando 15/07/2008

¿cómo lo podría hacer?, ¿alguna idea?

Saludos.

AzidRain
13-07-2008, 01:46:45
tu mismo te contestas en tu propia pregunta.

enecumene
13-07-2008, 01:55:48
tu mismo te contestas en tu propia pregunta.

Sé que es con un ciclo, lo que pasa es que nunca lo he hecho con un rango de dos datos, es muy fácil hacer algo linea por linea de forma individual, por eso abrí el hilo, en mi mente no me llega la forma de hacerlo, lo que tengo en un form son dos datetimepicker donde selecciono los dos datos, y hacer un insert a partir de ese rango. :confused: :confused:

Disculpa mi ignorancia, traté de encontrarlo en el foro pero no lo hallé, es la primera vez que se me presenta esa situación.

Saludos.

Caral
13-07-2008, 02:00:33
Hola
Esta bien, por esta vez se te perdona.
Saludos

enecumene
13-07-2008, 02:02:28
Hola
Esta bien, por esta vez se te perdona.
Saludos

Gracias amigo :o

Caral
13-07-2008, 02:05:07
Hola
Amigo sinceramente no entiendo lo que pretendes.
Si quieres hacer un insert, no deberias usar una clausula where sin mucho problema?.
No se, no crees que un bucle o cliclo o esas cosas es demasiado?.
Saludos

enecumene
13-07-2008, 02:27:09
:D :D, no amigo, ojalá fuera así de fácil, estoy haciendo una aplicación de control de asistencia de empleados, hay una parte donde se asigna las vacaciones, en este momento debo registrar dia por dia las vacaciones y eso es algo muy tedioso, sólo quiero que se registre los datos como una especie de ciclo entre dos fechas, si yo me voy de vacaciones desde hoy 12/07/2008 hasta el 15/07/2008, necesito que se inserte de manera automática los dias comprendidos entre esas dos fechas, no sé si todavía me hago entender, por favor hagamelo saber que trataré de explicarlo mejor.

Saludos.

Caral
13-07-2008, 02:33:30
Hola
Pues no se, como hace ya unos meses que no programo, pues se me esta olvidando.
Pero:
Inset entre fecha1 y fecha2 where usuario = X.
Ya sabes, traducido a sql (es que ahora no tengo ganas de pensar), pero esa es la idea.:D:D
De que se puede se puede.:)
Saludos

enecumene
13-07-2008, 02:36:36
Hola
Pues no se, como hace ya unos meses que no programo, pues se me esta olvidando.
Pero:
Inset entre fecha1 y fecha2 where usuario = X.
Ya sabes, traducido a sql (es que ahora no tengo ganas de pensar), pero esa es la idea.:D:D
De que se puede se puede.:)
Saludos

A ver, ¿de donde saco la función entre?,:D :D, en broma veré como hago, gracias.

Saludos.

Caral
13-07-2008, 02:38:49
Hola
Código SQL [-] (http://www.clubdelphi.com/foros/#)Insert Between +DateTimePicker1.Date+ and +DateTimePicker2.Date+ Where Usuario = Tu

Saludos

enecumene
13-07-2008, 03:13:57
Hola
Código SQL [-] (http://www.clubdelphi.com/foros/#)Insert Between +DateTimePicker1.Date+ and +DateTimePicker2.Date+ Where Usuario = Tu

Saludos

Hola, me es imposible usar esa sentencia ya que está incompleta, no indicas los campos ni tablas a insertar :D.

Bueno, intenté hacer algo como esto, pero dada mi ignorancia no tenía que funcionar :rolleyes: :D:

procedure TForm1.Button1Click(Sender: TObject);
var I: TDateTime;
begin
for I := StrToDate(Edit1.Text) to StrToDate(Edit2.Text) - 1 do
begin
ZQuery1.SQL.Text := 'Insert Into PRUEBA(REGNO,EMPID,EMPLEADO,FECHA) VALUES(NULL,1,:NOM,:FEC)';
ZQuery1.ParamByName('NOM').AsString := 'Fernando';
ZQuery1.ParamByName('FEC').AsDate := I;
ZQuery1.ExecSQL;
end;
end;

No me funcionó ya que para un ciclo for debe ser de tipo ordinal.

Saludos.

roman
13-07-2008, 07:14:05
Aquí un ejemplo, suponiendo que las fechas inicial y final las tomas de sendos DateTimePicker:


var
Fecha, FechaFinal: TDate;

begin
ZQuery1.SQL.Text := 'insert into tabla (empleado, fecha) values(:empleado, :fecha)';

Fecha := DateTimePicker1.Date;
FechaFinal := DateTimePicker2.Date;

while Fecha < FechaFinal do
begin
ZQuery1.ParamByName('empleado').AsString := 'fernando';
ZQuery1.ParamByName('fecha').AsDate := Fecha;
ZQuery1.ExecSQL;

Fecha := Fecha + 1;
end;
end;


// Saludos

donald shimoda
13-07-2008, 07:52:43
Aquí un ejemplo, suponiendo que las fechas inicial y final las tomas de sendos DateTimePicker:

Creo que esta solución mas segura sobre el tipo de dato manejado

var
Fecha, FechaFinal: TDate;

begin
ZQuery1.SQL.Text := 'insert into tabla (empleado, fecha) values(:empleado, :fecha)';

Fecha := DateTimePicker1.Date;
FechaFinal := DateTimePicker2.Date;

while (Fecha < FechaFinal) do
begin
ZQuery1.ParamByName('empleado').AsString := 'fernando';
ZQuery1.ParamByName('fecha').AsDate := Fecha;
ZQuery1.ExecSQL;
IncDay(Fecha,1);
end;
end;

Mas detalles sobre la función IncDay aqui (http://www.delphibasics.co.uk/RTL.asp?Name=IncDay)

HTH

enecumene
13-07-2008, 16:28:17
Muchas gracias Roman eso era lo que estaba buscando me funcionó de pelos, amigo Donald tu propuesta no me funcionó, porque con la función IncDay lo que hace es que me repite la variable fecha tantas veces posible :eek:, pareciera que no tuviera fin :p. Ahora veré como excluyo los dias feriados y fin de semanas, cualquier cosa les comento.

Saludos.

roman
13-07-2008, 16:35:51
Lo de IncDay sí funciona, de hecho IncDay lo único que hace es sumar el segundo parámetro a la fecha que se le pasa. El problema que tuviste se debe a que IncDay es una función así que debes usarla así:


Fecha := IncDay(Fecha, 1);


Tal como estaba, el valor de Fecha nunca cambia y el ciclo no termina.

// Saludos

enecumene
13-07-2008, 16:38:15
¡Changos! (Como ContraVeneno :p), tienes razón roman no me había fijado en ese detalle.

Saludos.

donald shimoda
13-07-2008, 17:09:18
Lo de IncDay sí funciona, de hecho IncDay lo único que hace es sumar el segundo parámetro a la fecha que se le pasa. El problema que tuviste se debe a que IncDay es una función así que debes usarla así:

Código Delphi [-] (http://www.clubdelphi.com/foros/#)Fecha := IncDay(Fecha, 1);


Tal como estaba, el valor de Fecha nunca cambia y el ciclo no termina.

// Saludos

Tengan paciencia, eran las 4 de la mañana. ;)
Saludos.

Caro
14-07-2008, 04:32:22
Hola enecumene, para saber los fines de semana puedes utilizar la función DayOfTheWeek de DateUtilis, si te devuelve 6 o 7, es porque es sabado o domingo.

Saluditos