Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Ayuda con error! expresion demasiado compleja en la expresion de consulta (https://www.clubdelphi.com/foros/showthread.php?t=74883)

escorpionrojo43 15-07-2011 05:32:40

Ayuda con error! expresion demasiado compleja en la expresion de consulta
 
Hola Amigos otraves con una inquietud

Ejecutanto este query he recibido un error el cual me dice
expresion demasiado compleja en la expresion de consulta

mi codigo es el siguiente

Código Delphi [-]
procedure TFregistroNumeros.Button2Click(Sender: TObject);
var campo11:string;
begin
    with qry_rep_numeros, sql do
  begin
    //Construye query con datos del reporte.
    Close;
    Clear;
    Add('SELECT =IIf([jugada]='+quotedstr(edit1.Text)+',"Primera",');
    Add('IIf([jugada]='+quotedstr(edit2.Text)+',"Segunda",');
    Add('IIf([jugada]='+quotedstr(edit3.Text)+',"Tercera",');
    Add('IIf([jugada]='+quotedstr(edit1.Text)+' + '+quotedstr(edit2.Text)+',"1ra Y 2da",');
    Add('IIf([jugada]='+quotedstr(edit2.Text)+' + '+quotedstr(edit1.Text)+',"2da Y 1ra",');
    Add('IIf([jugada]='+quotedstr(edit1.Text)+' + '+quotedstr(edit3.Text)+',"1ra Y 3ra",');
    Add('IIf([jugada]='+quotedstr(edit3.Text)+' + '+quotedstr(edit1.Text)+',"3ra Y 1ra",');
    Add('IIf([jugada]='+quotedstr(edit2.Text)+' + '+quotedstr(edit3.Text)+',"2da Y 3ra",');
    Add('IIf([jugada]='+quotedstr(edit3.Text)+' + '+quotedstr(edit2.Text)+',"3ra Y 2ra",');
    Add('IIf([jugada]='+quotedstr(edit1.Text)+' + '+quotedstr(edit2.Text)+' + '+quotedstr(edit3.Text)+',"Tripleta",');
    Add('IIf([jugada]='+quotedstr(edit2.Text)+' + '+quotedstr(edit3.Text)+' + '+quotedstr(edit1.Text)+',"Tripleta",');
    Add('IIf([jugada]='+quotedstr(edit3.Text)+' + '+quotedstr(edit2.Text)+' + '+quotedstr(edit1.Text)+',"Tripleta",');
    Add('IIf([jugada]='+quotedstr(edit3.Text)+' + '+quotedstr(edit1.Text)+' + '+quotedstr(edit2.Text)+',"Tripleta",');
    Add('IIf([jugada]='+quotedstr(edit2.Text)+' + '+quotedstr(edit1.Text)+' + '+quotedstr(edit3.Text)+',"Tripleta",');
    Add('IIf([jugada]='+quotedstr(edit1.Text)+' + '+quotedstr(edit3.Text)+' + '+quotedstr(edit2.Text)+',"Tripleta",');
    Add('" "))))))))))))))) AS campo11, *');
    Add('From ticket_detalle');
//    Add('where (fecha = ' +'#'+ FormatDateTime('yyyy-mm-dd', (DateTimePicker1.Date)) + '#)');
//    Add('and loteria = '+inttostr(combobox1.ItemIndex) + 'and (jugada = ' + quotedstr(edit1.text));
//    Add('or  jugada = ' + quotedstr(edit2.text) + 'or jugada = ' + quotedstr(edit3.text)+')');
//    Add('order by len(jugada),jugada');
    open;
    if eof then
    begin
      ShowMessage('No se encontraron registros. Por favor verífique los criterios indicados!.');
      exit;
      next;
    end;
    first;
  end;
  campo11 := qry_rep_numeros.FieldByName('campo11').AsString;
  rep_ganadores.Print;
end;

duilioisola 15-07-2011 14:37:42

Quizás tenga demasiados niveles de IF anidados.

¿Porqué no lees simplemente el campo jugada?. Luego con Delphi puedes traducir ese código al texto que quieras:
Código Delphi [-]
procedure TFregistroNumeros.Button2Click(Sender: TObject);
var campo11:string;
begin
    with qry_rep_numeros, sql do
  begin
    //Construye query con datos del reporte.
    Close;
    Clear;
    Add('SELECT jugada AS campo11, *');
    Add('From ticket_detalle');
//    Add('where (fecha = ' +'#'+ FormatDateTime('yyyy-mm-dd', (DateTimePicker1.Date)) + '#)');
//    Add('and loteria = '+inttostr(combobox1.ItemIndex) + 'and (jugada = ' + quotedstr(edit1.text));
//    Add('or  jugada = ' + quotedstr(edit2.text) + 'or jugada = ' + quotedstr(edit3.text)+')');
//    Add('order by len(jugada),jugada');
    open;
    if eof then
    begin
      ShowMessage('No se encontraron registros. Por favor verífique los criterios indicados!.');
      exit;
      next;
    end;
    first;
  end;
  if (qry_rep_numeros.FieldByName('campo11').AsString = edit1.Text) then campo11 := 'Primera' else
  if (qry_rep_numeros.FieldByName('campo11').AsString = edit2.Text) then campo11 := 'Segunda' else
  [...]
  else
     campo11 := 'Error';
  rep_ganadores.Print;
end;

oscarac 15-07-2011 16:45:04

mmmmm creo que tambien podrias usar un campo calculado

oscarac 15-07-2011 17:25:57

mm me parece que lo que escorpionrojo43 quiere es ubicar las posibles combinaciones de una jugada de loteria o algo similar.

identificar de acuerdo a las bolillas emitidas (edits) cuantas jugadas hay que contengan alguna de las bolillas e identificar si tienen 1, 2 o 3 aciertos


o estoy equivocado? :D

escorpionrojo43 15-07-2011 19:17:14

Cita:

Empezado por oscarac (Mensaje 406503)
mm me parece que lo que escorpionrojo43 quiere es ubicar las posibles combinaciones de una jugada de loteria o algo similar.

identificar de acuerdo a las bolillas emitidas (edits) cuantas jugadas hay que contengan alguna de las bolillas e identificar si tienen 1, 2 o 3 aciertos


o estoy equivocado? :D

oscarac tienes la razon esa la situacion :)
me podrian ayudar con eso?. queria utilizar "case" pero mi base de datos es access y no se como usar "case" ya que cuando lo intento me da error de sentencias. he buscado por muchas paginas y no he conseguido nada.

