Ir al contenido


Foto

[RESUELTO] Stored Procedures y Delphi.


  • Por favor identifícate para responder
14 respuestas en este tema

#1 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 13 abril 2010 - 10:22

Buen día, queridísimos compañeros.

Necesito me orienten en el uso de un ADOStoredProcedure, Activar, Desactivar, llenar de parámetros, qué o cómo conectarlo a un DBGrid..., menudencias así.

Ando atoradísimo con uno de ésos, además que la documentación sobre el tema es algo deficiente.

Agradecido de antemano.
  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 13 abril 2010 - 10:27

Hola

Buscando como trabajar con ADOStoredProc, encontré este documento que me parece muy bueno.

http://www.podgorets...g/ado_comp.html

Mientras buscaré algo mas específico a tu requerimiento.

Salud OS
  • 0

#3 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 13 abril 2010 - 10:30

...Mientras buscaré algo mas específico a tu requerimiento...


Gracias, amigazo. Como siempre, dispuesto a salvar el cuello de los afligidos por la desgracia...
  • 0

#4 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 13 abril 2010 - 11:48

Sólo para la bitácora de ayuda..., estoy haciendo así mi llamada a la Stored Procedure, tal como "alguien" fuera del foro me recomendó lo hiciera.

Y obviamente, me hizo más "bolas" de lo que ya estaba.



delphi
  1.   with dtamdlDts.ADOQryBsqd do
  2.   begin
  3.     Active := False;
  4.     SQL.Clear;
  5.     SQL.Text := 'CALL SePareceA(:pArea, :pTitulo, :pNombre, :pApPaterno, :pApMaterno);';
  6.     Parameters.ParamByName('pArea').Value := edtArea.Text;
  7.     Parameters.ParamByName('pTitulo').Value := edtTitulo.Text;
  8.     Parameters.ParamByName('pNombre').Value := edtNombres.Text;
  9.     Parameters.ParamByName('pApPaterno').Value := edtAplldPaterno.Text;
  10.     Parameters.ParamByName('pApMaterno').Value := edtAplldMaterno.Text;
  11.     Active := True;
  12.   end;



Para los que se pregunten "me parecen conocidos la cantidad y nombre de los parámetros", sí, es cierto, es acerca del uso de "Like"...
  • 0

#5 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 13 abril 2010 - 11:51

no se en MySql, pero probemos al mero estilo de Firebird,

Cambia CALL por SELECT * from y quitas el ; que esta al final.

Avisa como te fue
  • 0

#6 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 13 abril 2010 - 12:29

no se en MySql, pero probemos al mero estilo de Firebird...


No es MySQL, tocayo..., es en MS SQL Server. Te puedo reportar que el método que sugieres ya lo intenté en la mañana y me arrojó un rotundo error.
  • 0

#7 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 13 abril 2010 - 12:34

...Cambia CALL por SELECT * from y quitas el ; que esta al final...


Por pura maldita curiosidad, hice lo que propone mi tocayo bolivariano..., queda así:


delphi
  1.   with dtamdlDts.ADOQryBsqd do
  2.   begin
  3.     Active := False;
  4.     SQL.Clear;
  5. //    SQL.Text := 'EXEC [dbo].SePareceA :pArea, :pTitulo, :pNombre, :pApPaterno, :pApMaterno;';
  6.     SQL.Text := 'SELECT *FROM [dbo].SePareceA(:pArea, :pTitulo, :pNombre, :pApPaterno, :pApMaterno)';
  7.     Parameters.ParamByName('pArea').Value := QuotedStr(edtArea.Text);
  8.     Parameters.ParamByName('pTitulo').Value := edtTitulo.Text;
  9.     Parameters.ParamByName('pNombre').Value := edtNombres.Text;
  10.     Parameters.ParamByName('pApPaterno').Value := edtAplldPaterno.Text;
  11.     Parameters.ParamByName('pApMaterno').Value := edtAplldMaterno.Text;
  12.     Active := True;
  13.   end;


