Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Llenar horarios en combobox (https://www.clubdelphi.com/foros/showthread.php?t=93662)

mRoman 22-12-2018 19:29:31

Llenar horarios en combobox
 
Hola amigos...

Continuando con un proyecto q hace poco inicie. Delphi6-Firebird 2.0

Tengo el siguiente problema al llenar un combobox con datos de una tabla (horario). Explico:

La tabla "horario" la lleno desde delphi usando un formulario, un procedimiento almacenado y con el siguiente código:

Código Delphi [-]
procedure TfrmFechaCritica.btnEjecutarClick(Sender: TObject);
begin
   if Application.MessageBox('Estas seguro de ejectuar el proceso','Pregunta',mb_OkCancel+mb_IconQuestion)=idOk then
   begin
       try
           spCrearFechasCriticas.Close;
           spCrearFechasCriticas.ParamByName('i_hora_ini').AsTime:=StrToTime(cbxHoraIni.Items[cbxHoraIni.ItemIndex]);
           spCrearFechasCriticas.ParamByName('i_hora_fin').AsTime:=StrToTime(cbxHoraFin.Items[cbxHoraFin.ItemIndex]);
           spCrearFechasCriticas.ParamByName('i_Maximo_pedidos').AsInteger:=StrToInt(mskMaxPedidos.Text);
           spCrearFechasCriticas.ExecProc;
           ModuloBD.trsDatos.Commit;
           Application.MessageBox('Procesado terminado satisfactoriamente','Aviso',mb_ok+mb_IconInformation);
       except
              on E:Exception do
              begin
                 ShowMessage(E.Message);
              end;
       end;
   end;
   LimpiarPantalla();
end;

Codigo SQL del SP:
Código SQL [-]
CREATE PROCEDURE SP_CREAR_FECHAS_CRITICAS (
    nmes numeric(2,0),
    ndia numeric(2,0),
    thora_ini time,
    thora_fin time,
    nmax_pedidos numeric(2,0),
    nintervalo numeric(2,0))
as
declare variable vregistros numeric(3,0);
begin
     select count(*)
     from FECHA_CRITICA a
     where a.mes=:nmes
       and a.dia=:ndia
     into :vregistros;
     if (:vregistros is null) then
     begin
        execute procedure sp_insertar_fechas :nmes,:ndia,:thora_ini,:thora_fin,:nmax_pedidos,:nintervalo;
     end Else
     begin
         delete
         from fecha_critica b
         where b.mes=:nmes
           and b.dia=:ndia;
         execute procedure sp_insertar_fechas :nmes,:ndia,:thora_ini,:thora_fin,:nmax_pedidos,:nintervalo;
     end
end

Como podrán observar tengo un procedimiento almacenado q es llamado desde SP_CREAR_FECHAS_CRITICAS, se los agrego:
Código SQL [-]
CREATE PROCEDURE SP_INSERTAR_FECHAS (
    i_hora_ini time,
    i_hora_fin time,
    i_maximo_pedidos numeric(2,0))
as
declare variable v_tot_horas numeric(2,0);
declare variable v_num numeric(2,0);
declare variable v_next_hora time;
declare variable v_hora_ini time;
declare variable v_num2 numeric(2,0);
begin
    delete
    from HORARIO;
    v_tot_horas=(:i_hora_fin-:i_hora_ini)/(60*60);
    v_next_hora=:i_hora_ini;
    v_num=1;
    While (v_num <= v_tot_horas) do
    begin
       v_num2=1;
       While (v_num2<=:i_maximo_pedidos) do
       begin
          insert into horario(HORA) values (:v_next_hora);
          v_next_hora=v_next_hora+(3600/:i_maximo_pedidos);
          v_num2=:v_num2+1;
       end
       v_num=:v_num+1;
    end
end

Bien...como que mucho "circo" para lo que sigue: El problema que tengo, es al momento de llenar un Combobox con los horarios generados de la tabla "horario".....sobre todo cuando llega al horario 13:00:00, en el combobox se registra 01:00:00 y cuando grabo el dato a la tabla de pedidos, se graba 01:00:00 am !!!....NO ES POSIBLE a la 1 de la madrugada entregar un pedido !!!.

Bueno el caso es que como le hago para q se registre 13:00:00 en el combobox??...

Porqué lleno el combo así y no uso otro componente como el DBLookUpComboBox, para enlazar el DataSet a este ultimo??, lo que pasa es que necesito excluir el o los horarios ya registrados del dia que se harán (fecha_entrega) entregas:

El siguiente código hace lo q menciono en el párrafo anterior: (lo tengo en un componente TIBQuery)
Código SQL [-]
select a.hora
from horario a
where a.hora not in (select CAST(b.fecha_hora_entrega as TIME)
                     from pedido b
                     where CAST(b.fecha_hora_entrega as DATE) = :fecha  )

Gracias por su tiempo y comentarios.

Casimiro Notevi 22-12-2018 22:11:52

¿Aparte de todo, qué hace ese commit ahí?


Cita:

spCrearFechasCriticas.Close;
spCrearFechasCriticas.ParamByName('i_hora_ini').AsTime:=StrToTime(cbxHoraIni.Items[cbxHoraIni.ItemIndex]);
spCrearFechasCriticas.ParamByName('i_hora_fin').AsTime:=StrToTime(cbxHoraFin.Items[cbxHoraFin.ItemIndex]);
spCrearFechasCriticas.ParamByName('i_Maximo_pedidos').AsInteger:=StrToInt(mskMaxPedidos.Text);
spCrearFechasCriticas.ExecProc;
ModuloBD.trsDatos.Commit; // ¿ Qué hace esto aquí ? :/
Application.MessageBox('Procesado terminado satisfactoriamente','Aviso',mb_ok+mb_IconInformation);

mRoman 22-12-2018 23:58:43

Cita:

Empezado por Casimiro Notevi (Mensaje 530142)
¿Aparte de todo, qué hace ese commit ahí?

Si verdad....jajaja...eso de andar enfocado en otras cosas...en esa parte del código tenia otra cosa que no me estaba funcionando y opté por hacerlo con un procedimiento almacenado y no borre esa linea...

Gracias por la observación.


La franja horaria es GMT +2. Ahora son las 19:47:46.

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