Estimaos:
Tengo este problema desde hace tiempo, lo fui solucioando cambiando la forma de ejecutarlo, pero ahora necesito que sea como lo habia echo cuando usaba el BDE.
Saque todos los comp. de coneccion con BDE y ahora uso los DBX.
Uso D-2007 con Interbase 7.5. Tengo el siguiente SP:
Código SQL
[-]
CREATE PROCEDURE AGREGAR_MOV_CAJA_EFECTIVO_CERRADA (
ID_CPBTE INTEGER,
TIPO_COMPROB VARCHAR(2),
CLASE_COMPROB VARCHAR(2),
NROCPBTE VARCHAR(13),
ID_CUENTA_CAJA INTEGER,
ID_CAJA INTEGER,
FECHA_MOVIMIENTO DATE,
DEBE NUMERIC(15,3),
HABER NUMERIC(15,3),
TIPOOPERACION VARCHAR(1))
AS
DECLARE VARIABLE FECHA_DE_CAJA DATE;
DECLARE VARIABLE ID_MOV_CAJA_AUX INTEGER;
begin
select c.fecha_incio from caja_cab c
where c.id_cuenta_caja=:id_cuenta_caja and c.id_caja=:ID_CAJA
into :fecha_de_caja;
id_mov_caja_aux=gen_id(next_id_caja_mov,1);
insert into caja_mov (id_mov_caja, id_caja,
fecha_caja, fecha_operacion,
tipo_operacion, tipo_comprob,
clase_comprob, id_comprobante,
nro_comprobante,debe,
haber,id_tpago,
id_fpago,unidades,
cotizacion,id_cuenta_caja,
moneda)
values (:id_mov_caja_aux,:id_caja,
:fecha_de_caja, :fecha_movimiento,
:tipooperacion,:tipo_comprob,
:clase_comprob,:id_cpbte,
:nrocpbte,:debe,
:haber,1,
1,:debe+:haber,
1,:id_cuenta_caja,
1);
insert into mov_efectivo (id_efectivo, id_caja,
id_mov_caja, id_fpago,
cotizacion, unidades,
importe, id_cuenta_caja,
moneda)
values (gen_id(next_id_mov_efectivo,1),:id_caja,:id_mov_caja_aux,1,1,
:debe+:haber,:debe+:haber,:id_cuenta_caja,1);
end
el cual ejecuto desde mi sistema asi
:
Código Delphi
[-]
procedure TFormControlOP.spAgregaEfectivoClick(Sender: TObject);
begin
DMMain_2.SQLConectionMain.StartTransaction(DMMain_2.Td);
try
spCajaMov.Close;
spCajaMov.ParamByName('ID_CPBTE').AsInteger := CDSOPagoID_OP.AsInteger;
spCajaMov.ParamByName('TIPO_COMPROB').AsString := CDSOPagoTIPOCPBTE.AsString;
spCajaMov.ParamByName('CLASE_COMPROB').AsString := CDSOPagoCLASECPBTE.AsString;
spCajaMov.ParamByName('NROCPBTE').AsString := CDSOPagoNROCPBTE.AsString;
spCajaMov.ParamByName('ID_CUENTA_CAJA').AsInteger:= StrToInt(edIdCtaCaja.Text);
spCajaMov.ParamByName('ID_CAJA').AsInteger := StrToInt(Trim(edIdCaja.Text));
spCajaMov.ParamByName('FECHA_MOVIMIENTO').AsDate := CDSOPagoFECHA.AsDateTime;
spCajaMov.ParamByName('DEBE').AsFloat := 0;
spCajaMov.ParamByName('HABER').AsFloat := CDSOPagoTOTAL.AsFloat;
spCajaMov.ParamByName('TIPOOPERACION').AsString :='E';
spCajaMov.ExecProc;
spCajaMov.Close;
DMMain_2.SQLConectionMain.Commit(DMMain_2.Td);
except
DMMain_2.SQLConectionMain.Rollback(DMMain_2.Td);
ShowMessage('Operacion No finalizada....!');
end;
Traer;
end;
pero cuando hace el Exec, tira este error
TDBXError Unasiggned Code
si ejecuto el store desde la base de datos, funciona bien, asi que el SP no es.
Crei que era los datos que asignaba, pero no... no se donde es el error o es del componente. En algunos casos no me acepataba los parametros con una varchar de 1, pero no fue asi. Tengo un SP casi igual el cual ejecuto, sin problemas, la unica dif es que tiene un parametro menos (ID_CCUENT_CAJA). Alguien tiene alguna sugerencia...???
Luis Roldan
Mar del Plata
Argentina