oscarac 15-07-2011 20:15:42

te cuento que no existe Case en Access y se Utiliza iif

mmm se me ocurre lo siguiente
me imagino que tu tienes un campo donde guardas la Jugada compuesta por 3 Numero

Ejemplo
01-06-24
09-24-03
03-07-70

Esa informacion Guardarla en otra tabla pero descompuesta por cada uno de las combinaciones

Ejemplo
Dato - Proviene
01 ----> 01-06-24
06 ----> 01-06-24
24 ----> 01-06-24
09 ----> 09-24-03
24 ----> 09-24-03
03 ----> 09-24-03
03 ----> 03-07-70
07 ----> 03-07-70
70 ----> 23-07-70
...
...

Entonces Solo "jalo" en el query las bolillas que se "salgan"
digamos que salen las bolillas 03-21-24

entonces las posibles combinaciones serian
por la Bolilla 03
09-24-03
por la Bolilla 24
09-24-03
01-06-24

Código SQL [-]
Select From tablaDescompuesta from Campo = :Edit1.text or Campo = :Edit2.Tex or Campo = :Edit3.text
entiendes la idea?

escorpionrojo43 15-07-2011 23:49:40

Cita:

Empezado por oscarac (Mensaje 406522)
te cuento que no existe Case en Access y se Utiliza iif

mmm se me ocurre lo siguiente
me imagino que tu tienes un campo donde guardas la Jugada compuesta por 3 Numero

Ejemplo
01-06-24
09-24-03
03-07-70

Esa informacion Guardarla en otra tabla pero descompuesta por cada uno de las combinaciones

Ejemplo
Dato - Proviene
01 ----> 01-06-24
06 ----> 01-06-24
24 ----> 01-06-24
09 ----> 09-24-03
24 ----> 09-24-03
03 ----> 09-24-03
03 ----> 03-07-70
07 ----> 03-07-70
70 ----> 23-07-70
...
...

Entonces Solo "jalo" en el query las bolillas que se "salgan"
digamos que salen las bolillas 03-21-24

entonces las posibles combinaciones serian
por la Bolilla 03
09-24-03
por la Bolilla 24
09-24-03
01-06-24

