killaskto
06-11-2006, 16:45:01
Hola!
Tengo una gran duda sobre como invocar un procedimiento almacenado desde delphi....:confused:
Estoy trabajando sobre delphi 7 y usando Oracle 10g XE, la conexion la hago mediante un AdoConnection y trato de usar un AdoStoredProc que vincule con el AdoConnetion, ya aparecen los procedimientos de la base, no aparecian parametros y cuando le di en Parameter automaticamente los creo. Estos dos parametros uno In y otro Out, el primero de tipo ftString (numericscale=0,precision=0,size=0)y el segundo ftBDC (numericscale=0,precision=15,size=0).
El procedimiento en oracle es:
CREATE OR REPLACE PROCEDURE PRO_NUEVO_NUMERO(NOMBRE_TABLA IN VARCHAR2,NUEVO_NUMERO OUT NUMBER)
AS
EXISTE NUMBER;
BEGIN
NUEVO_NUMERO:=1;
raise_application_error(-2000,'Entro hasta aqui');
LOOP
EXISTE:=0;
CASE NOMBRE_TABLA
WHEN 'CLIENTES' THEN
EXIT WHEN NUEVO_NUMERO=999;
SELECT COUNT(*) INTO EXISTE FROM CLIENTES WHERE ID_CLIE=NUEVO_NUMERO;
END CASE;
IF(EXISTE=0)THEN
COMMIT;
RETURN;
ELSE
NUEVO_NUMERO:=NUEVO_NUMERO+1;
END IF;
END LOOP;
NUEVO_NUMERO:=0;
COMMIT;
RETURN;
END PRO_NUEVO_NUMERO;
En Delphi lo que hago es que cuando se cree el formulario aparezca en un label el numero que devuelve el segundo parametro de la siguiente manera:
with stpProNuevoNumeroCliente do
begin
Parameters.ParamByName('NOMBRE_TABLA').Value:='CLIENTES';
Prepared:=True;
ExecProc;
NuevoNumeroCliente:=Parameters.ParamValues['NUEVO_NUMERO'];
end;
Label8.Caption:=IntToStr(NuevoNumeroCliente);
Cuando lo ejecuto manda este error: Project El_Barril.exe raised exception class EOleException with message '4f rh'. Process stopped. Use Step or Run to continue.
Paso a paso me doy cuenta que ese error lo genera inmediatamente despues de hacer ExecPorc.......
Si alguien me pudiera corregir o ayudar de antemano le doy las gracias.:)
Tengo una gran duda sobre como invocar un procedimiento almacenado desde delphi....:confused:
Estoy trabajando sobre delphi 7 y usando Oracle 10g XE, la conexion la hago mediante un AdoConnection y trato de usar un AdoStoredProc que vincule con el AdoConnetion, ya aparecen los procedimientos de la base, no aparecian parametros y cuando le di en Parameter automaticamente los creo. Estos dos parametros uno In y otro Out, el primero de tipo ftString (numericscale=0,precision=0,size=0)y el segundo ftBDC (numericscale=0,precision=15,size=0).
El procedimiento en oracle es:
CREATE OR REPLACE PROCEDURE PRO_NUEVO_NUMERO(NOMBRE_TABLA IN VARCHAR2,NUEVO_NUMERO OUT NUMBER)
AS
EXISTE NUMBER;
BEGIN
NUEVO_NUMERO:=1;
raise_application_error(-2000,'Entro hasta aqui');
LOOP
EXISTE:=0;
CASE NOMBRE_TABLA
WHEN 'CLIENTES' THEN
EXIT WHEN NUEVO_NUMERO=999;
SELECT COUNT(*) INTO EXISTE FROM CLIENTES WHERE ID_CLIE=NUEVO_NUMERO;
END CASE;
IF(EXISTE=0)THEN
COMMIT;
RETURN;
ELSE
NUEVO_NUMERO:=NUEVO_NUMERO+1;
END IF;
END LOOP;
NUEVO_NUMERO:=0;
COMMIT;
RETURN;
END PRO_NUEVO_NUMERO;
En Delphi lo que hago es que cuando se cree el formulario aparezca en un label el numero que devuelve el segundo parametro de la siguiente manera:
with stpProNuevoNumeroCliente do
begin
Parameters.ParamByName('NOMBRE_TABLA').Value:='CLIENTES';
Prepared:=True;
ExecProc;
NuevoNumeroCliente:=Parameters.ParamValues['NUEVO_NUMERO'];
end;
Label8.Caption:=IntToStr(NuevoNumeroCliente);
Cuando lo ejecuto manda este error: Project El_Barril.exe raised exception class EOleException with message '4f rh'. Process stopped. Use Step or Run to continue.
Paso a paso me doy cuenta que ese error lo genera inmediatamente despues de hacer ExecPorc.......
Si alguien me pudiera corregir o ayudar de antemano le doy las gracias.:)