Y el resultado se muestra en la imagen. Un error de sintaxis. Diferente al original, pero error al fin.

Archivos adjuntos


  • 0

#8 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 13 abril 2010 - 12:49

Puedes intentar algo como esto:



delphi
  1. ADOStoredProc1.ProcedureName := 'Nombre del procedimiento';
  2. ADOStoredProc1.Parameters.Refresh;
  3.  
  4. ADOStoredProc1.Parameters.ParamByName('@strName').Value := 'Algo';
  5. ADOStoredProc1.ExecProc;
  6. ShowMessage(ADOStoredProc1.Parameters.ParamValues['@RETURN_VALUE']);



Saludos.
  • 0

#9 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 13 abril 2010 - 12:53

Puedes intentar algo como esto:



delphi
  1. ADOStoredProc1.ProcedureName := 'Nombre del procedimiento';
  2. ADOStoredProc1.Parameters.Refresh;
  3.  
  4. ADOStoredProc1.Parameters.ParamByName('@strName').Value := 'Algo';
  5. ADOStoredProc1.ExecProc;
  6. ShowMessage(ADOStoredProc1.Parameters.ParamValues['@RETURN_VALUE']);



Saludos.


Gracias, Enecumene. Por eso eres mi héroe...
  • 0

#10 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 13 abril 2010 - 01:01

¡¡ENECUMENEEEEE!!, ya me dí cuenta de cuál es el problemaaaaa...

Éste Stored Procedure que estoy intentando ejecutar no devuelve un valor "per se", sino un conjunto de registros que cumplen una condición dada...

Sigo intentando cualquier buena idea que tengan. Y las malas, también... jejejeje  :cheesy: :cheesy: :cheesy: :cheesy:
  • 0

#11 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 13 abril 2010 - 01:34

Ah vale, pues te dejo un documento que quizás te aclare la mente.

Saludos. :wink:
  • 0

#12 kafastoforman

kafastoforman

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 277 mensajes
  • LocationMexico D.F.

Escrito 13 abril 2010 - 02:17

¡¡ENECUMENEEEEE!!, ya me dí cuenta de cuál es el problemaaaaa...

Éste Stored Procedure que estoy intentando ejecutar no devuelve un valor "per se", sino un conjunto de registros que cumplen una condición dada...

Sigo intentando cualquier buena idea que tengan. Y las malas, también... jejejeje  :cheesy: :cheesy: :cheesy: :cheesy:





delphi
  1. ADOStoredProc1.connection:= connection1;
  2.  
  3. ADOStoredProc1.ProcedureName := 'Nombre del procedimiento';
  4. ADOStoredProc1.Parameters.Refresh;
  5.  
  6. ADOStoredProc1.Parameters.ParamByName('@strName').Value := 'Algo';
  7.  
  8. //-->para ExecProc, es recomendable
  9. ADOStoredProc1.prepared:= true;
  10.  
  11. //--> ExecProc para cuando no tengas resultados, como son updates, deletes, etc.
  12. ADOStoredProc1.ExecProc;
  13.  
  14. //--> PAra aquellos que si te regresan el conjunto de valores ocupas Open y no es necesario ocupar prepared.
  15.  
  16. ADOStoredProc1.Open;
  17.  
  18.  
  19. DataSource1.DataSet := AdoStoredProc1;
  20.  
  21. dbgrid1.datsource:= DataSource1;



y listo tu dbgrid queda lleno con los registros que devuelve.

  • 0

#13 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 13 abril 2010 - 04:48

...y listo tu dbgrid queda lleno con los registros que devuelve.


Me cae que no..., no me arroja NINGÚN registro.

Para aquéllos que tengan curiosidad respecto al contenido del Stored Procedure que intento ejecutar, va el código.



