PDA

Ver la Versión Completa : Invocar Store Procedure desde delphi


JuanPa1
24-10-2006, 23:25:10
Hola, alguien me puede ayudar con lo siguiente:
Necesito invocar un procedimiento almacenado que esta hecho en Oracle desde delhpi, que controles debo utilizar y cual seria el codigo para invocar a este procedimiento.
Espero la pronta respuesta de algun compañero de los foros, gracias.

jachguate
25-10-2006, 00:16:16
Hola.

En primer lugar te invito en primer lugar a leer el hilo de la calidad de las preguntas.

Asumiré que usas BDE para conectarte a la base de datos. La pestaña BDE cuenta con un componente llamado TStoredProc, a este le indicas la base de datos a la que se conectará (propiedad DatabaseName) y luego pones el nombre del procedimiento almacenado en la propedad StoredProcName.

Si el procedimiento recibe parámetros, estos quedan disponibles en la propiedad Params y finalmente invocas el procedimiento con el método ExecProc.

Todo lo he dicho de memoria... a veces fallo con los nombres de métodos o propiedades, si lo hice, por favor corregime sin pena.

Hasta luego.

;)

JuanPa1
25-10-2006, 00:29:06
El procedimiento es este:
create procedure sptecnologia(numcel in number)
is
tecno varchar2(10);
begin
select tecnologia into tecno from celular where numero = numcel;
dbms_output.put_line(tecno);
end;

Estoy utilizando TADOStoreProc. El codigo en delphi para invocar al mismo es este:

procedure TForm1.Button1Click(Sender: TObject);
begin
Try
sp.ProcedureName := 'SPTECNOLOGIA';
sp.FieldByName('NUMCEL').AsInteger := 098147821;
sp.ExecProc;
ShowMessage(sp.FieldByName('tecno').AsString);
Finally
sp.Free;
End;
end;


Al ejecutar me da este error:
'sp:Field 'NUMCEL' not found'

que crees que estoy haciendo mal para que me salga este error?

jachguate
25-10-2006, 01:55:36
Al ejecutar me da este error:
'sp:Field 'NUMCEL' not found'

que crees que estoy haciendo mal para que me salga este error?

Lo que pasa es que NumCel no es un campo del stored procedure, es un parámetro (en la propiedad Params).

JuanPa1
25-10-2006, 17:09:32
OK, con lo que respecta a NUMCEL ya lo resolvi pero como recibo el vamol tecno que es el qe el procedimiento debe retornarme?

jachguate
25-10-2006, 17:33:23
Lo siento, pero el procedimiento que has mostrado no retorna nada. Hace una salida a la consola, pero eso no es un "retorno de valor".... es una salida a consola.

Si queres que el procedimiento retorne algo... pues poné un parámetro de salida (out) y el valor retornado por ese parámetro, luego de ejecutado el procedimiento, estará disponible de la misma manera en la propiedad params.

Hasta luego.

;)

JuanPa1
25-10-2006, 17:51:30
Bueno, lo que pasa es que recien estoy practicando los procedimientos almacenados en Oracle y no conozco aun muy bien. Como deberia quedar el procedimiento para que me retorne un valor al cual yo pueda recibirlo desde delphi?
Gracias por los conocimientos que estas compartiendo en el foro...

jachguate
25-10-2006, 19:38:44
debiera lucir así:


create procedure sptecnologia(numcel in number, tecno out varchar2(10))
is
begin
select tecnologia
into tecno
from celular
where numero = numcel;
end;


Hasta luego.

;)

JuanPa1
25-10-2006, 19:42:08
Gracias, tu ayuda me ha servido de mucho. Ya logre invocar corectamente al procedimiento.

JuanPa1
03-11-2006, 19:42:17
Hola, ahora tengo este problema. El procedimiento ya lo invoca correctamente en la misma pc, pero cuando yo ejecuto la aplicacion desde una pc cliente en donde tengo instalado el cliente de Oracle me sale este error:ORA-12560:TNS:protocol adapter error.
La verdad he intentado solucionarlo siguiendo algunos consejos de algunos foros pero no logro resolverlo.
Espero que me puedas dar una idea de lo que puede estar pasando, gracias.

ramiretor
29-11-2006, 23:43:44
Hola:
Solo como "breviario cultural" el procedimiento como está diseñado se parece mucho más a una función de Oracle, puedes entonces en lugar de generarlo como Stored Procedure como Function

Digo solo por opinar
Saludos