Ir al contenido


Foto

No reconoce la consulta desde Delphi


  • Por favor identifícate para responder
11 respuestas en este tema

#1 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 19 marzo 2009 - 10:52

Pues eso, tengo el siguiente code:



delphi
  1. procedure TFConsDesp.PngSpeedButton1Click(Sender: TObject);
  2. begin
  3. ZDespacho.Close;
  4. ZDespacho.SQL.Clear;
  5. Case rgFiltro.ItemIndex of
  6.   0: ZDespacho.SQL.Text := 'select * from despexp where noDesp Like '+QuotedStr('%'+Edit1.Text+'%')+' AND fecha >= '''+Edit2.Text+'-01-01'' AND fecha <= '''+Edit2.Text+'-12-31'' ';
  7.   1: ZDespacho.SQL.Text := 'select * from despexp where casa Like '+QuotedStr('%'+Edit1.Text+'%')+' AND fecha Between '''+Edit2.Text+'-01-01'' AND '''+Edit2.Text+'-12-31'' ';
  8.   2: ZDespacho.SQL.Text := 'select * from despexp where noID Like '+QuotedStr('%'+Edit1.Text+'%')+'';
  9. end;
  10. ZDespacho.Open;
  11.   ShowMessage(ZDespacho.SQL.Text);
  12.   if ZDespacho.RecordCount = 0 then
  13.     begin
  14.       ShowMessage('¡No se encontraron registros!');
  15.       Label4.Caption := '0';
  16.       Exit;
  17.     end;
  18.   Label4.caption := IntToStr(ZDespacho.RecordCount);
  19. end;



la primera consulta sale así­ en el showmessage:



sql
  1. SELECT * FROM despexp WHERE noDesp LIKE '50' AND fecha >= '2009-01-01' AND fecha <= '2009-12-31'



Hasta ahí­ perfecto pero sin embargo no me encuentra nada, si la coloco desde la base sí­ me la encuentra más no desde Delphi, igual ocurre con las demás consultas, utilizo MySQL con ZEOS y D7.

Saludos.
  • 0

#2 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 19 marzo 2009 - 11:37

Pues eso, tengo el siguiente code:



delphi
  1. procedure TFConsDesp.PngSpeedButton1Click(Sender: TObject);
  2. begin
  3. ZDespacho.Close;
  4. ZDespacho.SQL.Clear;
  5. Case rgFiltro.ItemIndex of
  6.   0: ZDespacho.SQL.Text := 'select * from despexp where noDesp Like '+QuotedStr(Edit1.Text)+' AND fecha >= '''+Edit2.Text+'-01-01'' AND fecha <= '''+Edit2.Text+'-12-31'' ';
  7.   1: ZDespacho.SQL.Text := 'select * from despexp where casa Like '+QuotedStr('%'+Edit1.Text+'%')+' AND fecha Between '''+Edit2.Text+'-01-01'' AND '''+Edit2.Text+'-12-31'' ';
  8.   2: ZDespacho.SQL.Text := 'select * from despexp where noID Like '+QuotedStr('%'+Edit1.Text+'%')+'';
  9. end;
  10. ZDespacho.Open;
  11.   ShowMessage(ZDespacho.SQL.Text);
  12.   if ZDespacho.RecordCount = 0 then
  13.     begin
  14.       ShowMessage('¡No se encontraron registros!');
  15.       Label4.Caption := '0';
  16.       Exit;
  17.     end;
  18.   Label4.caption := IntToStr(ZDespacho.RecordCount);
  19. end;



la primera consulta sale así­ en el showmessage:



sql
  1. SELECT * FROM despexp WHERE noDesp LIKE '50' AND fecha >= '2009-01-01' AND fecha <= '2009-12-31'



Hasta ahí­ perfecto pero sin embargo no me encuentra nada, si la coloco desde la base sí­ me la encuentra más no desde Delphi, igual ocurre con las demás consultas, utilizo MySQL con ZEOS y D7.

Saludos.


Saludos.

Enecumene, si esa sentencia funciona desde la BD pues te recomiendo activar el SQLMonitor que viene con Delphi y así­ podrás observar que enví­a el programa real y efectivamente a la BD.

Con esto podrás copiar la sentencia y ponerla en la BD y corregirla.

Hasta luego.
  • 0

#3 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 19 marzo 2009 - 12:05

