Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Restar fechas pasando parametro (https://www.clubdelphi.com/foros/showthread.php?t=75617)

marilinspi 07-09-2011 22:48:43

Restar fechas pasando parametro
 
hola a todos trabajo en delphi 7 y base de datos FireBird, y necesito en una consulta sql dentro de un SQLDataSet restar dos fechas pero una la tengo que pasar mediante un parametro, seria algo asi

Código:

Select (:Fecharesumen -Fecha_ASG) as DIF
From Aportes

ya he probado eso
Código:

Select CAST(((:Fecharesumen) - Fecha_ASG) AS INTEGER) AS DIF
From Aportes_Generales

pero no me funciono, agradeceria si alguien tiene una idea de como se hace.
bueno desde ya muchas gracias.

Casimiro Noteví 07-09-2011 22:58:07

Justo abajo, al final de esta página, tienes varios enlaces sobre "restar fechas", es un tema que se ha tratado muchas veces, si haces una búsqueda por clubdelphi encontrarás más enlaces.

oscarac 07-09-2011 22:59:14

pasa como parametro la fecha... algo asi

Código Delphi [-]
 
Query1.Clear
query1.Sql.Add ('Select (:Fecharesumen -Fecha_ASG) as DIF From Aportes')
query1.parameters[0].asdate := now;
query1.open // execsql

now toma la fecha actual

marilinspi 07-09-2011 23:01:38

Gracias por sus respuestas pero...
Casimiro Notevi si hay muchos hilos sobre restar fechas, pero no vi ninguno pasando parametro a un SqlDataSet
Oscarac si en un qry funciona pero lo mismo lo pongo en un SqlDataSet y no anda...

Casimiro Noteví 07-09-2011 23:05:55

¿Y qué es un sqldataset?
¿Y por qué no te funciona?
¿Y qué error te sale?
¿Y qué base de datos estás usando?
¿Y qué componentes estás usando?
¿Y dónde está tu código fuente?

Recuerda nuestras normas ;)

marilinspi 07-09-2011 23:09:17

¿Y qué es un sqldataset? componente que se utiliza para realizar una consulta firebird
¿Y por qué no te funciona? si sabria no estaria preguntando
¿Y qué error te sale? 'An error was found in the application program input parameters for the SQL statement'
¿Y qué base de datos estás usando? lo dije al hacer la pregunta
¿Y qué componentes estás usando? ya lo dije un SqlDataSet
¿Y dónde está tu código fuente? lo puse al hacer la pregunta

oscarac 07-09-2011 23:11:31

jajajajaja chica de armas tomar....

me atrevo a preguntarte cual es la diferencia o beneficio de utilizar un SqlDataSet Vs un Adoquery

es que sl SqlDataset solo es para bases de datos Firebird? (no lo creo)

marilinspi 07-09-2011 23:15:57

Uso SqlDataSet porque todo mi proyecto lo tengo hecho con este componente y no me ha dado malos resultados, solo que ahora me surgió este inconveniente.
Y la verdad que no se si SqlDataset solo es para bases de datos Firebird...

oscarac 07-09-2011 23:19:13

en que propiedad del SqlDataSet colocas la cadena? (osea el Select.... from... where)...

marilinspi 07-09-2011 23:20:18

en la propiedad CommandText...

oscarac 07-09-2011 23:22:04

y en SqlConnection que colocas?

marilinspi 07-09-2011 23:24:39

el nombre del Componenete SqlConnection que tenes que haber creado prebiamente con la conexion a la base de datos... pero para mas sencillo podes probar en el gestor de bases de datos

ecfisa 07-09-2011 23:29:35

Hola marilinspi.

Creo que tendrías que indicarle de que tipo es el parámetro que estas pasando, probá de este modo:
Código SQL [-]
SELECT CAST(CAST(:PARAM_FECHA AS DATE)- T1.FECHA AS INTEGER) AS DIFERENCIA FROM TABLA T1

Un saludo.

marilinspi 07-09-2011 23:33:24

gracias ecfisa, pero me dio este error 'DATE data type is now called TIMESTAMP.'
si se te ocurre alguna otra cosa, estare muy agradecida.

ecfisa 07-09-2011 23:37:16

