Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-09-2005
herbert herbert is offline
Registrado
 
Registrado: sep 2005
Posts: 4
Poder: 0
herbert Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 13-09-2005
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
Hola:

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

Ponlo en tiempo de diseño y ve que sucede...
__________________
No todo es como parece ser...
Responder Con Cita
  #3  
Antiguo 13-09-2005
Avatar de Xianto
Xianto Xianto is offline
Miembro
 
Registrado: oct 2004
Ubicación: Nací en Neuquén (ARG), desde 2001 Spain
Posts: 151
Poder: 20
Xianto Va por buen camino
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)
__________________
El diseño dira si tiene futuro...
Responder Con Cita
  #4  
Antiguo 13-09-2005
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
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..
__________________
No todo es como parece ser...
Responder Con Cita
  #5  
Antiguo 13-09-2005
lgarcia lgarcia is offline
Miembro
 
Registrado: jul 2004
Posts: 479
Poder: 20
lgarcia Va por buen camino
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 10:38:55.


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
Copyright 1996-2007 Club Delphi