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 Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-05-2004
Sick boy Sick boy is offline
Miembro
 
Registrado: may 2003
Ubicación: Cantabria
Posts: 245
Poder: 21
Sick boy Va por buen camino
Invalid parameter

Hola,

Esto que sucede es raro, raro, raro, pero veo que le ha pasado a mas gente, y parace que nadie sabe por qué sucede.
El problema sucede al menos con Delphi 5 y Paradox 7

Lo que pasa es que al ejecutar un query sale el mensaje "Invalid Parameter", y te vuelves loco buscando el parametro que pasas a la query y que da el error. Lo curioso es que sucede tambien con querys SIN PARAMETROS.

Otra cosa que sucede es que despues de ese error, no se ejecutan más querys correctamente, todas dan "invalid Parameter".

Tampoco esta definido cuando empieza a dar esos errores, puede suceder a las 2 horas de iniciar el programa, a las 4 horas......

Buscando información en estos foros encontre un mensaje respondido por Marcoszorrilla, de este mismo año:
http://www.clubdelphi.com/foros/show...alid+parameter
En el, se exponia que se hacian multiples querys y en un momento dado dejaban de funcionar.
Con el consejo de marcos parece que se soluciona, pero el problema sigue ahi.

En un foro encontre esto:

Cita:
Re: Invalid Parameter after xxx select queries

--------------------------------------------------------------------------------

Thanx for your answers guys ! I just found a "work around" by myself. First i tried
the following test:

// Delphi5 // i have one database1 component and query5 attached to it. // clips is
paradox7 table.

Código Delphi [-]
for i:=1 to 5000 do 
begin 
  query5.close; 
  query5.sql.clear;
  query5.sql.add('Select *from clips where id=56');
  try
    query5.open
  except
    showmessage(inttostr(i)); 
  end; 
end;
So i found out that after 1534 (sometimes 1535) sql queries it crash with "invalid
parameter" error. And even more: All sql queries after 1535 are also crashing ! e.g
"1536,1537..." I also noticed that pdoxusrs.lck file in project directory is growing
after each SQL query - in this case after each "query5.open". and the program crashes
when the file is around 26MB. The I come up with an idea. I tried to
"database1.close" and I saw that pdoxusrs.lck file disappear. so i think it's some
kind of refresh for it. following code works perfectly for me:

Código Delphi [-]
for i:=1 to 5000 do 
begin 
  query5.close;
  query5.sql.clear; 
  query5.sql.add('Select * from clips where id=56');
  try 
    query5.open 
  except 
    database1.close;
    database1.open; 
  end; 
end;
...and all the 5000 queries are done Again - thx for your responses ! Love that
google groups thing
De lo que se deduce que es nuestro amigo pdousrs.lck el que provoca el error.
Ahora, a mi me esta sucediendo esto mismo, solo en una maquina, pero lo curioso es que NO ESTA EN RED, ni tengo un TDatabase, asi que no se que "cerrar" para liberar el pdousrs.lck

La query en cuestion, tampoco modifica registros, es un SELECT "normalito", con REQUESTLIVE=False, AUTOREFRESH=False y CACHEDUPDATES=False


Seria muy interesante conocer dos cosas:
¿ Por qué crece el fichero pdousrs.lck ?
¿ Como liberar pdousrs.lck ?

Muchas gracias

Última edición por Sick boy fecha: 29-05-2004 a las 13:36:46.
Responder Con Cita
  #2  
Antiguo 30-05-2004
Delfino Delfino is offline
Miembro
 
Registrado: jul 2003
Ubicación: Madrid
Posts: 974
Poder: 21
Delfino Va por buen camino
Si no me falla la memoria ese problema tiene una solucion expuesta en el CodeCentral, busquelo a ver si encuentras..
Responder Con Cita
  #3  
Antiguo 30-05-2004
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
De acuerdo con esta información que voy a pegar, puede ser que tengas las tablas y el ejecutable en la misma carpeta?

Cita:
"Lock file has grown too large" ($2517)
Problem: There are several causes for this error.
Solution: The most common cause of this error is having the table you are accessing located in the same
directory as the executable itself. Also set the NetFileDir and PrivateDir properties (of the Session
object) to point to different directories. The PrivateDir property should be a directory on the local
system's hard drive for maximum performance and stability.
Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #4  
Antiguo 30-05-2004
Sick boy Sick boy is offline
Miembro
 
Registrado: may 2003
Ubicación: Cantabria
Posts: 245
Poder: 21
Sick boy Va por buen camino
Gracias, por la ayuda, estoy buscando por code central, a ver si encuentro el tema...

No marcos, no estan en la misma carpeta.
El ejecutable, las bases de datos y el fichero .lck estan cada uno en carpetas distintas.

El sistema operativo que esta dando el error es un Milenium, no se si ayuda un poco....

He probado 100.000 ejecuciones de un query, y el fichero en cuestion no crecio nada !!!!
Claro, que lo probe en un XP con 512mb, y P2.4 (tardó 20.14 min, unos 0.013 seg/query)

Sigo buscando......
Responder Con Cita
  #5  
Antiguo 31-05-2004
Sick boy Sick boy is offline
Miembro
 
Registrado: may 2003
Ubicación: Cantabria
Posts: 245
Poder: 21
Sick boy Va por buen camino
En CodeCentral no encontre lo que buscaba (encontre un monton de cosas interesantes, pero nada aplicado al problema que tengo).

