Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-06-2004
rafita rafita is offline
Miembro
 
Registrado: ago 2003
Ubicación: Cuenca- España.
Posts: 309
Poder: 21
rafita Va por buen camino
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.
__________________
Rafita.
Responder Con Cita
  #2  
Antiguo 10-06-2004
Gabriel Gabriel is offline
Miembro
 
Registrado: may 2003
Ubicación: PalauTordera
Posts: 115
Poder: 21
Gabriel Va por buen camino
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.
__________________
Gabriel
Responder Con Cita
  #3  
Antiguo 10-06-2004
rafita rafita is offline
Miembro
 
Registrado: ago 2003
Ubicación: Cuenca- España.
Posts: 309
Poder: 21
rafita Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 10-06-2004
rafita rafita is offline
Miembro
 
Registrado: ago 2003
Ubicación: Cuenca- España.
Posts: 309
Poder: 21
rafita Va por buen camino
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.
__________________
Rafita.
Responder Con Cita
  #5  
Antiguo 10-06-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
Hola.

En SQL Server pruebalo de esta forma :

exec NombreProcedimiento :PARAMETRO

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #6  
Antiguo 11-06-2004
rafita rafita is offline
Miembro
 
Registrado: ago 2003
Ubicación: Cuenca- España.
Posts: 309
Poder: 21
rafita Va por buen camino
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.
__________________
Rafita.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 22:32:33.


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