Hola
Los Edit siempre son unos necios cuando de fechas se trata.
Yo prefiero usar el directo que es el datetimepicker, asi no se complica nada.
No entiendo por que usar QuotedStr con edit`s, me suenan a campos texto, no se, con el uso de parametros, se hace mas limpia la consulta y se evitan muchas complicaciones.
Saludos
  • 0

#4 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 19 marzo 2009 - 12:56

Yo secundo la opinión de Carlos, emplea parámetros... la consulta queda más limpia y además te evitas cualquier dolor de cabeza con el formato fecha, ¡dejaselos para los parámetros que se encarguen de ellos!

Saludos,
  • 0

#5 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 19 marzo 2009 - 01:28

A ver, dejo imagen de como se ve el formulario de consultas, para que tengan una idea. Lo primero es que no puedo utilizar el DateTimePicker porque no se escoje un rango de fecha ya que está fijo, el usuario sólo pone el año a consultar, lo segundo es que es raro que no me funcione en este caso y en todos los otros formularios donde aplico esa misma técnica si funcionan. :s. Sólo un campo de los tres es Texto, los otros son integer.

Saludos.


  • 0

#6 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 19 marzo 2009 - 01:35

Saludos.

Ahora que veo tu formulario, me nace la curiosidad por saber si en MySQL no existe la función EXTRACT que existe en Firebird.  De ser positivo, solo debes de emplear esta función y listo.
  • 0

#7 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 19 marzo 2009 - 01:49

Hola
Solo jugando, si no se me olvida. :D


delphi
  1. procedure TFConsDesp.PngSpeedButton1Click(Sender: TObject);
  2. var
  3. fech1, fech2: string;
  4. begin
  5. ZDespacho.Close;
  6. ZDespacho.SQL.Clear;
  7. fech1:= '-01-01';
  8. fech2:= '-12-31';
  9. Case rgFiltro.ItemIndex of
  10.   0: ZDespacho.SQL.Text := 'select * from despexp where noDesp Like '+QuotedStr(Edit1.Text)+' AND fecha >= '''+Edit2.Text+fech1+' AND fecha <= '''+Edit2.Text+fech2' ';
  11.   1: ZDespacho.SQL.Text := 'select * from despexp where casa Like '+QuotedStr('%'+Edit1.Text+'%')+' AND fecha Between '''+Edit2.Text+fech1+' AND '''+Edit2.Text+fech2' ';
  12.   2: ZDespacho.SQL.Text := 'select * from despexp where noID Like '+QuotedStr('%'+Edit1.Text+'%')+'';
  13. end;
  14. ZDespacho.Open;
  15.   ShowMessage(ZDespacho.SQL.Text);
  16.   if ZDespacho.RecordCount = 0 then
  17.     begin
  18.       ShowMessage('¡No se encontraron registros!');
  19.       Label4.Caption := '0';
  20.       Exit;
  21.     end;
  22.   Label4.caption := IntToStr(ZDespacho.RecordCount);
  23. end;


Saludos
  • 0

#8 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 19 marzo 2009 - 02:14

Creo que MySQL si cuenta con la función EXTRACT. Prueba con la misma consulta pero en la parte where que la condición de la fecha sea así­:


sql
  1. WHERE ... LIKE ...  AND (EXTRACT(YEAR FROM campo_fecha) = '2009')



El uso de Between también deberí­a funcionar:



sql
  1. WHERE ... LIKE ...  AND (campo_fecha BETWEEN 'la_fecha1' AND 'la_fecha2')



Saludos,
  • 0

#9 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 19 marzo 2009 - 02:19

Bueno no sé que cambio hice porque no le veo la diferencia, pero ahora me funciona :s  ^o|:



delphi
  1. procedure TFConsDesp.PngSpeedButton1Click(Sender: TObject);
  2. begin
  3. ZDespacho.Close;
  4. ZDespacho.SQL.Clear;
  5. Case rgFiltro.ItemIndex of
  6.   0: ZDespacho.SQL.Text := 'select * from despexp where noDesp Like '+QuotedStr('%'+Edit1.Text+'%')+' And fecha >= '''+Edit2.Text+'-01-01'' And fecha<= '''+Edit2.Text+'-12-31'' ';
  7.   1: ZDespacho.SQL.Text := 'select * from despexp where casa Like '+QuotedStr('%'+Edit1.Text+'%')+' And fecha >= '''+Edit2.Text+'-01-01'' And fecha<= '''+Edit2.Text+'-12-31'' ';
  8.   2: ZDespacho.SQL.Text := 'select * from despexp where noID Like '+QuotedStr('%'+Edit1.Text+'%')+' ';
  9. end;
  10. ZDespacho.Open;
  11.   if ZDespacho.RecordCount = 0 then
  12.     begin
  13.       ShowMessage('¡No se encontraron registros!');
  14.       Label4.Caption := '0';
  15.       Exit;
  16.     end;
  17.   Label4.caption := IntToStr(ZDespacho.RecordCount);
  18. end;



Gracias compañeros.

Saludos.
  • 0

#10 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 19 marzo 2009 - 02:29

¡Que bueno que lo resolviste!
Apostarí­a un dolar a que se debí­a a uno que otro apóstrofo :D

Saludos,
  • 0

#11 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 19 marzo 2009 - 02:32

Pues puedes estar seguro de eso amigo, la cuestión es que no la encuentro, pero bue, ¿ya pa qué? :p.

Saludos.
  • 0

#12 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 20 marzo 2009 - 06:51

yo la diferencia que veo es que utilizas el between en la primera y en la ultima no...
  • 0




IP.Board spam blocked by CleanTalk.