Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-06-2008
CharlesWar CharlesWar is offline
Registrado
 
Registrado: may 2008
Posts: 5
Poder: 0
CharlesWar Va por buen camino
Error "Invalid Parameter" usando Tquery cuando proceso una consulta grande

Les expongo este problema raro pero muy raro q tengo, resulta q en una forma ejecuto 10 Tquerys con 3 TTables, si ejecuto una consulta con un periodo de fechas largo 1 mes por ejemplo se truena marcandome "invalid parameter", me voy al Debug para ver donde se traba y resulta q las variables por parametro de mi sentencia sql no tienen valor es mas aparecen como no definidas, como si hubiesen desaparecido de la memoria, por eso el mensaje de error de "parametro no valido" pero q alguien me explique porq la memoria pierde los valores de las variables si antes ya estan declaradas y asignadas con valores. Pero si ejecuto con un rango pequeño p.e. maximo 12 dias (depende mucho la cantidad de datos entre dias) lo hace perfectamente bien. Ya he probado liberar memoria, free, destroy, etc y nada. al contrario me aparecen errores de memoria. Alguien q le haya sucedido esto y si pudieron resolver este problema? Gracias.
Responder Con Cita
  #2  
Antiguo 18-06-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
No creo que sea un problema por falta de memoria. Puedes poner el codigo donde asignas la consulta con los parametros?
Responder Con Cita
  #3  
Antiguo 18-06-2008
CharlesWar CharlesWar is offline
Registrado
 
Registrado: may 2008
Posts: 5
Poder: 0
CharlesWar Va por buen camino
q_detallefac.First;
while not q_detallefac.Eof do
begin
if (copy(q_detallefac['CVE_ART'],1,2)<>'00') AND (q_detallefac['PREC']>0) and (importe>0) then
begin q_ParFac.sql.Clear;
q_ParFac.SQL.Add ('Select * from PARTIDAS_FAC');
q_parfac.sql.add (' where sucursal=' + QuotedStr(trim(inttostr(num_sucursal))));
q_parfac.sql.add (' and trim(FACTURA)=' + QuotedStr(TRIM(q_cobranza['refer'])));
q_parfac.SQL.add (' and trim(CVE_CONC)=' + QuotedStr(TRIM(q_detallefac['cve_art'])));
q_parfac.SQL.add (' and CANTIDAD=' + QuotedStr(TRIM(inttostr(q_detallefac['cant']))));
q_ParFac.Active:=true;
anticipo:=0;
hay_partida:=0;
if q_parfac.RecordCount>0 then
begin
hay_partida:=1;
if q_parfac['Pagado']<q_parfac['subtotal'] then
anticipo:=q_parfac['pagado'];
end; if (hay_partida=0) or ((hay_partida=1) and (anticipo>0)) then
begin
dias:=q_cobranza['FECHA_APLI']-q_facturas['FECHA_DOC'];
nom_agente:=' '; q_agentes.sql.clear;
q_agentes.sql.add('select * from Vendedores');
q_agentes.sql.add(' where numero=' + quotedstr(trim(num_agente)));
q_agentes.SQL.add(' and sucursal=' + quotedstr(trim(inttostr(num_sucursal))));
q_agentes.Active:=true;
if q_agentes.RecordCount>0 then
nom_agente:=q_agentes['nombre']
else
nom_agente:='NULL'; por lo regular num_agente me dice q valor indefinido cuando al inicio siempre la inicializo al menos con 0
Responder Con Cita
  #4  
Antiguo 18-06-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Creo que el problema viene por que estas trabajando los valores directamente como variants sin asignarles un tipo. Prueba de acceder a los valores mediante Query1.FieldByName('CAMPO').Asstring/asfloat/asinteger/asdatetime y trabajar de esta manera ( o mediante Query1.ParamByName('CAMPO').As...).

PD: dias que tipo de variable es? es variant tambien?

Última edición por coso fecha: 18-06-2008 a las 20:51:52.
Responder Con Cita
  #5  
Antiguo 18-06-2008
CharlesWar CharlesWar is offline
Registrado
 
Registrado: may 2008
Posts: 5
Poder: 0
CharlesWar Va por buen camino
ok. voy a intentarlo, pero sabes q es lo mas chistoso q este programa lo ejecuto en mi pc y funciona correctamente, en cambio en otras pc's no lo hace bien marca el error,
Responder Con Cita
  #6  
Antiguo 18-06-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Creo haber encontrado el error, pero no borro todo el mensaje que ya había escrito:
Código Delphi [-]
if q_agentes.RecordCount>0 then
nom_agente:=q_agentes['nombre']
else
nom_agente:='NULL'
ojito con los nulos que la sintaxis en sql es distinto a cualquier otro valor, ejemplo correcto:
Código SQL [-]
select * from tabla where Micampo is null

Ejemplo incorrecto (dará fallo en ejecución):
Código SQL [-]
select * from tabla where Micampo = null


... y ahora el resto del mensaje:

Lo primero que veo es eso del if copy (..... ) <> '00' ¿seguro que la consulta va a tener registros que cumpla esa condición siempre ?

if q_parfac.RecordCount>0 then sustitúyelo por if not q_parfac.IsEmpty then
El recordCount puede no estar implementado según el motor de bases de datos y devolver cero o menos uno "-1" pero no el valor correcto.

En cuanto al fallo de parámetros, normal, lo primero es que no tienes parámetros en tus sqls, los parámetros se definen dentro del sql, por ejemplo:

Código Delphi [-]
   query1.sql.text := 'select nombre from tabla where nombre = :MiNombre';
  query1.parambyname('MiNombre').AsString:= 'lo que sea y del tipo que sea';
  query1.open;
Pero tú no usas nada de eso, es lógico que el debugger te diga que los parámetros están vacíos.

tus sqls son dinámicas y no tienen parámetros. De hecho, se inventaron los parámetros para no montar el lío ese de "QuotedStr(TRIM("

Es muy probable que el error venga por el valor de algún campo involucrado en el where de esas consultas.

El que no aparezca en el debugger puede ser tan simple como por ejemplo, no mostrarlo por optimización.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Error "Invalid field Type" entre Delphi 2007 y Firebird 1.5 saltamirano Varios 2 25-12-2007 00:38:07
Error "Invalid pointer operation" en función contenida en DLL Albano OOP 2 21-06-2007 00:01:31
Acceso a Outlook 2003 Reminders y error "Invalid Variant Operation" saldanaluis Providers 2 24-05-2007 22:17:58
alguien sabe como es esto me tira error en la lineadel where "invalid use of keyword" todook Conexión con bases de datos 5 16-11-2006 22:58:02
Error "Invalid User/Password" al intentar conectar con dbexpress vivim82 Conexión con bases de datos 1 30-04-2004 04:22:49


La franja horaria es GMT +2. Ahora son las 17:26:25.


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