PDA

Ver la Versión Completa : Lentisima la conexion con DB2 del AS400


Javier_A
10-11-2003, 13:06:04
Estoy intentando acceder a las tablas del AS400, con las instruccion tipica' While Not EOF Do ', y tarda mas de 30 seg. en responder y con las instrucciones GotoKey y GotoNearest no lo he podido conseguir.
¿ Alguien conoce alguna manera mas rapida de acceso ?, y respecto al GotoKey y GotoNearest empleo la misma forma que uso con Paradox, ¿ por que no funciona ?.

Gracias

__cadetill
10-11-2003, 15:33:04
Qué componentes utilizas (BDE u otros)? Que tipo de conexión (ODBC, acceso nativo,.....)?

Yo utilizo un acceso nativo (ClientObject 400) via los componentes del BDE y, el Table.Eof o FindKey o Locate o SetRange,....... los utilizo sin problemas

Javier_A
10-11-2003, 15:49:13
Ante todo gracias por tu ayuda.

Ultilizo componentes BDE y la conexion ODBC, ( desconozco los accesos nativos ), y como te he comentado el Table.eof tarda muchisimo, el resto quizas sea de que no los empleo con la adecuada correccion, pues, las tablas a las que intento acceder tienen varios indices y yo solo busco a traves de uno de ellos; quizas este sea el motivo de que no aparecen el resultado adecuado.

Un saludo

__cadetill
10-11-2003, 15:57:33
Pero que es lo que te tarda, la verificación de Eof o el recorrido por la tabla (el Next)?

Es decir

while not Tabla.Eof do

es esto lo que te tarda y por cada registro? sólo al final cuando realmente se cumple la condición?

o bien al hacer

Tabla.Next;

dentro del bucle?

También podrías mirar la capacidad del As400. Si está demasiado lleno (del 80%-85% en adelante), esto podría provocar lentitud en el sistema.

Javier_A
10-11-2003, 16:11:01
Estas son las instrucciones, tardan en encontrar la informacion.


With Table2 DO
Begin
First;
While Not EOF Do
Begin
If Table2CODART.Value = Edit1.Text Then
Begin
Edit2.Text:=Table2CODART.Value;
Edit3.Text:=Table2DESART.Value;
end;
Next;

Y este grupo de instrucciones no me localizan el reg. adecuado, sale otro que no tiene nada que ver con lo que busco. ( La tabla tiene 2 indices y yo solo busco a traves de uno ).

Table2.Active:=True;
Table2.SetKey;
Table2.FieldByName('CODART').AsString:=copy(Edit1.text,1,length(Edit1.text));
Edit2.text:=Table2.FieldByName('CODART').AsString;
Table2.GotoKey;
end;

Perdona por las molestias, un saludo

__cadetill
10-11-2003, 16:47:07
Con lo que respecta al bucle, parece todo correcto, prueba a mirar lo de la capacidad que te comentaba anteriormente

Lo del SetKey, prueba a cambiarlo por un FindKey (nunca he utilizado el SetKey, pero con FindKey no he tenido ningún problema)


Table2.Open;
Table2.FindKey([Edit1.text]);