Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-12-2007
hackerinblues hackerinblues is offline
Miembro
 
Registrado: dic 2007
Posts: 17
Poder: 0
hackerinblues Va por buen camino
gracias por la respuesta, es mucho mas comodo utilizar ese componente (no sabia que existia), ahora tengo otro problema: cuando hago el ExecProc me devuelve el siguiente error:
"One or more errors occurred during processing of command"

El codigo es este:

//cargo los valores de entrada del procedimiento
proc->Parameters->ParamByName("aaa")->Value = xxx;
proc->Parameters->ParamByName("bbb")->Value = xxx;
proc->Parameters->ParamByName("ccc")->Value = xxx;
proc->Parameters->ParamByName("ddd")->Value = xxx;
proc->Parameters->ParamByName("eee")->Value = xxx;

//ejecuto el procedimiento
proc->Prepared = true;
proc->ExecProc();

//luego recogeria el dato que devuelve el procedure ...
Responder Con Cita
  #2  
Antiguo 19-12-2007
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 30
jachguate Va por buen camino
Cita:
Empezado por hackerinblues Ver Mensaje
cuando hago el ExecProc me devuelve el siguiente error:
"One or more errors occurred during processing of command"
Hola.

Detesto ADO... no lo uso mas que cuando sea necesario, precisamente por esto: sus mensajes de error no son nada claros. Lamento no ser de mucha ayuda. Lo que se me ocurre es probar en el SQL*Plus la ejecución del procedimiento directamente usando los parámetros con los que se invoca desde delphi, y si hay información de estado en el contexto (sesión, valores en tablas, etc.), pues que el estado también sea el mismo.

Esto porque es MUY probable que se esté elevando una excepción desde el propio Oracle, pero que ADO se trague el mensaje de error original y lo sustituya por uno propio. (no es la primera vez que lo haría).

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #3  
Antiguo 20-12-2007
hackerinblues hackerinblues is offline
Miembro
 
Registrado: dic 2007
Posts: 17
Poder: 0
hackerinblues Va por buen camino
Pues no, mucho no me aclara ese error no. De todos modos gracias por la respuesta. Voy a seguir mirando de donde puede venir el fallo y cuando lo solucione lo comento aqui. Un saludo.
Responder Con Cita
  #4  
Antiguo 21-12-2007
hackerinblues hackerinblues is offline
Miembro
 
Registrado: dic 2007
Posts: 17
Poder: 0
hackerinblues Va por buen camino
bueno el TADOStoredProc me esta dando unos problemillas asi que estoy intentando ejecutar el procedimiento desde consultas "a mano".
El tema es que no controlo mucho de PL SQL y no se como recoger el parametro de salida del procedimiento...

Tengo algo asi:
(codigo c++)
Código:
consulta = new TADOQuery(NULL);
consulta->Connection = ADOConnection1;
consulta->SQL->Add("declare codigo number; begin nombre_procedimiento(100,1,1,1,1,codigo); end; ");
consulta->Prepared = true;
consulta->ExecSQL();

.....
Esto me funciona bien y dentro del procedimiento se modifica el valor del
parametro 'codigo'. Ahora lo que necesito es recuperar ese valor y guardarlo en una variable int (por ejemplo) en mi aplicacion y no se como...
Responder Con Cita
  #5  
Antiguo 21-12-2007
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 30
jachguate Va por buen camino
mmm.. francamente no creo que sea posible de esta manera, pues la variable se crea dentro del bloque anónimo de PL/SQL y existe solamente en el contexto de su ejecución. Dicha ejecución ya ha terminado cuando el control vuelve a Delphi.

Quizás funcione usando un parámetro. Estos se declaran con el signo de dos puntos.

Código SQL [-]
begin
  nombre_procedimiento(1, 2, 4, 5, 6, :parametro);
end;

Francamente no tengo idea si funcionará...

Saludos.
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate

Última edición por jachguate fecha: 21-12-2007 a las 20:31:55.
Responder Con Cita
  #6  
Antiguo 26-12-2007
hackerinblues hackerinblues is offline
Miembro
 
Registrado: dic 2007
Posts: 17
Poder: 0
hackerinblues Va por buen camino
Gracias jachguate por todas tus respuestas.

Bueno pues habra que volver a pelearse con el TADOStoredProc...
estoy intentando partir de un ejemplo mas sencillo:
tengo un proc almacenado que no tiene parametros de entrada, simplemente devuelve un numero (que se incrementa cada vez que se invoca el p.a.)

el procedimiento se ejecuta bien pero no logro recoger el dato de vuelta...

Cuerpo del procedimiento (de sql server en este caso):

begin transaction
update tabla_xxx set valor = valor + 1 where nombre = 'xxx'
select valor from tabla_xxx where nombre = 'xxx'
commit

Como hago para recoger ese dato?
Con un TADOQuery hago algo asi:

String respuesta = consulta->Fields->operator [](0)->AsString;


como hago desde el TADOStoredProc? Gracias.
Responder Con Cita
  #7  
Antiguo 26-12-2007
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 30
jachguate Va por buen camino
¿esto está dentro de un stored procedure?

Si es así, al poner el nombre, automáticamente el componente debiera "crear" los parámetros de entrada y salida del mismo. Podes comprobarlo haciendo clic en el botón de los puntos suspensivos de la propiedad Params en el inspector de objetos.

A dichos parámetros y sus propiedades tenes acceso mediante la propiedad "Params" del componente StoredProc. Podes obtener individualmente el valor de un parámetro específico así:

Código Delphi [-]
  Valor := AdoStoredProc1.Params.ParamByName('salida').AsInteger;

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Llamada a Procedimiento Almacenado desde dentro de un Thread MontarazAE MS SQL Server 2 29-05-2007 17:46:34
Problema con la llamada a un Procedimiento almacenado Choclito Firebird e Interbase 3 06-12-2005 19:00:27
Ayuda, como llamar a un procedimiento desde otro procedimiento? Ariatna Varios 1 01-02-2005 04:05:35
LLamada a un Procedimiento de un Paquete de Oracle samuvk JAVA 11 18-05-2004 13:04:36
Insertar un array en un procedimiento de Oracle con JDBC samuvk JAVA 2 17-05-2004 17:59:48


La franja horaria es GMT +2. Ahora son las 17:21:14.


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