sql
  1. CREATE PROCEDURE dbo.SePareceA
  2. @pArea VARCHAR(255) = NULL,
  3. @pTitulo VARCHAR(255) = NULL,
  4. @pNombre VARCHAR(255) = NULL,
  5. @pApPaterno VARCHAR(255) = NULL,
  6. @pApMaterno VARCHAR(255) = NULL
  7. AS
  8. BEGIN
  9. SELECT Consec, ca_cancelado, Ca_Area, Ca_Titulo, Ca_Nombre, Ca_Paterno, Ca_Materno, Ca_institucion, Ca_Dirg, Ca_Dir, Ca_Sub, Ca_Jud
  10.   FROM carea
  11.   WHERE ca_cancelado = '0' AND
  12.     (@pArea IS NULL OR ca_area LIKE '%' + @pArea + '%') AND
  13.     (@pTitulo IS NULL OR ca_titulo LIKE '%' + @pTitulo + '%') AND
  14.     (@pNombre IS NULL OR ca_nombre LIKE '%'+ @PNombre+'%' ) AND
  15.     (@pApPaterno IS NULL OR ca_paterno LIKE '%'+ @pApPaterno +'%') AND
  16.     (@pApMaterno IS NULL OR ca_materno LIKE '%' + @pApMaterno + '%')
  17. END


  • 0

#14 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 13 abril 2010 - 04:51

Ah vale, pues te dejo un documento que quizás te aclare la mente...


Sí, me aclaró bastante..., hice el intento con el ejemplito que consignan ahí, usando ClientDataSet, Provider y ADOStoredProcedure y nomás no arranca. Aprendí algo sobre ClientDataSet, pero no lo suficiente para explotarlo.
  • 0

#15 kafastoforman

kafastoforman

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 277 mensajes
  • LocationMexico D.F.

Escrito 13 abril 2010 - 07:14


...y listo tu dbgrid queda lleno con los registros que devuelve.


Me cae que no..., no me arroja NINGÚN registro.

Para aquéllos que tengan curiosidad respecto al contenido del Stored Procedure que intento ejecutar, va el código.



sql
  1. CREATE PROCEDURE dbo.SePareceA
  2. @pArea VARCHAR(255) = NULL,
  3. @pTitulo VARCHAR(255) = NULL,
  4. @pNombre VARCHAR(255) = NULL,
  5. @pApPaterno VARCHAR(255) = NULL,
  6. @pApMaterno VARCHAR(255) = NULL
  7. AS
  8. BEGIN
  9. SELECT Consec, ca_cancelado, Ca_Area, Ca_Titulo, Ca_Nombre, Ca_Paterno, Ca_Materno, Ca_institucion, Ca_Dirg, Ca_Dir, Ca_Sub, Ca_Jud
  10.   FROM carea
  11.   WHERE ca_cancelado = '0' AND
  12.     (@pArea IS NULL OR ca_area LIKE '%' + @pArea + '%') AND
  13.     (@pTitulo IS NULL OR ca_titulo LIKE '%' + @pTitulo + '%') AND
  14.     (@pNombre IS NULL OR ca_nombre LIKE '%'+ @PNombre+'%' ) AND
  15.     (@pApPaterno IS NULL OR ca_paterno LIKE '%'+ @pApPaterno +'%') AND
  16.     (@pApMaterno IS NULL OR ca_materno LIKE '%' + @pApMaterno + '%')
  17. END



Pues una posibilidad podría ser que en vez de usar "is null" lo cambies a "= null" por que depende de como este configurado el Servidor SQL Server. si no es eso entonces al principio intenta los siguiente


delphi
  1. StoredPRoc1.parameters.refresh;
  2.  
  3. for i:= 0 to StoredProc1.parameters.count -1 do
  4.   StoredProc1.Parameters[i].Value = null;




y ya despues pones el resto del codigo.

Saludos
  • 0




IP.Board spam blocked by CleanTalk.