Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-06-2007
Roilo Roilo is offline
Miembro
 
Registrado: nov 2005
Ubicación: Mayarí, Cuba
Posts: 143
Poder: 19
Roilo Va por buen camino
ejecutar Procedimiento almacenado en SQL Server, Intraweb.

Un abraso al FORO.
Quisiera que le hecharan un vistaso a cómo quiero ejecutar un procedimiento almacenado en SQL Server desde una aplicación IntraWeb:
Para ello uso los componentes de dbExpress.

El procedimiento es para buscar todos los nombres que tengan incluido la cadena @palabra:
Código SQL [-]
CREATE PROCEDURE [dbo].[busqueda] 
@palabra nvarchar
AS
SELECT Nombre,CentroTrab FROM control WHERE Nombre like '%@palabra%'
GO

En el Delphi selecciono el componente SQLStoredProc:
propiedades:
SQLConnection=SQLConnection1
StoredProcName=busqueda
Params : defino el parámetro @palabra

Para ejecutarlo al hacer clic en un boton:
Código Delphi [-]
procedure TFInsertar.buscarClick(Sender: TObject);
begin
 SQLStordProc1.ParamByName('@palabra').asstring := IWEdit1.Caption ; 
 ConsolaDatos.busqueda.ExecProc ;
end;

Bueno: el problema es que me da el error :
..."List Index Out of bounds(0)"

Si alguien sabe de lo que hablo y sabe qué ne falta por configurar, le agradecería la ayuda.
Gracias de antemanos.
__________________
...que la libertad sólo existe cuando no es de nadie.
Responder Con Cita
  #2  
Antiguo 28-06-2007
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
Creo mas bien, que el problema esta desde el procedimiento.

¿ya trataste de ejecutarlo desde el analizador de consultas?
¿Funciona?

Te pregunto esto porque a mi no me funciona de esa manera.
Al utilizar el comando like '%@palabra%'
el procedimiento buscar todo slos que coincidan con "@palabra" no con el valor del parámetro.

Tendrías que definir tu procedimiento como:

Código SQL [-]
...
WHERE Nombre like '%'+@palabra+'%'
...
__________________


Última edición por ContraVeneno fecha: 28-06-2007 a las 00:05:47.
Responder Con Cita
  #3  
Antiguo 28-06-2007
Roilo Roilo is offline
Miembro
 
Registrado: nov 2005
Ubicación: Mayarí, Cuba
Posts: 143
Poder: 19
Roilo Va por buen camino
Parece que no...

Parece que el error no está en el procedimiento, porque lo definí como:
Código SQL [-]
CREATE PROCEDURE [dbo].[busqueda] 
@palabra nvarchar
AS
SELECT Nombre,CentroTrab FROM control WHERE Nombre = @palabra
GO
...y nada. Me sigue el error.
Incluso, le asigné un valor predefinido al parámetro: es decir, en la propiedad Value del parámetro @palabra del objeto TSQLStoredProc le asigné una cadena y cuando le doy active=true en la propiedad del propio componente me suelta el "List index out of bounds(0)".
además...hay otro detalle que encuentro raro: a penas le asigno la conección al componente TSQLStoredProc me debería desplegar en StoredProcName todos los procedimientos almacenados que tiene el servidor en esa bd, como lo hace ADO, y apenas se seleccione un SP el propio Delphi define los parámetros...
Bueno, mientras sigo por acá...
GRACIAS de antemanos.
__________________
...que la libertad sólo existe cuando no es de nadie.
Responder Con Cita
  #4  
Antiguo 28-06-2007
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
¿ya lo probaste desde el query analizer ?
__________________

Responder Con Cita
  #5  
Antiguo 28-06-2007
Roilo Roilo is offline
Miembro
 
Registrado: nov 2005
Ubicación: Mayarí, Cuba
Posts: 143
Poder: 19
Roilo Va por buen camino
No!!!

si me pides que lo pruebe con el Query analizer para chequear si el SP está correcto, pierde cuidado que lo está. Lo probé con los componentes de ADO y me funcionó... aunque tube que sustituir la sentencia ExecProc por close - open.
Por otro lado me dirigí a la ayuda de Delphi y entendí que no todos los componentes para SP te devuelven la lista de procedimientos almacenados en el Server, por eso hay que especificar el nombre manualmente.
Bueno, Sigo con duda.
Gracias.
__________________
...que la libertad sólo existe cuando no es de nadie.

Última edición por Roilo fecha: 28-06-2007 a las 17:40:47.
Responder Con Cita
  #6  
Antiguo 28-06-2007
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
vamos a ver, ahora si me tengo que declarar falto de conocimientos porque a mi también me estuvo marcando ese error. En fin, esto es lo que tuve que hacer, cosa que me parece extraña ya que repito varias instrucciones. Pero bueno, así es como me funciona:
Código Delphi [-]
 with datamod1.UnStoredProcedure do begin
  if active then close;
  Prepare;
  ParamByName('@Palabra').AsString:= edtBuscar.Text;
  Prepare;
  ExecProc;
  Open;
  ............
  Close;
  UnPrepare;
 end; //with


Si no pongo el "Prepare" antes de darle valor al parámetro, me marca el error de "out fo bounds". Lo que me parece raro es que tengo que utilizar el prepare antes y después del parámetro, también tengo que utilice ExecProc y Open, ya que si no lo hago así, pues no funciona.

Ojala y alguien que ya alla utilizado este componente TStoredProc pueda ilustrarnos.
__________________


Última edición por ContraVeneno fecha: 28-06-2007 a las 18:23:47.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ejecutar Procedimiento Almacenado en Trigger AGAG4 SQL 16 21-09-2004 03:27:47
Ejecutar un Procedimiento almacenado saul saldaña MS SQL Server 1 03-08-2004 21:20:30
Ejecutar javascript en Intraweb Brewster Internet 1 17-06-2004 22:55:38
Intraweb: Ejecutar una consulta dentro del propio ACCESS Brewster Internet 6 09-06-2004 16:20:01
Web Snap Intraweb SOAP Server etc.. Descendents Internet 0 18-07-2003 01:41:37


La franja horaria es GMT +2. Ahora son las 20:43:04.


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