Ver Mensaje Individual
  #1  
Antiguo 05-03-2015
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Reputación: 18
anubis Va por buen camino
Consultas concatenadas

Hola de nuevo amigos,

En relación a otro post que me habíais contestado relacionado con acciones en una base de datos remota y que, sobre otras bases de datos como mysql, que los clientes no tienen problema a conectar y acceder a los datos con conexiones paupérrimas, vengo de nuevo a preguntar si me lo permitis.

Hemos quedado que no es conveniente hacer
Código Delphi [-]
Select * from tabla
porque esto nos hace que descargue al cliente todos los datos de la tabla sin ser necesarios únicamente los que vamos a usar, pues bien, desgraciadamente no encuentro otra solución puesto que tengo que usar datos de varias tablas y visualizarlos .

He probado a hacer

Código SQL [-]
SELECT r.* ,f.* FROM TCHEQUES r, tbeneficiario f  where EXTRACT(MONTH FROM r.cfecha)=02 and EXTRACT(YEAR FROM r.cfecha)=2015  and r.ccuenta=1 and r.CBENE=f.CLAVEB'
Combinando dos tablas, tcheques y tbeneficiario.

Cosa que en flamerobin me funciona bastante bien, tardando unos 35 segundos en "traer" 26 registros combinados (nose si es una velocidad aceptable), me visualiza el nombre del beneficiario en vez del codigo de beneficiario almacenado en la tabla tcheques.

El problema ocurre en lazarus para windows con componentes zeos, ahi tengo que hacer primero
Código SQL [-]
select * from tbeneficiario where claveb=0
porque de otra forma me da error en otros accesos iniciales y ademas el nombre no me lo visualiza, aparece en blanco. Si llegara a poner
Código SQL [-]
select * from tbeneficiario
en la carga inicial de las tablas, ya no tengo problema.
De todas formas, el campo nombre que visualizo en un campo blob (memo) que no he tenido problema anteriormente porque lo convierto

Código Delphi [-]
procedure Tmodulodatos.ZchequesCalcFields(DataSet: TDataSet);
 VAR
   S:STRING;
 begin
   S := DataSet.FieldByName('NOMBRE').AsString;
   if Length(S) > 100 then
     S := Copy(S, 1, 100) + '[...]';
   DataSet.FieldByName('muestrabene').AsString := S; 
end;

Asi que no se como se pueden optimizar las consultas sin tener que hacer verdaderas barbaridades.

Perdonad el "plastazo"
Responder Con Cita