He intentado llevar al fallo mi BDE, pero no consigo reproducir el error.

En el codigo de mi programa hay una query que se repite cada 30 segundos buscando una información (es un SELECT).
Si la informacion es correcta (se comprara con la hora) va a un bloque de codigo, si no es correcta (en el caso en cuestion nunca es correcta) hace un exit y sale del procedimiento del timer.

Me he fijado, y antes de salir no hace un query.close, pero si que lo hace antes de introducir la cadena de busqueda, el tipico queryx.close; queryx.sql.clear.....

¿Puede ser eso?
Ya he puesto el query.close antes de hacer el exit, pero al no poder reproducir el error, no se si funcionará.

Saludos,
Responder Con Cita
  #6  
Antiguo 27-03-2008
fomemv fomemv is offline
Registrado
 
Registrado: abr 2006
Posts: 1
Poder: 0
fomemv Va por buen camino
Smile invalid parameter

No se si todavia le sirve a alguien, pero le paso "una" solución por las dudas.
No interesa en que database o path o aliases se ubiquen las tablas e incluso los queries (consultas) el programa en el directorio del ejecutable, la cuestion es que cuando se ejecutan los queries se crean archivos temporales sucesivamente (repito: en el directorio del ejecutable), comenzando con _QSQL000.DBF, luego _QSQL001.DBF, y así hasta llegar al _QSQL999.DBF, momento en el cual ya no genera el temporal _QSQL1000.DBF sino que produce un error de "invalid parameter", aunque no tengamos ningún parametro, primero se bloquen algunos queries y luego ya ni el programa se ejecuta.
Esos archivos se pueden abrir con el BDE, tienen cabecera o campos pero no registros (hasta donde vi).
Como son temporales se borran y listo, ya soluciona el problema. Se podría hacer una pequeña rutina para que borre automaticamente dichos archivos al salir del programa por ejemplo. Ahora porque se produce eso no me pregunten. Saludos. Francisco. fmasloski@arnet.com.ar
Ojalá les sirva todavia.
Responder Con Cita
  #7  
Antiguo 27-03-2023
genyus00 genyus00 is offline
Miembro
 
Registrado: jun 2010
Posts: 29
Poder: 0
genyus00 Va por buen camino
Llegue a este tema dado que actualmente se me ha presentado el caso, pero bueno ya han pasado de esto vario añitos, y con ellos varias versiones de Delphi- Hoy en dia voy en Delphi Alexandria y las conexiones comunes o son con los Zeos o con Firedac, en todo caso el error es el mismo "Invalid parameter." sin mas informacion al respecto. en mi caso me tomo tiempo hasta que empece a probar cada uno de los campos que recupero en mi consulta, pues tengo campo que reemplazo por ser de un origen diferente al de mi base de datos. estos campo son de tipo texto y los reemplazao haciendole quotedstr(valor):

Código Delphi [-]
sSQL := 'SELECT (DT.IDENTIFICACION) AS "3_BEN_Numero identificacion",'+
'   (DT.APELLIDO1) AS "3_BEN_Primer apellido",'+
'   (DT.APELLIDO2) AS "3_BEN_Segundo Apellido",'+
'   (:nombre) AS "3_BEN_NombredeArrendador",'+
'   (:telefono) AS "3_BEN_TelefonoArrendador",'+
' FROM referencias_solicitud'+
'  WHERE SC.NUMPAG = 848701';

los parametros nombre y telefono los reemplazo con una funcion personal de nombre "cambiaen":

Código Delphi [-]
      sSQL := CambiaEn(sSQL,':nombre',quotedstr(strnomAfiliado));
      sSQL := CambiaEn(sSQL,':telefono',quotedstr(strtelfiliado));

cuando los parametros tiene infomacion se asigna la sql como :

Código Delphi [-]
   (''JOSE'') AS "3_BEN_NombredeArrendador",
   (''123455'') AS "3_BEN_TelefonoArrendador",

pero si el dato viene vacio al hacer el cambiaen queda:

Código Delphi [-]
   ('''') AS "3_BEN_NombredeArrendador",
   ('''') AS "3_BEN_TelefonoArrendador",

y aca nacio en mi caso el error "Invalid parameter." , la solucion fue que cuando la variable sea vacia, reemplazarla por un espacio de modo la sql quede como;

Código Delphi [-]
   ('' '') AS "3_BEN_NombredeArrendador",
   ('' '') AS "3_BEN_TelefonoArrendador",

Bueno, espero les sirva este analisis del caso que me trajo hasta esta link.

Última edición por Casimiro Notevi fecha: 27-03-2023 a las 12:29:16.
Responder Con Cita
  #8  
Antiguo 28-03-2023
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
El problema es que cualquier parte de una SQL NO PUEDE ser un parámetro.
Es decir, puedes hacer esto:

Código SQL [-]
SELECT * FROM TABLA WHERE (NOMBRE=:Nombre)

Pero no puedes hacer esto:

Código SQL [-]
SELECT CAMPO1, CAMPO2, :OtroCampo FROM TABLA

Creo que lo que estás haciendo tú es lo segundo y no está permitido.

En este último caso, como en el tuyo, debes crear la SQL concatenando valores.

Código Delphi [-]
sSQL := 'SELECT CAMPO1, CAMPO2, ' + strNombreCampo + ' FROM TABLA';
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
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 11:47:26.


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