Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   Procedimiento almacenado desde Delphi (https://www.clubdelphi.com/foros/showthread.php?t=36935)

hmv 28-10-2006 16:59:12

Procedimiento almacenado desde Delphi
 
Hola a todos,

Como puedo llamar a un procedimiento almacenado desde delphi, estoy usando ADO. El codigo del procedure es:
Código SQL [-]
create procedure guardar_categoria
@cat_name varchar(50),
@cat_description varchar(200)
as
 
insert into categoria(cat_name,cat_description) values(@cat_name,@cat_description)

lgarcia 28-10-2006 17:36:39

SP desde Delphi
 
Hola:

Para llamar un SP desde Delphi debes hacer lo siguiente tienes que poner un ADOStoredProcedure en el formulario realizar la conexion con la BD y buscar el nombre del procedimiento en la propiedad procedurename y despues usar el siguiente codigo
Código:

with Insertar do
          begin
            Parameters.ParamByName('@cat_name').Value:= editcatname.Text;
            Parameters.ParamByName('@cat_description').Value:= editcatname.Text;
            Prepared:= True;
            ExecProc;
          end;

Espero haberte ayudado

Luis Garcia

hmv 28-10-2006 17:51:30

Gracias por tu ayuda,
Hice lo que me dijiste, pero me sale un error:

Insertar: Paramater '@cat_name' not found

Gracias nuevamente

Uso SQLServer 2000

hmv 28-10-2006 18:25:47

Ya esta solucionado,

Lo q pasa es que el componente hacia referencia a otro SP jejej

Gracias

Y como seria el codigo para recibir un parametro de salida, ejemplo q me devuelva el codigo de la categoria.

Jac fcc 05-01-2010 20:28:39

alternativa al proc
 
En delphi, ademas de crear una instancia del procedimiento almacenado para ejecutarlo, existe alguna otra?

Lo pregunto por que deseo solo llamar al procedimiento sin tener la necesidad de crear una instancia ADOStoreProcedure

de antemano agradezco su apoyo

Jac fcc 06-01-2010 18:28:08

dudas proc
 
Hola de nuevo, espero contar con su apoyo:

tengo un proc almacenado llamado Calcular que recibe un parametro entero
> ALTER procedure CALCULAR @folio int

cuando lo ejecuto desde el analizador de consultas de SQL todo correcto.
> Execute Calcular 103 --asi llamo

Pero cuando quiero ejecuar desde Delphi me aparece que el campo no lo encuentra:
"StoredProc:Parameter '@folio' not found"

He intentado de varias formas, agregue el TstoredProc y el folio lo tomo de un Tedit:

try
StoredProc.DatabaseName:='nomDB';
StoredProc.StoredProcName:='Calcular';
//storedProc.Params.ParamByName('@folio').AsInteger:=StrToInt(Folio.Text);
//storedProc.Params.ParamByName('folio').AsInteger:=StrToInt(Folio.Text);
//storedProc.ParamByName('@folio').AsInteger:=StrToInt(Folio.Text);
//storedProc.ParamByName('@folio').Value:=StrToInt(Folio.Text);
//storedProc.ParamByName('@folio').Value:=Folio.Text;
//storedProc.ParamByName('folio').Value:=Folio.Text;
//storedProc.Params.ParamByName('@folio').Value:=Folio.Text;
//storedProc.Params.ParamValues['@folio']:=Folio.Text;
storedProc.Params.ParamValues[Folio.Text];
storedProc.Prepared:=true;
storedProc.ExecProc;
Finally
storedProc.Free;
end;

Entiendo que el parametro lo tengo que enviar de alguna de estas maneras pero coloque lo que coloque aparece siempre esa leyenda.
supongo que me falta hacer algo pero no tengo idea que.

uso la version SQL 8.0 y borlanddelphi 7.0

gracias x su apoyo

Jac fcc 06-01-2010 23:02:05

solucion
 
Despues de varias pruebas, ya tengo incluso varias soluciones:
//***con un storedproc
try
storedProc1.DatabaseName:='DataBase';
storedProc1.StoredProcName:='Calcular';
storedProc1.Params.Clear;
folio_:=TParam.Create(storedProc1.Params, ptInput);
storedProc1.Params[0].Name:='folio';
storedProc1.ParamByName('folio').AsInteger:=StrToInt(Folio.Text);
storedProc1.ExecProc;
except
//manejo de error
end;
//****con un adoStoredProc
StoredProc.Connection:=Adoconnection;
StoredProc.ProcedureName:='Calcula';
storedProc.Parameters.AddParameter;
try
StoredProc.Parameters[0].Value:=Folio.Text;
StoredProc.ExecProc;
except begin
//manejo de error
end;
end;
//****con un adoCommand
Command.CommandType:=cmdStoredProc;
Command.Connection:=Adoconnection;
Command.CommandText:='Calcula';
try
Command.Parameters.Refresh;
Command.Parameters.ParamByName('@folio').Value:=folio;
Command.Execute;
except begin
//manejo de error
end;//except
end;

Lo escribo por si a algun novato como yo le es de ayuda


La franja horaria es GMT +2. Ahora son las 16:16:39.

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