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)
-   -   ayuda con procedimiento y delphi (https://www.clubdelphi.com/foros/showthread.php?t=25112)

herbert 13-09-2005 02:07:36

ayuda con procedimiento y delphi
 
Hola a todos..!!!!
tengo un problema que me esta volviendo loco y me harian un gran fabor si me ayudaran:
tengo el siguiente procedimiento en SQL SERVER:

CREATE PROCEDURE Qry_buscardocente
(
@var varchar(50),
@sw smallint
)
AS
Begin
IF (@sw=1)
select * from docentes where nombre like @var+'%' order by nombre
IF (@sw=2)
select * from docentes where ci like @var+'%' order by nombre
End

Ejecutando des el ANALISADOR DE CONSULTAS funciona una maravilla

exec Qry_buscardocente 'b',1

El problema es a la hora de conectar con DELPHI, hago los siguientes pasos:

1.- databasename=nominate
2.- storedprocname=Qry_buscardocente
3.- params
@var
datetype=ftString
Paramtype=ptImput
Type=String

@sw
datetype=ftSmallint
Paramtype=ptImput
Type=Integer
4.- active=true
es en esta parte donde me sale un error:"Error creating cursorhandle"
y no quiere activarse, he tenido este error antes con procedimiento de actualizacion pero a la hora
de ejecutar el programa funcionaba con el siguiente codigo:

DM.SPqry_nom_docente.Close;(esta linea solo cuando al ACTIVE=TRUE de lo contrario lo quito)
DM.SPqry_nom_docente.Prepare;
DM.SPqry_nom_docente.Params[0].AsString:=Ebuscar.Text;
DM.SPqry_nom_docente.ExecProc;
DM.SPqry_nom_docente.Open;(esta linea solo cuando al ACTIVE=TRUE de lo contrario lo quito)
DBGbdocentes.DataSource:=DM.DSqry_nom_docente;

El programa corre pero no muestra ningun resultado en el DBGRID
ahhh algo que me olvidaba estoy utilizando el BDE nativo
¿sera que es mejor con ADO? y si es asi me podrian decir los pasos de como hacerlo

Se los agradecere y como muestra de ello mensionare la ayuda que me den en mi PROYECTO..

Herbert's Quispe

lucasarts_18 13-09-2005 02:29:07

Hola:

Asocias el Datasource después de abrir el procedimiento almacenado ?? :confused:

Ponlo en tiempo de diseño y ve que sucede...

Xianto 13-09-2005 09:09:23

Buenas...

Nunca he llamado un procedimiento de MSSQL desde delphi de esa forma, siempre he preferido, poner una query en formulario y indistintamente si es query o procedimiento o lo que sea, ejecutarlo...

Ademas no necesitas usar el EXEC para ejecutar un procedemiento, con tan solo su nombre el procedimiento se ejecuta siempre y cuando este en la DB que estes usando en ese momento.

Intenta algo asi:
Código:

Query.SQL.Text := 'mi_procedimiento_con_parametros ' + chr(39) + texto1 + chr(39) +',' + IntToStr(numero1)

lucasarts_18 13-09-2005 15:27:54

Hola:

Aquí tienes otro ejemplo que puede servirte:

Código Delphi [-]
 
 procedure TFrm_MantenedorClientes.IngresarCliente;
 var Sp:TStoredProc;
 begin
      Sp:=TStoredProc.create(self);
      Sp.DatabaseName:='DBCOMLIMA';
      Sp.StoredProcName:='SP_InsertarCliente';
      Sp.Params.Clear;
 
      //Creacion de Parametros
      Sp.Params.CreateParam(ftInteger,'@nrrut',ptInput);
      Sp.Params.CreateParam(ftString,'@dvrut',ptInput);
      Sp.Params.CreateParam(ftString,'@nmcliente',ptInput);
      Sp.Params.CreateParam(ftString,'@nmdireccion',ptInput);
      Sp.Params.CreateParam(ftString,'@nmcomuna',ptInput);
      Sp.Params.CreateParam(ftString,'@nmciudad',ptInput);
      Sp.Params.CreateParam(ftString,'@nmgiro',ptInput);
      Sp.Params.CreateParam(ftString,'@nrfono',ptInput);
      Sp.Params.CreateParam(ftString,'@nrfax',ptInput);
      Sp.Params.CreateParam(ftString,'@nmemail',ptInput);
      Sp.Params.CreateParam(ftFloat,'@nrcredito',ptInput);
      Sp.Params.CreateParam(ftFloat,'@nrsaldo',ptInput);
   //->AGA 24/08/2005
      SP.Params.CreateParam(ftInteger,'@nrplazo',ptInput);
      SP.Params.CreateParam(ftfloat,'@nrdescuento',ptInput);
      SP.Params.CreateParam(ftString,'@nrfiador',ptInput);
   //<-AGA 24/08/2005
      Sp.Params.CreateParam(ftInteger,'RETURN_VALUE',ptResult);
 
     //Valores que entrega el Servidor
      SP.ParamByName('@nrrut').AsInteger := StrToInt(Copy(Mask_Rut.Text,1,8));
      SP.ParamByName('@dvrut').AsString := Copy(Mask_Rut.Text,9,1);
      SP.ParamByName('@nmcliente').AsString := edt_Nombre.Text;
      SP.ParamByName('@nmdireccion').AsString := edt_Direccion.Text;
      SP.ParamByName('@nmcomuna').AsString := edt_Comuna.Text;
      SP.ParamByName('@nmciudad').AsString := edt_Ciudad.Text;
      SP.ParamByName('@nmgiro').AsString := edt_Giro.Text;
      SP.ParamByName('@nrfono').AsString := edt_Fono.Text;
      SP.ParamByName('@nrfax').AsString := edt_Fax.Text;
      SP.ParamByName('@nmemail').AsString := edt_Email.Text;
      Sp.ParamByName('@nrcredito').AsFloat := StrToFloat(edt_credito.Text);
      Sp.ParamByName('@nrsaldo').AsFloat := 0;
   //->AGA 24/08/2005
      SP.ParamByName('@nrplazo').AsInteger := StrToInt(edt_Plazo.Text);
      SP.ParamByName('@nrdescuento').AsFloat := StrToFloat(edt_Descuento.Text);
      SP.ParamByName('@nrfiador').AsString := edt_Fiador.Text;
   //<-AGA 24/08/2005
 
      try
         SP.ExecProc;
         Case SP.ParamByName('RETURN_VALUE').AsInteger of
         0:MessageDlg('Cliente Ingresado',mtInformation,[mbOk],0);
         1:MessageDlg('Ya Existe Cliente',mtWarning,[mbOk],0);
         90:MessageDlg('Error en la BD',mtWarning,[mbOk],0);
         end;
      Except
         MessageDlg('Procedimiento no pudo ser Ejecutado',mtWarning,[mbOk],0);
      end;
      FormActivate(Self);
 end;
 
 Espero que te oriente en algo..:)

lgarcia 13-09-2005 15:51:44

Ayuda con Procedimiento y Delphi
 
Hola:

Me parece que la variante mas optima es utilizar un ADOStoreProcedure y en la propiedad ConnectionString configurar la conexion con la BD de SQL, una vez realizado esto lo unico que tienes que hacer es ejecutarla en el evento OnActivate del formulario donde esta el DBGrid con un codigo como este
Código:

with BuscarDocente do
begin
  Close;
  Parameters.ParamByName('@var').Value:= Trim(EditUsuario.Text);
  Parameters.ParamByName('@sw').Value:= Trim(EditContrasena.Text);
  Open;
end;

Por otro lado el DataSource lo asocias al ADOStoreProcedure y el DBGrid lo asocias al DataSource, para que el ADOStoreProcedure te muestre los campos debes ponerle los parametros y darle click derecho y seleccionar Field Editor y sobre la ventana que te sale nuevamente click derecho y seleccionar Add all field ya que con esto cuando en la propiedad Column del DBGrid podras escoger los campos.

Espero haberte ayudado en algo

Saludos
Luis Garcia

_____________________________
La mejor manera de decir es hacer


La franja horaria es GMT +2. Ahora son las 23:18:52.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi