Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-03-2004
chele chele is offline
Miembro
 
Registrado: feb 2004
Posts: 83
Poder: 21
chele Va por buen camino
Problema Fechas y no ve ningun dato

Buenas, tengo esta consulta :

cadenaSQL := 'SELECT expedientes.codexp AS a, expedientes.refcomp AS b, expedientes.fnotif AS c, resumenpagos.totpagosaut AS e, tratamientos.diasfac AS f, asegurados.edad AS g, ' +
'HFIJING+HFIJAMB+HFIJTRAT+HVARDESC+HREEMBOLSO+HESP AS H' +
' FROM HONORCIAS RIGHT JOIN (((asegurados INNER JOIN expedientes ON asegurados.codaseg = expedientes.codaseg) LEFT JOIN resumenpagos ON expedientes.codexp = resumenpagos.codexp) LEFT JOIN tratamientos ON ' +
' expedientes.codexp = tratamientos.codexp) ON HONORCIAS.CODEXP = expedientes.codexp '+
' where expedientes.fnotif >= "' + datetostr(strtodate(fecha1.Text)) + '"' +
' and expedientes.fnotif <= "' + datetostr(strtodate(fecha2.Text)) + '"' +
' ORDER BY expedientes.codexp';

qry := TIBQuery.Create(qry);
qry.database := datamodule2.database;
Qry.SQL.Text := cadenaSQL;
qry.open();


Si no le pongo lo del where me picha datos con fecha 15/03/2004 pero si pongo el where con las fechas de todo el año 2004 no me picha ningun dato. ¿Por que puede ser?

La columna expedientes.fnotif es varchar ( estoy obligado a poner este tipo ).

Uso delphi 5.0 con interbase.

Un saludo y gracias anticipadas.
Responder Con Cita
  #2  
Antiguo 24-03-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Creo entender que coges la fecha de un Tedit... yo me aseguraría que pilla el formato de fecha que tú quieres: Fecha >= '+quotedStr(FormatDateTime('mm/dd/yyyy',dtInicio.Date)

Espero te sirva de algo.

SAludos
Responder Con Cita
  #3  
Antiguo 24-03-2004
chele chele is offline
Miembro
 
Registrado: feb 2004
Posts: 83
Poder: 21
chele Va por buen camino
Enas esto que me comentas lo puse asi :

