[Lazarus-es] Error al intentar abrir un TSQLQuery

Maxi maximiliano.duarte en gmail.com
Jue Sep 5 17:17:20 CEST 2013


me parece que es un bug del componente, te paso un demo que hice y me
da el mismo error pero es aleatorio.
Te sugiero que trates de usar el order by en vez de lo indexname

El día 5 de septiembre de 2013 10:54, Maxi
<maximiliano.duarte en gmail.com> escribió:
> Ya te hago un demo, y te lo envio. Usas firebird?
> si es asi, recordá crear estos indices individuales, asi los aprovecha
> si está la base en el motor, si es local o en memoria da igual.
>
> El día 5 de septiembre de 2013 09:50, Ismael L. Donis Garcia
> <ismael en citricos.co.cu> escribió:
>> Campos creados? No nunca en tiempo de diseño le he agregado campos. Siempre
>> lo he trabajado de la forma que explico más abajo.
>>
>> No, yo solo inserte los objetos  TIBConnection, TSQLTransaction y TSQLQuery
>> en un DataModule y san se acabo.
>>
>> Después los uso con procedimientos púbicos de la siguiente manera.
>>
>> 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:=''; //Esta propiedad se la puse ahora pero hace
>> caso omiso de ella donde quiera que la ponga.
>>
>>   rssc3.Filter:='';
>>   rssc3.SQL.Clear;
>>   rssc3.SQL.Text := sqlstr;
>>   rssc3.ReadOnly := blnread;
>>   trasc3.StartTransaction;
>>   rssc3.Open;
>> end;
>>
>> Repito que si no uso la propiedad IndexFieldNames, pero me es necesaria para
>> mostrar un reporte. Si no muestro ese reporte todo funciona bien. Y si le
>> quito dicha propiedad al reporte también todo funciona bien menos el reporte
>> que no me sale de la forma correcta. Ya que al LastReport hay que pasarle
>> los datos organizados porque carece de una propiedad IndexFieldNames. Porque
>> si la tuviera podría hacer:
>>
>> TfrDBDataSet.DataSet.IndexFieldNames:='xxxxxx';
>>
>> Y no tendría que usar la propiedad IndexFieldNames del TSQLQuery. Pero aun
>> así creo que eso es un bug del TSQLQuery. Pero por sierto que me tiene
>> trancado de tal forma que no se como resolverlo.
>>
>> Esta tarde trataré de mirar el código del TSQLQuery a ver si puedo dar con
>> el problema. O talves Maxi que tu también dominas más este lenguaje le
>> podrías hechar una miradita. Porque la verdad que ya no se porque vía mirar
>> desde un usuario normal, ósea sin urgar en el código de los componenetes de
>> Lazarus.
>>
>> Saludos Reiterados
>> ========
>> | ISMAEL |
>> ========
>> ----- Original Message -----
>>
>> From: Maxi
>> To: Spanish version of Lazarus List
>> Sent: Wednesday, September 04, 2013 7:10 PM
>> Subject: Re: [Lazarus-es] Error al intentar abrir un TSQLQuery
>>
>> Tenes campos creados en el.objeto?
>>
>> El 04/09/2013 17:33, "Ismael L. Donis Garcia" <ismael en citricos.co.cu>
>> escribió:
>>>
>>> Si probe poner por todos lados y sin ningún efecto.
>>>
>>> Lo puse en las siguientes partes:
>>>
>>>
>>> procedure Tdm.p_rssc3();
>>> begin
>>>   if trasc3.Active then begin
>>>     rssc3.IndexFieldNames:='';
>>>     trasc3.EndTransaction;
>>>   end;
>>>  rssc3.IndexFieldNames:='';
>>>  rssc3.Close;
>>> end;
>>>
>>> procedure Tdm.p_rssc3(sqlstr: string; blnread: boolean);
>>> begin
>>>   p_rssc3();
>>>   rssc3.IndexFieldNames:='';
>>>   rssc3.Filter:='';
>>>   rssc3.IndexFieldNames:='';
>>>   rssc3.SQL.Clear;
>>>   rssc3.IndexFieldNames:='';
>>>   rssc3.SQL.Text := sqlstr;
>>>   rssc3.IndexFieldNames:='';
>>>   rssc3.ReadOnly := blnread;
>>>   rssc3.IndexFieldNames:='';
>>>   trasc3.StartTransaction;
>>>   rssc3.IndexFieldNames:='';
>>>   rssc3.Open;
>>> end;
>>>
>>> Sin ningún resultado satisfactorio. Me sigue diciendo que no tiene el
>>> campo "empor". Yo se que no está ya que está en la consulta anterior. No en
>>> la que quiero realizar cuando me da error.
>>>
>>> No puedo usar order by en la consulta porque es una consulta calculada. Si
>>> miras bien en la consulta aparece "where (s.idsa is null)"
>>>
>>> Donde "idsa" es la clave primaria de la tabla, por tal motivo la consulta
>>> no devuelve ningún registro ya que posteriormente es que se le agrega
>>> mediante la instrucción.
>>>
>>> dm.rssc3.Append;
>>> ...
>>>
>>> Como ves lo intentado de todas las formas. Por lo que no se si será un
>>> problema del TSQLQuery.
>>>
>>> Estoy Usando Firebird 2.5.2 Update 1 como base de datos.
>>> ========
>>> | ISMAEL |
>>> ========
>>> ----- Original Message -----
>>>
>>> From: German
>>> To: Spanish version of Lazarus List
>>> Sent: Wednesday, September 04, 2013 3:47 PM
>>> Subject: Re: [Lazarus-es] Error al intentar abrir un TSQLQuery
>>>
>>> Hola Ismael
>>>
>>> Probaste de agregar :
>>> rsc3.IndexFieldNames := '';
>>> dentro de tu procedimiento procedure Tdm.p_rssc3(sqlstr: string; blnread:
>>> boolean);  ??
>>>
>>> De cualquier manera no te convendria usar "order by" en tu query?, es
>>> decir agregar al final de tu cadena strsql:=strsql+ ' order by cuenta,
>>> sctaor, subcta, capor, capitulo, scapor, subcap, eleor, elemento, empor,
>>> empresa';
>>> Luego si necesitas otro orden podes modificar el query ya que de cualquier
>>> manera lo cerras y volves a abrir.
>>>
>>> saludos!
>>>
>>> German
>>>
>>> El 04/09/2013 04:35 p.m., Ismael L. Donis Garcia escribió:
>>>
>>> Cuando intento abrir un TSQLQuery que previamente lo había abierto y
>>> después le había pasado como parámetro un grupo de índices cuando lo intento
>>> abrir de nuevo con otro SQL me dice que un campo no existe. Yo se que no
>>> existe porque no está en el SQL, estaba en el SQL con que lo había abierto
>>> anteriormente, pero no con el que lo estoy intentando abrir de nuevo.
>>>
>>> Relizo lo siguiente:
>>>
>>> strsql := 'select s.cuenta, s.subcta, s.capitulo, s.subcap, s.elemento,
>>> s.empresa, s.debe, s.haber, s.saldo, s.nat, s.descripcion, ';
>>> strsql := strsql + '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)';
>>> dm.p_rssc3(strsql, false);
>>>
>>> después le paso un índice d ela siguiente forma:
>>>
>>> dm.rssc3.IndexFieldNames:='cuenta; sctaor; subcta; capor; capitulo;
>>> scapor; subcap; eleor; elemento; empor; empresa';
>>>
>>> Y cuando lo intento abrir de nuevo con:
>>>
>>> strsql := 'select s.cuenta, s.subcta, s.capitulo, s.subcap, s.elemento,
>>> s.empresa, s.saldo, s.descripcion, ';
>>> strsql := strsql + 's.sctaor, s.capor, s.scapor, s.eleor from scsal s
>>> where (s.idsa is null)';
>>> dm.p_rssc3(strsql, false);
>>>
>>> Me da error en la línea: rssc3.Open;
>>> Me dice que falta el campo empor el cual use en la cunsulta anterior, pero
>>> que por supuesto no está en esta.
>>>
>>> El procedimiento que llamo es:
>>>
>>> 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.Filter:='';
>>>  rssc3.SQL.Clear;
>>>  rssc3.SQL.Text := sqlstr;
>>>  rssc3.ReadOnly := blnread;
>>>  trasc3.StartTransaction;
>>>  rssc3.Open;
>>> end;
>>>
>>>
>>> Se que el error me lo está dando por usar:
>>>
>>> dm.rssc3.IndexFieldNames:=xxxx
>>>
>>> Pero lo necesito usar.
>>>
>>> E intentado resetear dicha propiedad por todas las vías antes de decir:
>>> rssc3.Open; pero no he encontrado la forma de como hacerlo sin que me de
>>> error.
>>>
>>> Toda ayuda será bien venida.
>>>
>>> Saludos Cordiales
>>> ========
>>> | ISMAEL |
>>> ========
>>> Only for the small landowners and Cubans companies
>>> Website: www.sisconge.byethost15.com
>>>              www.sisconge.hol.es
>>>
>>>
>>> _______________________________________________
>>> Lazarus-es mailing list
>>> Lazarus-es en lists.lazarus.freepascal.org
>>> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
>>>
>>>
>>> ________________________________
>>>
>>> _______________________________________________
>>> Lazarus-es mailing list
>>> Lazarus-es en lists.lazarus.freepascal.org
>>> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
>>>
>>>
>>> _______________________________________________
>>> Lazarus-es mailing list
>>> Lazarus-es en lists.lazarus.freepascal.org
>>> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
>>>
>> ________________________________
>>
>> _______________________________________________
>> Lazarus-es mailing list
>> Lazarus-es en lists.lazarus.freepascal.org
>> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
>>
>>
>> _______________________________________________
>> Lazarus-es mailing list
>> Lazarus-es en lists.lazarus.freepascal.org
>> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
>>
>
>
>
> --
> El que pregunta aprende, y el que contesta aprende a responder.
>
> No a la obsolecencia programada:
> http://www.rtve.es/noticias/20110104/productos-consumo-duran-cada-vez-menos/392498.shtml
>
> Linux User #495070
> http://domonetic.com/blog



-- 
El que pregunta aprende, y el que contesta aprende a responder.

No a la obsolecencia programada:
http://www.rtve.es/noticias/20110104/productos-consumo-duran-cada-vez-menos/392498.shtml

Linux User #495070
http://domonetic.com/blog




More information about the Lazarus-es mailing list