Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Lentisima la conexion con DB2 del AS400 (https://www.clubdelphi.com/foros/showthread.php?t=5131)

Javier_A 10-11-2003 13:06:04

Lentisima la conexion con DB2 del AS400
 
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)

Código:

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



La franja horaria es GMT +2. Ahora son las 11:25:46.

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