Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Ejecutar un StoredProcedure con Query (https://www.clubdelphi.com/foros/showthread.php?t=11295)

rafita 10-06-2004 12:20:20

Ejecutar un StoredProcedure con Query
 
¡Hola! Muy buenas a todos/as.

Tengo una pequeña aplicación Delphi 7 con acceso a datos (mediante ADO) en SQL Server 2000.
Siempre utilizo componentes ADOQuery para hacer las consultas, inserciones y actualizaciones de los datos.

Al utilizar la aplicación con acceso a los datos mediante línea telefónica los tiempos de respuesta se disparan bastante. Por eso intento optimizar la aplicación utilizando Procedimientos almacenados.

Según Marco Cantú:
Cita:

Es posible activar un procedimiento almacenado desde Delphi utilizando un componente Query o StoredProcedure. Con Query, se puede utilizar el código SQL:
select * from MaxSalOfTheDay("01/01/1990");
(MaxSalOfTheDay es un procedimiento almacenado en InterBase)
Generalmente es más fácil utilizar StoredProcedure cuando el procedimiento tienes vários parámetros o éstos son complejos.
Pues yo no soy capáz de ejecutar el procedimiento almacenado utilizando ADOQuery's.

- ¿SQL Server no lo permite?

- ¿Álguien sabe hacerlo?

- Si alguien sabe como hacerlo, mis consultas suelen llevar más de un parámeto ¿cómo le paso varios parámetros? ¿no los coge de los parámetros del ADOQuery?

La ventaja de ejecutarlos con ADOQuery es que tengo que hacer muy pocos cambios al código del programa, mientras que insertar nuevos componentes ADOStoredProc, cambiar los componentes enlazados a datos y cambiar el código supone mucho trabajo.

Un saludo,
Rafa.

Postdata: Inserto este mensaje en "Conexión a bases de datos" porque me parece más adecuado, aunque en "Varios" también hay mensajes relativos a este tema.

Gabriel 10-06-2004 12:40:55

Ayer mismo Marc Guillot respondio eso mismo.
A mi en Firebird me funciona perfecto.

Hola.

Naturalmente.

Ejplo. 1 : Un parámetro de entrada al procedimiento almacenado :

execute procedure Procedimiento(:PARAMETRO)

Ejplo. 2 : Un parámetro de entrada y otro de salida :

execute procedure Procedimiento(:PARAM_ENTRADA) returning_values :PARAM_SALIDA

Ejplo. 3 : Un procedimiento que devuelve varios registros, con un parámetro de entrada :

select * from Procedimiento(:PARAMETRO)

Espero que ahora lo veas más claro.

rafita 10-06-2004 14:01:59

Muy buenas Gabriel, gracias por tu interés pero creo que no me has comprendido o no me he sabido explicar bien.

Los procedimientos almacenados ya los tengo hechos y comprobados. Lo que quiero es invocarlos mediante componentes ADOQuery para no tener que modificar mucho mi código.

Ejemplo:

Código:

//  SqlText:='SELECT Descripcion FROM Usuarios WHERE Usuario='+QuotedStr(Codigo);
  SqlText:='SELECT * FROM BuscarDescripcionTrabajador ('+QuotedStr(Codigo)+')';
  ADOQuery4.SQL.Clear;
  ADOQuery4.SQL.Add(SqlText);
  try
    ADOQuery4.Open;
    {$I '.\includes\ExceptErrorBD.inc'}
  end;

BuscarDescripcionTrabajador es el procedimiento almacenado que sustituye a la línea anterior.
Al intentar ejecutar este código da el error:
"El nombre del objeto BuscarDescripcionTrabajador no es válido".Me he cerciorado que el error no está en el paso de parámetros, sino en que no me admite utilizar el nombre de un procedimiento donde él espera una tabla o vista.

¿sabe alguien cómo hacerlo o es que en SQL Server no se puede?

Voy a seguir haciendo pruebas. Ciao bambinos.

rafita 10-06-2004 14:21:20

He estado viendo el hilo que comentas, no lo había encontrado porque le falta una "d" a la palabra StoredProcedure, menos mal que tu lo tenías en mente y me lo has dicho rápidamente.

He probado todas las opciones que comentas y alguna cosa más, pero siempre me da el mismo error.

Voy a comer y luego sigo probando.
Saludos.

guillotmarc 10-06-2004 14:37:07

Hola.

En SQL Server pruebalo de esta forma :

exec NombreProcedimiento :PARAMETRO

Saludos.

rafita 11-06-2004 10:44:44

Muchas gracias Guillotmarc por tu respuesta, pero a pesar de verla un montón de veces no era capaz de hacerle funcionar: me empeñaba en meterle paréntesis, dos puntos y comillas por todas partes.

Al final volví a ver tu mensaje y lo ví clarito. Pongo el código por si alguien tuviese el mismo problema.

Código:

  // SqlText:='SELECT Descripcion FROM Codigos WHERE (Tipo='+QuotedStr(Tipo)+' AND Codigo='+QuotedStr(Codigo)+')';
  ADOQuery3.SQL.Clear;
  ADOQuery3.SQL.Add('Exec BuscarDescripcionCodigo '+Tipo+', '+Codigo);
  try
    ADOQuery3.Open;

Saludos a todos.


La franja horaria es GMT +2. Ahora son las 11:06:28.

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