
[RESUELTO] Stored Procedures y Delphi.
#1
Posted 13 April 2010 - 10:22 AM
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.
#2
Posted 13 April 2010 - 10:27 AM
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
#3
Posted 13 April 2010 - 10:30 AM
...Mientras buscaré algo mas específico a tu requerimiento...
Gracias, amigazo. Como siempre, dispuesto a salvar el cuello de los afligidos por la desgracia...
#4
Posted 13 April 2010 - 11:48 AM
Y obviamente, me hizo más "bolas" de lo que ya estaba.
with dtamdlDts.ADOQryBsqd do begin Active := False; SQL.Clear; SQL.Text := 'CALL SePareceA(:pArea, :pTitulo, :pNombre, :pApPaterno, :pApMaterno);'; Parameters.ParamByName('pArea').Value := edtArea.Text; Parameters.ParamByName('pTitulo').Value := edtTitulo.Text; Parameters.ParamByName('pNombre').Value := edtNombres.Text; Parameters.ParamByName('pApPaterno').Value := edtAplldPaterno.Text; Parameters.ParamByName('pApMaterno').Value := edtAplldMaterno.Text; Active := True; 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"...
#5
Posted 13 April 2010 - 11:51 AM
Cambia CALL por SELECT * from y quitas el ; que esta al final.
Avisa como te fue
#6
Posted 13 April 2010 - 12:29 PM
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.
#7
Posted 13 April 2010 - 12:34 PM
...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í:
with dtamdlDts.ADOQryBsqd do begin Active := False; SQL.Clear; // SQL.Text := 'EXEC [dbo].SePareceA :pArea, :pTitulo, :pNombre, :pApPaterno, :pApMaterno;'; SQL.Text := 'SELECT *FROM [dbo].SePareceA(:pArea, :pTitulo, :pNombre, :pApPaterno, :pApMaterno)'; Parameters.ParamByName('pArea').Value := QuotedStr(edtArea.Text); Parameters.ParamByName('pTitulo').Value := edtTitulo.Text; Parameters.ParamByName('pNombre').Value := edtNombres.Text; Parameters.ParamByName('pApPaterno').Value := edtAplldPaterno.Text; Parameters.ParamByName('pApMaterno').Value := edtAplldMaterno.Text; Active := True; end;
Y el resultado se muestra en la imagen. Un error de sintaxis. Diferente al original, pero error al fin.
Attached Files
#8
Posted 13 April 2010 - 12:49 PM
ADOStoredProc1.ProcedureName := 'Nombre del procedimiento'; ADOStoredProc1.Parameters.Refresh; ADOStoredProc1.Parameters.ParamByName('@strName').Value := 'Algo'; ADOStoredProc1.ExecProc; ShowMessage(ADOStoredProc1.Parameters.ParamValues['@RETURN_VALUE']);
Saludos.
#9
Posted 13 April 2010 - 12:53 PM
Puedes intentar algo como esto:
delphi
ADOStoredProc1.ProcedureName := 'Nombre del procedimiento'; ADOStoredProc1.Parameters.Refresh; ADOStoredProc1.Parameters.ParamByName('@strName').Value := 'Algo'; ADOStoredProc1.ExecProc; ShowMessage(ADOStoredProc1.Parameters.ParamValues['@RETURN_VALUE']);
Saludos.
Gracias, Enecumene. Por eso eres mi héroe...
#10
Posted 13 April 2010 - 01:01 PM
É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




#12
Posted 13 April 2010 - 02:17 PM
¡¡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![]()
![]()
![]()
ADOStoredProc1.connection:= connection1; ADOStoredProc1.ProcedureName := 'Nombre del procedimiento'; ADOStoredProc1.Parameters.Refresh; ADOStoredProc1.Parameters.ParamByName('@strName').Value := 'Algo'; //-->para ExecProc, es recomendable ADOStoredProc1.prepared:= true; //--> ExecProc para cuando no tengas resultados, como son updates, deletes, etc. ADOStoredProc1.ExecProc; //--> PAra aquellos que si te regresan el conjunto de valores ocupas Open y no es necesario ocupar prepared. ADOStoredProc1.Open; DataSource1.DataSet := AdoStoredProc1; dbgrid1.datsource:= DataSource1;
y listo tu dbgrid queda lleno con los registros que devuelve.
#13
Posted 13 April 2010 - 04:48 PM
...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.
CREATE PROCEDURE dbo.SePareceA @pArea VARCHAR(255) = NULL, @pTitulo VARCHAR(255) = NULL, @pNombre VARCHAR(255) = NULL, @pApPaterno VARCHAR(255) = NULL, @pApMaterno VARCHAR(255) = NULL AS BEGIN SELECT Consec, ca_cancelado, Ca_Area, Ca_Titulo, Ca_Nombre, Ca_Paterno, Ca_Materno, Ca_institucion, Ca_Dirg, Ca_Dir, Ca_Sub, Ca_Jud FROM carea WHERE ca_cancelado = '0' AND (@pArea IS NULL OR ca_area LIKE '%' + @pArea + '%') AND (@pTitulo IS NULL OR ca_titulo LIKE '%' + @pTitulo + '%') AND (@pNombre IS NULL OR ca_nombre LIKE '%'+ @PNombre+'%' ) AND (@pApPaterno IS NULL OR ca_paterno LIKE '%'+ @pApPaterno +'%') AND (@pApMaterno IS NULL OR ca_materno LIKE '%' + @pApMaterno + '%') END
#14
Posted 13 April 2010 - 04:51 PM
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.
#15
Posted 13 April 2010 - 07:14 PM
...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
CREATE PROCEDURE dbo.SePareceA @pArea VARCHAR(255) = NULL, @pTitulo VARCHAR(255) = NULL, @pNombre VARCHAR(255) = NULL, @pApPaterno VARCHAR(255) = NULL, @pApMaterno VARCHAR(255) = NULL AS BEGIN SELECT Consec, ca_cancelado, Ca_Area, Ca_Titulo, Ca_Nombre, Ca_Paterno, Ca_Materno, Ca_institucion, Ca_Dirg, Ca_Dir, Ca_Sub, Ca_Jud FROM carea WHERE ca_cancelado = '0' AND (@pArea IS NULL OR ca_area LIKE '%' + @pArea + '%') AND (@pTitulo IS NULL OR ca_titulo LIKE '%' + @pTitulo + '%') AND (@pNombre IS NULL OR ca_nombre LIKE '%'+ @PNombre+'%' ) AND (@pApPaterno IS NULL OR ca_paterno LIKE '%'+ @pApPaterno +'%') AND (@pApMaterno IS NULL OR ca_materno LIKE '%' + @pApMaterno + '%') 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
StoredPRoc1.parameters.refresh; for i:= 0 to StoredProc1.parameters.count -1 do StoredProc1.Parameters[i].Value = null;
y ya despues pones el resto del codigo.
Saludos