' where expedientes.fnotif >= '+quotedStr(FormatDateTime('mm/dd/yyyy',fecha1.text)+

Y esta linea me da este error : "Imcompatibles types _ ´TdateTime and Tcaption"

Si yo cojo el valor de fecha de un tedit.
Responder Con Cita
  #4  
Antiguo 24-03-2004
chele chele is offline
Miembro
 
Registrado: feb 2004
Posts: 83
Poder: 21
chele Va por buen camino
Yo veo el problema aqui :
' where expedientes.fnotif >= "' + fecha1.Text + '"' +

Esto funciona, no da error, pero claro esta busco en un campo texto con otro campo texto por lo que las fechas no las recupera bien.

Mi problema es que expedientes.fnotif es varchar cuando deberia ser fecha ... ¿como puedo decirle via sql que ese campo es tipo fecha? ¿se puede hacer desde el dataset o similar?.

Venga gracias.
Responder Con Cita
  #5  
Antiguo 25-03-2004
chele chele is offline
Miembro
 
Registrado: feb 2004
Posts: 83
Poder: 21
chele Va por buen camino
No sabeis como podria solucionarlo ??
Responder Con Cita
  #6  
Antiguo 25-03-2004
gynch gynch is offline
Miembro
 
Registrado: mar 2004
Posts: 13
Poder: 0
gynch Va por buen camino
Yo comprobaría cómo quiere las fechas tu gestor de bases de datos. En el caso de interbase las quiere como 'mm/dd/yyyy', así que puedes usar algo así
var
strfecha:string;
...
strfecha:='''+formatdatetime('mm/dd/yyyy',dia)+''';

Última edición por gynch fecha: 25-03-2004 a las 11:40:35.
Responder Con Cita
  #7  
Antiguo 25-03-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
no se si es esto lo que buscas....

cast(expedientes.fnotif as date) >= ' + QuotedStr(fecha1.Text)

PD: si fecha1 es un componente de fechas y tiene la propiedad Date, mejor usar
QuotedStr(FormatDateTime('mm/dd/yyyy', fecha1.Date))
Responder Con Cita
  #8  
Antiguo 25-03-2004
chele chele is offline
Miembro
 
Registrado: feb 2004
Posts: 83
Poder: 21
chele Va por buen camino
He puesto esto :

cast(expedientes.fnotif as date) >= ' + QuotedStr(fecha1.Text)

Y me da este error :

Conversion error from string "15/03/2004"

ESta fecha es de la base de datos, ya que yo escribo 01/01/01

¿Que puede ser?.

Gracias anticipadas
Responder Con Cita
  #9  
Antiguo 25-03-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Bueno, vamos a complicarlo un poco pues

Supongo que estás guardando la fecha con el formato dd/mm/yyyy, y supongo que para hacer el cast a fecha, tu motor espera otro formato (seguramente mm/dd/yyyy). Si es así, quizás esto te sirva:

cast((substring(expedientes.fnotif from 3 for 3) || substring(expedientes.fnotif from 1 for 3) || substring(expedientes.fnotif from 7 for 4)) as date)

Prueba a ver si tu motor soporta el SUBSTRING
Responder Con Cita
  #10  
Antiguo 26-03-2004
chele chele is offline
Miembro
 
Registrado: feb 2004
Posts: 83
Poder: 21
chele Va por buen camino
Curioso, he puesto esto :

' where cast((substring(expedientes.fnotif from 3 for 3) || substring(expedientes.fnotif from 1 for 3) || substring(expedientes.fnotif from 7 for 4)) as date)'+


Y al iniciarlo no se ha quejado, pero despues al meterle la fecha ( 01/01/01 ) me ha puesto este error :

SQL Error Code = -104
Token unknown - line 1 char 547
from


¿Alguna otra idea?
Responder Con Cita
  #11  
Antiguo 26-03-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Chele, ¿hay alguna razon especial de elegir un Tedit para poner la fecha en la interfaz del programa?

Poniendo un TDateTimePicker por ejemplo, te resuelve de un plumazo todos los problemas:
- no permite que el usuario introduzca una fecha del tipo 46/38/2003
- formato de fechas correcto, (en el formato le pones dd/mm/yyyy) y con eso nos quitamos el problema del dia, mes y del año en 2 o 4 digitos.
- El SQL te quedaría mas simple
Código:
Fecha >= '+quotedStr(FormatDateTime('mm/dd/yyyy',dtInicio.Date))
                  //dtInicio es un TDateTimePicker
Espero tu respuesta.

Saludos
Responder Con Cita
  #12  
Antiguo 26-03-2004
chele chele is offline
Miembro
 
Registrado: feb 2004
Posts: 83
Poder: 21
chele Va por buen camino
GRAAAAAAAAAACIAS, no use este componente por falta de conocimiento

Puse esto :

'where expedientes.fnotif >= '+quotedStr(FormatDateTime('dd/mm/yyyy',fecha1.date)) +
' and expedientes.fnotif <= '+quotedStr(FormatDateTime('dd/mm/yyyy',fecha2.date)) +


el formato fecha en plan dd/mm/yyyy ya que al meterlo en texto me lo respeta.

Pues funciona de escandalo, ahora va perfecto.

Muchas gracias Cadetid y lepe muchas gracias.

Un saludo a los dos y gracias de nuevo.
Responder Con Cita
  #13  
Antiguo 29-03-2004
chele chele is offline
Miembro
 
Registrado: feb 2004
Posts: 83
Poder: 21
chele Va por buen camino
No me va creia que si pero no.

Te explico por que esto si que es raro.

En la base de datos la fecha que busco tengo el registro que es "15/03/2004"

Y nada mas me busca por dias.

Si pongo de 01/01/2003 a 20/01/2003 me la encuentra cuando no deberia.

Si en vez de 20 pongo 14 pues ya no me la encuentra por que el dia es menor, es decir solo me busca por el dia ¿por que puede ser?.

El codigo es :
cadenaSQL := 'SELECT expedientes.codexp AS a, expedientes.refcomp AS b, expedientes.fnotif AS c, resumenpagos.totpagosaut AS e, tratamientos.diasfac AS f, asegurados.edad AS g, ' +
' HFIJING+HFIJAMB+HFIJTRAT+HVARDESC+HREEMBOLSO+HESP AS H' +
' FROM HONORCIAS RIGHT JOIN (((asegurados INNER JOIN expedientes ON asegurados.codaseg = expedientes.codaseg) LEFT JOIN resumenpagos ON expedientes.codexp = resumenpagos.codexp) LEFT JOIN tratamientos ON ' +
' expedientes.codexp = tratamientos.codexp) ON HONORCIAS.CODEXP = expedientes.codexp '+
'where expedientes.fnotif > '+quotedStr(FormatDateTime('dd/mm/yyyy',fecha1.date)) +
' and expedientes.fnotif < '+quotedStr(FormatDateTime('dd/mm/yyyy',fecha2.date)) +


¿Alguna idea?, yo estoy probando y mirando pero todavia no encontre nada.

Gracias anticipadas
Responder Con Cita
  #14  
Antiguo 30-03-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Código:
Fecha >= '+quotedStr(FormatDateTime('mm/dd/yyyy',dtInicio.Date))
Saludos
Responder Con Cita
  #15  
Antiguo 30-03-2004
chele chele is offline
Miembro
 
Registrado: feb 2004
Posts: 83
Poder: 21
chele Va por buen camino
Segun hemos visto el truco esta en guardarlo en la base de datos en formato ingles, y en el sql hacerle el cambio, si no no va, y de esta forma "parece" que va funcionando.

Venga gracias por todo.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 18:29:21.


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
Copyright 1996-2007 Club Delphi