Código SQL [-]
Select From tablaDescompuesta from Campo = :Edit1.text or Campo = :Edit2.Tex or Campo = :Edit3.text
entiendes la idea?


Lo siento oscar pero como que se me hace dificil de entender lo que me dices, podrias ser mas espesifico?

oscarac 15-07-2011 23:53:59

que en OTRA tabla grabes cada uno de los componentes de la Jugada con su respectiva jugada de origen
y que cuando consultes por cada uno de los edits ya tienes las jugadas ganadoras

Select From tablaDescompuesta from Campo = :Edit1.text or Campo = :Edit2.Tex or Campo = :Edit3.text

escorpionrojo43 16-07-2011 22:03:16

Gracias a Todos. Ya esta solucionado
 
Muchas Gracias amigos. este club me ha ayudado mucho en esto.
Aquí pongo el código a disposición de quien lo necesite. ;)

Código Delphi [-]
procedure TFregistroNumeros.Button2Click(Sender: TObject);
var campo11:string;
begin
    with qry_rep_numeros, sql do
  begin
    //Construye query con datos del reporte.
    Close;
    Clear;
    Add('SELECT IIf([jugada]= '+quotedstr(edit1.Text)+',"Primera", ');
    Add('IIf([jugada]= '+quotedstr(edit2.Text)+',"Segunda", ');
    Add('IIf([jugada]= '+quotedstr(edit3.Text)+',"Tercera", ');
//Determina el pale de 1ra y 2da, 1ra y 3ra, 2da y 1ra y 3ra y 1ra
    Add('IIf([jugada]= '+quotedstr(edit1.Text + edit2.Text)+' or [jugada] = '+ quotedstr(edit1.Text + edit3.Text)+' or [jugada]= '+quotedstr(edit3.Text + edit1.Text)+ 'or [jugada]= '+quotedstr(edit2.Text + edit1.Text)+',"P1",');
//Determinia el pale 2da y 3ra Y 3ra y 2da
    Add('IIf([jugada]= '+quotedstr(edit2.text) +'+'+ quotedstr(edit3.text)+' or [jugada] = '+ quotedstr(edit3.text) + '+' +quotedstr(edit2.text)+',"P2", ');
//Determina si es una tripleta
    Add('IIf([jugada]= '+quotedstr(edit1.text + edit2.text + edit3.text) + ' or [jugada]= ' + quotedstr(edit1.text +  edit3.text + edit2.text)+' or [jugada]=' + quotedstr(edit2.text + edit1.text + edit3.text)+  'or [jugada]= '+ quotedstr(edit2.text + edit3.text + edit1.text)+' or [jugada]= '+quotedstr(edit3.text + edit2.text + edit1.text)+ ' or [jugada]= '+quotedstr(edit3.text + edit1.text + edit2.text)+' ,"Tripleta",');
    Add('" ")))))) AS campo11, *');
    Add('From ticket_detalle');
    Add('where (  (Fecha = ' +'#'+ FormatDateTime('yyyy/mm/dd', datetimepicker1.Date)+'#'+')');
    Add('and   (loteria ='+ inttostr(Combobox1.ItemIndex)+')');
    Add('and   (  ([jugada] = ' + quotedstr(edit1.text)+ 'or  [jugada] = ' + quotedstr(edit2.text) + 'or [jugada] = ' + quotedstr(edit3.text)+')');
    Add('or    (  [jugada] =  ' + quotedstr(edit1.Text + edit2.Text)+' or [jugada] = '+ quotedstr(edit1.Text + edit3.Text)+' or [jugada]= '+quotedstr(edit3.Text + edit1.Text)+ 'or [jugada]= '+quotedstr(edit2.Text + edit1.Text)+')))');
    Add('order by len(jugada),jugada');
    open;
    if eof then
    begin
      ShowMessage('No se encontraron registros. Por favor verífique los criterios indicados!.');
      exit;
      next;
    end;
    first;
  end;
  campo11 := qry_rep_numeros.FieldByName('campo11').AsString;
  rep_ganadores.Print;
end;

Bueno solo me faltan algunos detalles de afinación y un par de condiciones mas. pero así es como me ha quedado. si creen que se puede mejorar me hacen saber. :D


La franja horaria es GMT +2. Ahora son las 15:46:06.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi