Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Incorrect values within SQLDA structure (https://www.clubdelphi.com/foros/showthread.php?t=92779)

mRoman 06-02-2018 21:21:55

Aqui el código desde delphi que utilizo para construir el SELECT
Código Delphi [-]
procedure TfrmOpDespacho.GroupBox4Exit(Sender: TObject);
var
  clave,i, i_difer :integer;
  wMes,wDia,wAnio:Word;
  cMes:String;
  Porcentaje:Real;
begin
   qryPlanta.Close;
   qryPlanta.Open;
   qryPlanta.FetchAll;
   qryPlanta.First;
   qryMesEmbarque.Close;
   qryMesEmbarque.Open;

   case cbxMes.ItemIndex+1 of
        1 :cMes:='a.Ene';
        2 :cMes:='a.Feb';
        3 :cMes:='a.Mar';
        4 :cMes:='a.Abr';
        5 :cMes:='a.Myo';
        6 :cMes:='a.Jun';
        7 :cMes:='a.Jul';
        8 :cMes:='a.Ago';
        9 :cMes:='a.Sep';
        10:cMes:='a.Oct';
        11:cMes:='a.Nov';
        12:cMes:='a.Dic';
   end;
   if not(cMes=' ') then
   begin
        
       IBQry.Close;
       IBQry.SQL.Clear;
       IBQry.SQL.Add('select a.anio,');
       IBQry.SQL.Add('       '+cMes+' as lts_prog_anual,');
       IBQry.SQL.Add('       (select sum(b.litros)');
       IBQry.SQL.Add('        from reporte_despacho1 b');
       IBQry.SQL.Add('        where extract(year from b.fecha_embarque)=:anio');
       IBQry.SQL.Add('          and extract(month from b.fecha_embarque)=:mes');
       IBQry.SQL.Add('          and b.producto like '''+'AS%'+''') as lts_despacho,');
       IBQry.SQL.Add('       ((select sum(c.litros)');
       IBQry.SQL.Add('           from reporte_despacho1 c');
       IBQry.SQL.Add('          where extract(year from c.fecha_embarque)=:anio');
       IBQry.SQL.Add('            and extract(month from c.fecha_embarque)=:mes');
       IBQry.SQL.Add('            and c.producto like '''+'AS%'+''' )-'+cMes+') as difer,');
       IBQry.SQL.Add('       ((select sum(d.litros)');
       IBQry.SQL.Add('           from reporte_despacho1 d');
       IBQry.SQL.Add('          where extract(year from d.fecha_embarque)=:anio');
       IBQry.SQL.Add('            and extract(month from d.fecha_embarque)=:mes');
       IBQry.SQL.Add('            and d.producto like '''+'AS%'+''' )/'+cMes+')*100 as porcentaje');
       IBQry.SQL.Add('from PROGRAMA_DISTRIBUCION_ANUAL A');
       IBQry.SQL.Add('where a.clave_clasificacion=3');
       IBQry.SQL.Add('  and a.clave_rubro=1');
       IBQry.SQL.Add('  and a.anio=:anio');
       IBQry.ParamByName('MES').AsInteger:=cbxMes.ItemIndex+1;
       IBQry.ParamByName('anio').AsString:=mskAnio.Text;
       IBQry.Open;

// Estos son los QUERYS que tuve q crear (2 componentes IBQuery) que hacen lo mismo que el SELECT q construyo mas arriba, solo que aca por
// separado.
       qryProgAnual.Close;
       qryProgAnual.ParamByName('anio').AsString:=mskAnio.Text;
       qryProgAnual.Open;

       qryLtsDespacho.Close;
       qryLtsDespacho.ParamByName('anio').AsString:=mskAnio.Text;
       qryLtsDespacho.ParamByName('mes').AsInteger:=cbxMes.ItemIndex+1;
       qryLtsDespacho.Open;
// Hasta aqui terminan los 2 querys

//La siguiente linea, realiza una operación aritmética para encontrar la DIFERENCIA de ambos datos.
       i_difer:=qryLtsDespacho.fieldByName('lts_despacho').AsInteger-qryProgAnual.fieldBYName('lts_prog_anual').AsInteger;

       mskDifer.Text:=IntToStr(i_difer);
//       if qryDifer.FieldByName('DIFER').AsInteger<0 then
       if i_difer<0 then
       begin
           Label3.Caption:='ABAJO CON:';
           img1.Picture:=imgAbajo.Picture;
       end Else
       begin
           Label3.Caption:='ARRIBA CON:';
           img1.Picture:=imgArriba.Picture;
       end;
       Porcentaje:=(qryLtsDespacho.fieldByName('lts_despacho').AsFloat/
                    qryProgAnual.fieldByName('lts_prog_anual').AsFloat)*100.00;
//       Label4.Caption:=qryElaboro.fieldbyname('difer').AsString+' Litros';
//       mskPorcentaje.Text:=FloatToStr(qryDifer.fieldbyname('porcentaje').AsFloat);
//       mskPorcentaje.Text:=FloatToStr(Porcentaje);

       mskPorcentaje.Text:=Format('%n',[Porcentaje]);
       DecodeDate(Date,wAnio,wMes,wDia);
   end Else
   begin
       // Todavia no agrego código aqui.
   end;
end;

mRoman 06-02-2018 21:25:55

Algo hice mal al momento de publicar este POST con el código delphi donde construyo el SELECT, Casimiro podrías agegarlo al hilo donde estamos con este tema....porque no se ve en este hilo lo q publique anteriormente. Algo pasó q no se publicó alla.

Casimiro Notevi 06-02-2018 21:39:00

Cita:

Empezado por mRoman (Mensaje 524376)
Algo hice mal al momento de publicar este POST con el código delphi donde construyo el SELECT, Casimiro podrías agegarlo al hilo donde estamos con este tema....porque no se ve en este hilo lo q publique anteriormente. Algo pasó q no se publicó alla.

¿A qué hilo te refieres? ¿Hay otro?

mRoman 06-02-2018 23:21:41

Cita:

Empezado por Casimiro Notevi (Mensaje 524377)
¿A qué hilo te refieres? ¿Hay otro?

Bueno no sé....lo q pasa es que has de cuente que presione el boton que dice "Respuesta" y se agrego mi mensahe....pero aparece primero, como si apenas estoy empezando el hilo....estoy confudido.

Lo anterior es para que los demas foreros pues, no sé pierdan la continuidad del hilo.....O TODO ESTA BIEN?.

No veo los primeros mensajes....solo los 2 últimos que mandé (#21 y 22), el que me contestas ("A que hilo..."), y este que estoy contestando.

mRoman 07-02-2018 03:23:39

Sigo investigando...

Casimiro Notevi 07-02-2018 10:29:21

Cita:

Empezado por mRoman (Mensaje 524380)
Bueno no sé....lo q pasa es que has de cuente que presione el boton que dice "Respuesta" y se agrego mi mensahe....pero aparece primero, como si apenas estoy empezando el hilo....estoy confudido.
Lo anterior es para que los demas foreros pues, no sé pierdan la continuidad del hilo.....O TODO ESTA BIEN?.
No veo los primeros mensajes....solo los 2 últimos que mandé (#21 y 22), el que me contestas ("A que hilo..."), y este que estoy contestando.

La verdad es que no sé a qué te refieres, a mí me salen todos los mensajes desde el primero.

Casimiro Notevi 07-02-2018 11:17:05

Bueno, he creado esas tablas, he copiado ese select, lo he ejecutado y no hay ningún error.
¿En qué línea te sale el error?
¿Has seguido el programa con el depurador paso a paso?
¿Has visto el contenido del query antes de ejecutarlo?
...

mRoman 07-02-2018 17:21:18

jajajaja....disculpa pero es que es la falta de practica....el hilo tiene como q 2 páginas. Ya...que pena.

Nunca habia posteado tantos mensajes....jajajaja....para que se hicieran 2 paginas. Bueno ya se q paso.

mRoman 07-02-2018 17:35:42

Cita:

Empezado por Casimiro Notevi (Mensaje 524391)
Bueno, he creado esas tablas, he copiado ese select, lo he ejecutado y no hay ningún error.
¿En qué línea te sale el error?
¿Has seguido el programa con el depurador paso a paso?
¿Has visto el contenido del query antes de ejecutarlo?
...

Cita:

¿En qué línea te sale el error?
En realidad no sé en que linea, ya que todo el "cuerpo" del SQL.text se ejectuta usando el componente y al momento de llegar a la instruccion IBQry.Open, marca el error de "Invalid...(etc).", asi que lo que hice fue, quitar los select anidados y hacerlos por separado, como lo hice en el código delphi.

Seguro estoy q la estructura del query esta correcta, porque estaba funcionando bien, pero ahora empezó a marcar ese error.

Firebird tendrá algun tipo de archivo donde valide las estructuras de los select?, de ser asi, ¿se habrá "dañado"?. Investigando di con la descripción del error, y habla sobre que no es una estructura valida de SQL, evidentemente en algun lado valido esto....estará "embebido" en el ejecutable del Firebird???.

En algun otro foro, lei que los parametros eran el problema...bueno, de momento el problema lo resolvi, para este ultimo caso (Select anidados), separando cada uno de los select en diferentes componentes IBQuery. Pero la verdad estoy inquieto ya que talvez empieze a dar problemas y tendria q cambiar los select's....

Cita:

¿Has seguido el programa con el depurador paso a paso?
Has visto el contenido del query antes de ejecutarlo
Dentro de delphi si, incluso agregue una linea para ver, usando el Showmessage, el contenido de "sql.text" y todo normal...y pasando a la siguiente linea (IbQuery.open), marcó error.:mad:...algo realmente intrigante.

Casimiro Notevi 07-02-2018 19:54:36

Cita:

Empezado por mRoman (Mensaje 524406)
Dentro de delphi si, incluso agregue una linea para ver, usando el Showmessage, el contenido de "sql.text" y todo normal...y pasando a la siguiente linea (IbQuery.open), marcó error.:mad:...algo realmente intrigante.


¿Seguro al 100%?

mRoman 12-02-2018 16:23:43

Sí por supesto...seguro al 100%

Pero deja lo hago de nuevo....talvez se me haya pasado algo que en ese momento no pude ver, por lo "fastidiado" que estaba con la busqueda del error....lo hago y te comento (les comento)


La franja horaria es GMT +2. Ahora son las 10:19:20.

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