Ver Mensaje Individual
  #1  
Antiguo 22-12-2018
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Reputación: 21
mRoman Va por buen camino
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.
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita