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.