PDA

Ver la Versión Completa : Manejo Del Free Y El Destroy


Robert
18-03-2004, 23:51:33
Hola con todos:
Sigo con el problema de "Capacibylity not Suported" o aveces "Invalid Parameter", no lo comenté antes pero trabajo con base de datos PARADOX y con delphi 5, he estado investigando sobre el metodos del query y encontré uno por ahi que dice FREE, dice algo como para liberar memoria y otro DESTROY que dice para destruir el objeto. Esto tiene algo que ver con mi problema gracias, y para que se utilizan esos métodos y cómo.
Si no es así por donde puede estar mi problema, el asunto es que por mas que se demore la consulta no se debe colgar, hay alguna forma de manejar esto, tal vez la configuración del BDE(aunque he estado probando algo al respecto pero nada)

GRACIAS.........es de suma urgencia..........

roman
18-03-2004, 23:55:40
No, o creo que tenga nada que ver.

"Capability not supported" generalmente se refiere a una instrucción sql que el bde no maneja. Recuerda que el bde maneja lo que se llama "sql local" que es un subconjunto del sql estándar de manera que, aun cuando reconoce la instrucción, no puede ejecutarla.

// Saludos

Robert
19-03-2004, 01:03:27
Si Ramon, pero di fuera por lo que tu dices no se ejecutaria para ningun parametro de clientes, la cosa aqui es que se ejecuta para un pequeno rango de clientes y este es el código.

El query1 tiene la siguiente sentencia
"SELECT DISTINCT COD_CLIE, REFER from CUENTAS"
"WHERE COD_CLIE=a1 and FECHA_CORTE<=a2

y esta es la parte del código que se tiene que ejecutar

while not eof CLIENTES do
begin
query1.close;
query1.Unprepared;//se supone que es para liberar recursos
query1.params[0].value:=CLIENTESCOD_CLIE.value;
query1.params[1].value:=fecha//una fecha x
query1.prepared;//se supone que es para asignar recursos para la consulta
query1.open;
while not query1.eof do
begin
//aca voy insertando datos en una tabla auxiliar
query1.next;
end;
CLIENTES.next;
end;

He estado tratando de ver si es alguna configuracion del BDE ya que trabajo con paradox, pero no encuentro nada, a ver si me puedes hechar una mano
GRACIAS...........

roman
19-03-2004, 03:02:55
Comencemos aclarando que mi nombre no es Ramón, sino Román.

Pasado este álgido punto :p te comento que a juzgar por lo que veo en tu código los parámetros en tu consulta sql están mal especificados. Cada parámetro debe estar antecedido de ':'


SELECT DISTINCT COD_CLIE, REFER from CUENTAS
WHERE COD_CLIE=:a1 and FECHA_CORTE<=:a2


Por otra parte, cuando asignes los valores de los parámetros es mejor usar ParamByName(...).AsXXX para que la conversión de tipos de datos sea correcta:


Query1.ParamByName('a1').AsInteger := CLIENTESCOD_CLIE.value;
Query1.ParamByName('a2').AsDate := fecha


(Aquí estoy suponiendo que el campo COD_CLIE es un entero)

Por otra parte, no creo que usar Query1.Unprepare sirva para liberar recursos y de hecho no tiene mucho sentido usar Unprepare y Prepare cada vez que ejecutes la consulta. El método Prepare sirve para consultas parametrizadas que se usan muchas veces y en las que sólo cambia el valor de los parámetros. Prepare 'compila' la consulta de manera que subsecuentes llamadas se realicen más rápidamente y en tal caso se hace una vez antes de muchas consultas del mismo tipo y sólo se usa Unprepare al final de estas muchas consultas. Si la consulta no se usa demasiado no creo que valga mucho la pena usar Prepare y Unprepare.

// Saludos

Robert
19-03-2004, 15:11:34
Efectivamente, la consulta está correcta, se ejecuta para un rango no muy grande de clientes, el problema viene para una tabla de clientes muy grande(unos 10,000 registros), ojo que uso paradox, la consulta tiene que recorrer esos 10,000 clientes y buscar sus referencias en la tabla cuentas que son mas de 100,000 registros hice la prueba compilando paso a paso (F8) y cuando llega la consulta se demora ligeramnete en abrirla(tengo que presionar hasta 5 veces el F8, para que abra la consulta), tal vez haya algo que hacer, pero la cuestion es que en el mensaje de error me sale "CAPABILYTI NOT SUPPORTED" o en algunos veces "INVALID PARAMETER", mi consulta es que por que me salen esos mensajes, que significan, que tengo que hacer.
OBS: solo me sale cuando la consulta es para un rango de clientes muy grande. Otra cosa, ¿será por que utilizo paradox?
GRACIAS........