Hola.

A ver, probá así:
Código SQL [-]
SELECT CAST(CAST(:PARAM_FECHA AS TIMESTAMP)- T1.FECHA AS INTEGER) AS DIFERENCIA FROM TABLA T1


Saludos.

marilinspi 07-09-2011 23:39:46

muchas gracias, ya habia probado esa opcion y me da el error Data type unknown.

ecfisa 07-09-2011 23:43:21

Hola.

Entonces lo siento, debe ser alguna característica del componente SqlDataSet (con el que no he trabajado), ya que con el IBExpert me funciona de ambos modos.
Voy a ver si encuentro algo al respecto.

Saludos.

ecfisa 08-09-2011 00:03:27

Hola.

Mirá, probé por primera vez con el componente, copié y pegué la cadena que antes te puse
Código SQL [-]
SELECT CAST(CAST(:PARAM_FECHA AS DATE)- T1.FECHA AS INTEGER) AS DIFERENCIA FROM TABLA T1
en la propiedad CommandText, lo activé. Después de avisarme: 'Client SQL Dialect 1 does support reference to datetype', puse a false el SQLConnection, hice doble click sobre él, cambié el SQLDialect a 3 y pareciera funcionar bién.

Espero disculpes alguna torpeza pero es la primera ves que uso este componente:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  SQLDataSet1.ParamByName('PARAM_FECHA').AsDate:= Now;
  SQLDataSet1.Open;
  ShowMessage(SQLDataSet1.FieldByName('DIFERENCIA').AsString);
end;
La fecha de la tabla es 01.09.2011 y el resultado que me arroja es 6, lo cuál es correcto.

Si gustas te adjunto la prueba.


Saludos.

marilinspi 08-09-2011 00:14:37

bueno dale adjuntamelo si no es molestia... y gracias por todo.

Casimiro Noteví 08-09-2011 00:14:45

Si has leído nuestra guía de estilo verás que enumera una serie de consejos para conseguir una mejor y más rápida ayuda. Si no se siguen esas normas es posible que cueste más trabajo el ayudar a la persona que solicita ayuda.
El hacerte esas preguntas es porque no está claro el contexto de tu problema, porque no lo has explicado, si además contestas como lo has hecho, entonces... simplemente, es peor para tí.


Cita:

Empezado por marilinspi (Mensaje 411193)
¿Y qué es un sqldataset? componente que se utiliza para realizar una consulta firebird.
Es un componente que pertenece a la paleta dbxExpress

¿Y por qué no te funciona? si sabria no estaria preguntando
No me funciona porque me sale error xxxxx cuando hago esto y sin embargo me sale error yyyyy cuando hago esto otro.

¿Y qué error te sale? 'An error was found in the application program input parameters for the SQL statement'
Gracias ;)

¿Y qué base de datos estás usando? lo dije al hacer la pregunta
Firebird, tal y como comentaste al principio, cierto.

¿Y qué componentes estás usando? ya lo dije un SqlDataSet
Es el dataset de los dbxExpress

¿Y dónde está tu código fuente? lo puse al hacer la pregunta
Bueno, eso no es "sólo" el código fuente, nos facilitaría muchísimo el que pusieras TODO el código anterior a ese, variables, campos, tipos, asignaciones, etc.

Recuerda que no somos adivinos, no tenemos bola de cristal, nadie nos paga por ayudar, que lo hacemos porque queremos colaborar altruistamente con la gente que tiene problemas y necesita resolver algún problema y quiera avanzar, etc.

Ya ves, con tus respuestas tan escuetas y explicaciones tan avaras... nadie ha podido ayudarte de momento, ahí tienes a ecfisa ocupando su tiempo en crear código con esos componentes, haciendo programitas de pruebas y comprobando que, evidentemente, el código que te aconsejó funciona perfectamente, así que el problema es claramente de algo que no nos ha dicho.
Saludos y que tengas suerte en la vida.

ecfisa 08-09-2011 00:21:00

Hola.

Bueno, como lo prometido es deuda... ;)

La tabla es una creada al vuelo con un campo FECHA de tipo DATE.


Un saludo.


La franja horaria es GMT +2. Ahora son las 17:10:51.

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