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 10-11-2011
rubio rubio is offline
Miembro
 
Registrado: mar 2009
Posts: 36
Poder: 0
rubio Va por buen camino
Cita:
Empezado por olbeup Ver Mensaje
La variable @Salida = 'Paso 1' tiene un valor fijo, que quieres que te devuelva lo mismo
La variable @varIdIndicador=@@IDENTITY no tiene ninguna utilidad en tu procedimiento, el @@IDENTITY lo que hace es guardar el valor que ha tomado al añadir el registro, pero nada más.
¿Que quieres que te devuelva el procedimiento, @Salida = 'Paso 1'?
Disculpa, no explique, en ese procedimiento faltan una serie de instrucciones, el valor que devuelve @@IDENTITY yo lo uso mas adelante, en este caso yo le puse un valor fijo a la variable @Salida para hacer las pruebas, pero ella en realidad mas adelante toma diferentes valores en dependencia de lo que se haga, por eso quiero retornar la variable @Salida,

Gracias.
Responder Con Cita
  #2  
Antiguo 10-11-2011
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.418
Poder: 24
fjcg02 Va camino a la fama
Creo que quieres ir demasiado rápido.

Haz una pequeña prueba de concepto, y cuando la domines, te metes en harina.

Por otro lado, las instrucciones

with parameters do begin
for i:=0 to Length(Nombre)-1 do
CreateParameter(Nombre[i], TipoDato[i], Direccion[i], Tamano[i], Valor[i]);
end;

no son necesarias, ya que estás creando los parámetros. Si asignas la procedure al TADOStoredProc, ya dispones de los parámetros. Sólo tienes que asignarles el valor.

Código Delphi [-]
procedure TfrmGenerales.ADOProcedimiento(Nombre: array of WideString;
                TipoDato: array of TDataType;
                Direccion: array of TParameterDirection;
                Tamano: array of Integer;
                Valor: array of OleVariant;
                Procedimiento: string);
var
  i: integer;
  sp:TADOStoredProc;
begin
  sp := TADOStoredProc.Create( self );
  with sp do
    try
      Connection:=frmAutenticacion.ADOCSistema;
      ProcedureName := Procedimiento;
      // Damos valor a los parámetros de entrada
      for i:=0 to parameters.Count-1 do
       begin
          with ParameterByName(Nombre[i]) do
          begin
            if Direccion = TInput then // al asignar el SP ya te pone los parámetros y si son de entrada o salida
            begin
              DataType:= TipoDato[i]; -> podría obviarse
              Direction:= Direccion[i]; -> podría obviarse
              Size:=Tamano[i]; -> Podría obviarse
              Value:=Valor[i];
            end;
          end;
      end;

      Execute; ->> Importante, con los SP's no se utiliza Open, o eso creo

    // recogemos los valores de los parámetros de salida
      for i:=0 to parameters.Count-1 do
       begin
          with ParameterByName(Nombre[i]) do
          begin
            if Direccion = TOutput then // al asignar el SP ya te pone los parámetros y si son de entrada o salida
            begin
              Valor[i]:= Value;
            end;
          end;
      end;

     // y ahora deberás hacer algo con los valores recogidos. Podrías definir como var el array de valores en la llamada a la función ya que si no los perdierías

    finally
      sp.Free;
    end;
end;

Buano, estoy escribiendo de memoria, pero creo que lo he puesto claro.

De todas maneras, crea un proyecto nuevo, tira un TADOStoredProc, asignale la conexión y el SP y mira cómo ya dispones de los parámetros.

Prueba a ver y nos cuentas.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #3  
Antiguo 11-11-2011
abelg abelg is offline
Miembro
 
Registrado: jul 2004
Posts: 50
Poder: 22
abelg Va por buen camino
Creo puedes solucionanrlo asi en un TADOQuery en la propiedad SQL pones:
Código SQL [-]
declare@AnoAClonar CHAR(4), @AnoClonado CHAR(4), @Salida CHAR(255)
set @AnoAClonar = :AnoClonar
set @AnoClonado = :AnoClonado

Exec Clonar @AnoAClonar, @AnoClonado, @Salida OUTPUT
Set :Salida = @Salida
En su propiedad Parameters Listará 3 Los cuqales son (AnoClonar, AnoClonado, Salida),
Luego en Delphi lo Llamarias asi: ahi escogemos DataType ftstring para los 3 y solo para el parámetro "Salida" en Direction ponemos pdOutput.
Código Delphi [-]
 with ADOQuery1 do
Begin
  Close;
  Parameters.ParamByName('AnoClonar').Value := edit1.text; //Depende lo que quieras mandar
  Parameters.ParamByName('AnoClonado').Value := edit2.text; //Lo mismo depende de tu parametro
  Parameters.ParamByName('Salida').Value := ''; //Asignado asi porque es un parámetro de Salida
  ExecSQL;
  Edit3.Text := Parameters.ParamByName('Salida').Value; // Estoy Asignando a Edit3 lo que tiene despues 
                                                                           //de ejecutarse el Procedure
end;
Salu2
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
Cómo hacer para retornar valores de una Unit a otra karo Varios 6 14-03-2009 20:57:28
Retornar o no retornar desde un script principal dec PHP 6 24-03-2008 23:41:12
retornar un valor Proc.Almacenado cacu OOP 1 05-03-2008 22:39:16
Como retornar un valor en Delphi Stanley Varios 8 29-10-2007 04:04:03
Exite función para asignar otro valor si es null JavierO Varios 6 04-08-2005 18:22:56


La franja horaria es GMT +2. Ahora son las 05:54:26.


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