Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Oracle (https://www.clubdelphi.com/foros/forumdisplay.php?f=22)
-   -   Invocar Store Procedure desde delphi (https://www.clubdelphi.com/foros/showthread.php?t=36802)

JuanPa1 24-10-2006 23:25:10

Invocar Store Procedure desde delphi
 
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

Cita:

Empezado por JuanPa1
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í:

Código SQL [-]
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


La franja horaria es GMT +2. Ahora son las 23:40:53.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi