PDA

Ver la Versión Completa : Procedimiento almacenado desde Delphi


hmv
28-10-2006, 16:59:12
Hola a todos,

Como puedo llamar a un procedimiento almacenado desde delphi, estoy usando ADO. El codigo del procedure es:

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
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

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
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
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
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