[Lazarus-es] Error al intentar abrir un TSQLQuery

Ismael L. Donis Garcia ismael en citricos.co.cu
Jue Sep 5 14:30:51 CEST 2013


>----- Original Message ----- 
>From: "Maxi" <maximiliano.duarte en gmail.com>
>To: "Spanish version of Lazarus List" 
><lazarus-es en lists.lazarus.freepascal.org>
>Sent: Wednesday, September 04, 2013 8:17 PM
>Subject: Re: [Lazarus-es] Error al intentar abrir un TSQLQuery


>Ahora viendo mas detenido el codigo te digo que es por la propiedad 
>indexnames;
>Todo cambio lo debes hacer cerrada la consulta.
>Para que no se note un parpadeo entre cambios usas disablecontrols y
>enablecontrols.
>Esto deja conjelado los controles y cuando vuelve ya muesta los datos 
>nuevos.

>De todos modos si algo va a ser dinamico yo usaria directamente una
>consulta y un order by desde la consulta.

>with TSQLQuery.Create(nil) do
>try
>  asigno la conexion
> ... y demas cosas
>  sql.text:= 
> Format(CADENA_SQL,[parametro1,parametro2,parametro3,,,,,,,,,etc]) ;
>  open;
>  hago lo necesarios
>Finally
>  Free;
>end;

>CADENA_SQL la guado en una unidad con todas las consultas como
>constantes, y si hay que cambiar algo ya sabes donde está.

> CADENA_SQL:= 'select s.cuenta, s.subcta, s.capitulo, s.subcap, s.elemento, 
> '+
>                           ' s.empresa, s.debe, s.haber, s.saldo,
>s.nat, s.descripcion, '+
>                           ' s.nota, s.nota1, s.nota2, s.nota3,
>s.sctaor, s.capor, '+
>                           ' s.scapor, s.eleor, s.empor from scsal s
>where (s.idsa is null)' +
>                           ' order by cuenta; sctaor; subcta; capor;
>capitulo, scapor, subcap, eleor, elemento, empor,empresa';

>Te sugiero el uso de vistas en el motor, te resuelven muchas cosas y
>mejoran la velocidad.
>-- 

El TSQLQuery lo tengo puesto en tiempo de diseño en un DataModule, al igual 
que el SQLTransaction y el IBConnection

TSQLTransaction.name:='trasc3';
TSQLQuery.name:='rssc3';

Como dije antes tengo este procedimiento:


procedure Tdm.p_rssc3();
begin
  if trasc3.Active then trasc3.EndTransaction;
  rssc3.Close;
end;

procedure Tdm.p_rssc3(sqlstr: string; blnread: boolean);
begin
  p_rssc3();
  rssc3.IndexFieldNames:='';
  rssc3.Filter:='';
  rssc3.SQL.Clear;
  rssc3.SQL.Text := sqlstr;
  rssc3.ReadOnly := blnread;
  trasc3.StartTransaction;
  rssc3.Open;
end;

Yo se que el error me lo está dando la propiedad IndexFieldNames, porque de 
hecho si la quito, no me da el error. El problema es que en una consulta 
para visualizar un informe la necesito y por tal motivo la uso.

Ahora si muestro ese informe y trato de mostrar otro informe me da dicho 
error al intentar abrir de nuevo el TSQLQuery. Para mi ese es un bug del 
componente en si. Como que no coge la propiedad: rssc3.IndexFieldNames:='';

No puedo hacer vistas en la BD porque como ya dije antes es una consulta de 
multiple bases de datos y por tal motivo lo que hago es abrir la consulta 
vacia y después le agrego los valores optenidos en otras consultas. Es decir 
los registros del TSQLQuery yo los lleno a partir de varias consultas 
mediante:

strsql:='xxxxx';
dm.p_rssc7(strsql, true, true)
while not dm.rssc7.EOF do begin
    dm.rssc3.Append;
    ....
   dm.rssc3.Post;
   dm.rssc7.Next;
end;


Saludos Reiterados
========
| ISMAEL |
========






More information about the Lazarus-es mailing list