• Lunes 6 de Mayo de 2024, 03:04

Autor Tema:  Problemas Con Tadostoredproc  (Leído 3039 veces)

david.rguez

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Problemas Con Tadostoredproc
« en: Lunes 3 de Julio de 2006, 00:19 »
0
Hola a todos/as:

Programo en Delphi 2005 y utilizo una BBDD SQL Server. Mi problema es a la hora de utilizar un TADOStoredProc para realizar un select sobre una tabla.

Yo preparo el parámetro y hago un open sobre el componente. Perfecto, la primera vez funciona perfectamente, los datos se muestran en el DBGrid que está enlazado. Sin embargo, si en la misma ejecución de la aplicación realizo de nuevo otra búsqueda (otra vez ese procedimiento), me da error de memoria (cada vez que se invoque al componente, lo cierra, prepara el valor del parámetro actual y lo vuelve a abrir).

No tengo el código ahora mismo aquí, pero creo recordar que las operaciones eran las siguientes (sobre el ADOStoredProc)

ADOStoredProc1.Close;
ADOStoredProc1.Parameters.Refresh;
ADOStoredProc1.Parameters.ParambyName('@cliente').Value:= '00001';
ADOStoredProc1.Open;

(no sé si el código lo tenía EXACTAMENTE así pero en resumen son esas las operaciones que tengo).

¿Por qué la primera vez sí lo hace bien y a partir de la segunda da error de memoria?

Un saludo:

David R.

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Problemas Con Tadostoredproc
« Respuesta #1 en: Jueves 6 de Julio de 2006, 02:36 »
0
Que tipo de error te da?
Lo que puede pasar es que intenes cerrar algo que ya está cerrado y te manda el error de memoria.
Proba sacar la siguiente line, o ponerla mediante una condicion, (cerrar si está abierto)
Citar
ADOStoredProc1.Close;

david.rguez

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: Problemas Con Tadostoredproc
« Respuesta #2 en: Jueves 6 de Julio de 2006, 12:15 »
0
Hola, Enko:

   Me sale una excepción EAccessViolation con el mensaje: "Access Violation at address 4E3B3724 in module 'sqloledb.dll'. Read of address 00000018".

El problema me sale a partir de la 2ª búsqueda, con lo que no es problema de que cierre lo que esté cerrado (de ser así, me daría error en la primera vez, ya que cierra aunque esté cerrado (valga la redundancia). El código que tengo es

ADOStoredProc1.Prepared:= false;
ADOStoredProc1.Close;

ADOStoredProc1.Parameters.Refresh;
ADOStoredProc1.Parameters.ParamByName('@tipo').Value:= 1;
ADOStoredProc1.Parameters.ParamByName('@clave').Value:= enbusca.Text;
ADOStoredProc1.Prepared:= true;
ADOStoredProc1.Open;



Como ya dije, la primera vez funciona correctamente.

Un saludo:

     David R.

elchay

  • Miembro activo
  • **
  • Mensajes: 26
    • Ver Perfil
Re: Problemas Con Tadostoredproc
« Respuesta #3 en: Martes 11 de Julio de 2006, 03:46 »
0
prueba de esta manera si estas utilizando sql server crea un procedimiento almacenado en sql server que contega el select que mesionas con sus parametros de entrada

luego en delphi enlaza el adoprocedure al procedimeinto en sql usando las propiedades de coneccion del adoproce.  

luego cuando quieras  obtener la informacion escribe el siguiente codigo

 adoprocedure.close;
   adoprocedure.parameters[1].value:=el valor correspondiente al parametro que tiene  en el indice de la propiedad parameters  del adoprocedure
 asi para los demas parametros
 adoprocedure.parameters[1].value:=
adoprocedure.parameters[1].value:=
 luego
adoprocedure.open;

asi no tendras porblemas
si no te funsiona me avisas

david.rguez

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: Problemas Con Tadostoredproc
« Respuesta #4 en: Martes 11 de Julio de 2006, 10:06 »
0
elchay, probé lo que me dijiste y ahora el módulo de búsqueda funciona correctamente aunque se ejecute 296761316 veces ^^

Muchas gracias por la información.

Y ahora meramente por curiosidad... ¿por qué de la otra forma no funcionaba?


Un saludo:

    David R.