Consulta entre rango de fechas

Necesito urgente tu ayuda, estoy tratando de hacer una consulta donde quiero que en el Dw me aparezca todos los ificios que hice en un rango de fechas.. Desde una fecha hasta la otra, por favor dime como podría hacerlo, lo necesito urgente...
El erro que me sale es este: RETRIEVE ARGUMENT 1 DOES NOT MATCH EXPECTED TYPE.
Mi consulta la hice haciendo un Data window de tipo Grid con Sql select, escogí los datos que quiero que me muestre entre dos tablas y le di retrieve arguments que son f_ini y f_fin.. Donde Documento. Fecharegistro >= f_ini y Documento. FechaRegistro <= f_fin, pero lo malo es que haciendo asi cada vez qu equiero que abra el dw siemrpe me pide los argumentos y eso en un sistema no se ve bien.
Por favor ayudame, debo presentar mi tesis y quiero una respuesta inmediata..

9 Respuestas

Respuesta
1
Documento. Fecharegistro -> en tu base de datos debe de ser tipo datetime
tus argumentos deben de ser tipo datetime
f_ini datetime
f_fin datetime
supongamos que tu datawindow se llame dw_1. En el evento open de tu ventana colocas
dw_1. SetTransObject(SQLCA)
Aquí puedes colocar el retrieve siempre y cuando le asignes los argumentos
dw_1. Retrieve(datetime(Sle_1.text), datetime(sle_2.text)) -> supongamos que tus fechas estén en una caja de texto
si quieres que tu dw aparezca sin registros hasta que que le des buscar entonces en el evento open no pones retrieve.
para buscar supongamos que tiene un boton llamado buscar
declara dos variables de tipo datetime
datetime fecha_i, fecha_f
fecha_i = datetime(sle_1.text) --> supongamos q lo sacas de una caja de texto
fecha_F = datetime(sle_2.text) --> supongamos q lo sacas de una caja de texto
//haces tu retrive
dw_1.retrieve(fecha_i,fecha_f)
Recuerda debes guardar una relación entre tus campos de la tabla, tus argumentos y tus retrieves ejemplo :
si tus argumentos fecha_ini, fecha_fin son datetime no podras usar esto
dw_1. retrieve('10/10/2007','09/04/2008') 
cualquier duda [email protected]
Respuesta
1
Adjunto un ejemplo en donde lo que hago es colocar en la pantalla un EM EditMask Control para la fecha DESDE y otro EM EditMask Control para la fecha HASTA, luego le asigno un valor con las instrucciones que vez a continuación, esto en el Open de la ventana
ld_dia = String(Today(), "m/d/yy")
em_desde.text = string(ld_dia)
em_hasta.text = string(ld_dia)
**********************************************************************8
Luego en el srip de un boton llamado EJECUTAR hago lo siguiente:
Nota: los campos fechas son DateTime y es por eso que vez coloco el 00:00:00 y 23:59:59
datetime desde,hasta
desde = datetime(date(em_desde.text),time('00:00:00'))
hasta = datetime(date(em_hasta.text),time('23:59:59'))
if desde > hasta then
   messagebox("Error", "La fecha DESDE no puede ser mayor que la fecha HASTA",StopSign!)
   elseif isnull(desde) or isnull(hasta) then
   messagebox("Error", "Debe seleccionar una fecha valida",StopSign!)
else
   long ll_rows
   dw_2.settransobject(sqlca);
   ll_rows = dw_2.retrieve(desde,hasta)
   if ll_rows > 0 then
       cb_imprimir.enabled= true
   else
       cb_imprimir.enabled= false
       messagebox("Error", "No se encontraron datos",StopSign!)
   end if
end if
Recuerda que los campos de fecha deben ser DateTime
Pero tu aquí le asignas el día de hoy a las variables
Open de la ventana
ld_dia = String(Today(), "m/d/yy")
em_desde.text = string(ld_dia)
em_hasta.text = string(ld_dia)
Y lo que yo quiero e sque me consulte en el rango de fechas que yo quiero
Oye mil GRACIAs... me salio todo bien, todos me mandaron sus ideas, y las probé, pero solo la tuya me salio.. perfecto eres un genio.. más bien si no es mucha molestia quería que me ayudaras con otro detalle...
En ese mismo formluario tengo un ddlb que contiene tipo documento (Recibido, o emitido)
Quisiera que al dar clic en tipo documento RECIBIDO me muestre solo los documentos recibidos que estén entre ese rango de fechas.. y los mismo para los documentos EMITIDOs.. ¿es posible hacer eso? .. y si lo es.. ¿Seria mucho pedirte que me digas como podría hacerlo?..
De antemano mil gracias
Esto se hace con un setfilter, vefifica la función en el help de powerbuilder.
Respuesta
1
Bueno el errer se debe a que estas mandándole mal los paremetros, mira:
1 - Tienes que tener tu DW sql select con 2 argumentos (ya los tienes)
2 - Tus 2 Argumentos tienen que ser declarados de tipo Date (asumo que así lo pusiste y que tus campos son tipo fecha en tu BD)
3 - En el open de tu ventana solo esrtablece la coneccin de tu DW no la recuperación- Así de be quedarte el open ---- DW_1. SetTransObject(SQLCA), solo eso
4 - La recuperación debe estar en tu botón buscar osea el Retrieve
5 - En el botón Buscar -
Date Fec1
Date Fec2
Fec1=em_fec1.text
Fec2=em_fec2.text
 Dw_1. Retrieve(Fec1, Fec2)
NOTA: Tu EditMask tiene que ser formateado con un tipo de fecha de YY/MM/DD (año, mes, día), PORQUE SI MANDAS EN OTRO ORDEN LOS PARÁMETROS TE SALE ESE TIPO DE ERROR QUE TE SALIO, tiene que ser año mes y día en ese orden OK
Hice como me has dicho pero nada.. no se en que fallo..
Tengo dos edit mask que les puse formato : datemask
y el resto hice tal como me has dicho y aun así nada
Ey pero no me entiendes leela la NOTA! Bueno si así lo hiciste esta bien, ahora entonces establece esto en la propiedad Mask yyyy/mm/dd esta propiedad esta en la ficha Mask
Ten en cuenta lo que te dije cuando consultes o grabes tienes que mandarle este formato DDDD/MM/YY tu con lo que hiciste le mandabas DD/MM/YYYY
Respuesta
1
Declara en la ventana donde haces el retrieve de tu dw:
DateTime ldt_fechaini,ldt_fechafin
Capturas las fechas que ingresas
ldt_fechaini = DateTime(sle_1.text) ó DateTime(em_1.text)
ldt_fechafin = DateTime(sle_2.text) ó DateTime(em_2.text)
Luego le pasas los parametros al dw
dw_1.Retrieve(ldt_fechaini,ldt_fechafin)
Eso es todo, cualquier duda solo pregunta.
Mira, en mi botón de mostrar puse esto:
DateTime ldt_fechaini,ldt_fechafin
//Capturas las fechas que ingresas DateTime(sle_1.text),DateTime(sle_2.text)
ldt_fechaini = DateTime(em_fini.text)
ldt_fechafin = DateTime(em_ffin.text)
//Luego le pasas los parametros al dw
dw_1.Retrieve(ldt_fechaini,ldt_fechafin)
//Eso es todo, cualquier duda solo pregunta.
y en el open de la ventana puse :
dw_1.settransobject(sqlca)
Y a pesar de eso cada vez que le doy en mostrar no me aparece y si le doy doble clic me dice desbordamiento aritmético..
Los edit mask les puse el dormato de Date.. y no me muestra nada.. ayudame por favor, en que estoy fallando
Enviame el select  de tu datawindow.
Respuesta
1
El error que te sale es pore los tipos de argumentos que declaraste y el tipo que estas enviando, es decir, en el dw declaraste un tipo por ejemplo f_ini y f_fin tipo fecha y desde el programa no estas enviando argumentos tipo fecha en el retrieve o lo estas enviando de otro tipo(tipo carácter o de otro ) tal vez si me das más referencias para decirte exactamente que pasa.
Te digo paso por paso...
He creado uin Dw de tipo DQl select, grid con dos agumentos: fecha_inico, fecha_final
FORMULARIO
Tengo dos edit mask, uno para fecha inicio y el otro para fecha final.. y un botón mostrar
BOTÓN MOSTRAR:
DateTime ldt_fechaini,ldt_fechafin
ldt_fechaini = DateTime(em_fini.text)
ldt_fechafin = DateTime(em_ffin.text)
dw_1.Retrieve(ldt_fechaini,ldt_fechafin)
OPEN VENTANA:
dw_1.settransobject(selca)
Dime por favor en que estoy fallando
En el dw, los argumentos fecha_inico, ¿y fecha final de que tipo los declaraste?   datetime o solo date? Porque el error es en el datawindow, dw_1. Retrieve(ldt_fechaini, ldt_fechafin) al momento de hacer esto es el error dice que ldt_fechaini no es del tipo que esta declarado para el primer argumento en el datawindow, revísale por favor en el datawindow que tipo es el argumento, debería ser también datetime, le revisas ingresando al SQL, opción design, retrieval arguments.
Respuesta
1
primero necesito saber con que base de datos estas trabajando , pero dare una pista con oracle
en una grilla
argumentos
fecini  date;
fecfin date;
select * from tablas where to_date(fec_ini,'dd,mm,yyyy)>=:fecini and to_date(fec_fin,'dd,mm,yyyy')<=:fecfin
bien ahora en la ventana
date fec1,fec2
fec1=date(today())
fec2=date(today())
dw_grilla.settransobejct()
De esta manera evitamos que nos salga el argument
dw_grilla. Retrieve(fec1, fec2)
El error que te sale es por que el tipo de dato de tus argumentos no son los correspondientes chequea y prueba
espero haberte podido ayudar y es así por favor cierra la pregunta de lo contrario estaremos en contacto
Uso sql server
Probaste lo que te mencione tienes que especificar una mascara o usa el convert para sql server y que tus argumento sean del tipo fecha y en la ventana mándales variables del tipo date
Saludos
Por favor cierra la pregunta, si te salio el programa de lo contrario cual es el siguiente problema después de que hiciste lo que te mencione
Respuesta
1
¿Una duda tus columnas f_ini y f_fin en tu tabla de que tipo son?
Y el mensaje RETRIEVE ARGUMENT 1 DOES NOT MATCH EXPECTED TYPE es debido a que el argumento que estas definiendo primero esta con un tipo de datos diferentes a tus columnas.
PD; ¿Sobre qué base de datos estas?
en oracle tendrias que hacer algo parecido si tus campos f_ini y f_fin son DATE
where to_char(f_ini,'yyyymmdd') >= :as_ini and to_char(f_fin,'yyyymmdd') <= :as_fin
Si es SQL Server tendras que hacer que la cadena del artgumento que envies sea algo asi
where f_ini >= '01.03.2008' and f_fin <= '31.03.2008'
En mi tabla son de tipo datetime.. y trabajo con sel server-.. mira hice estoy
Tengo un formulario con 2 edit mask..
Ademas he creado un dw de tipo sql select, grid.. que le puse dor argumentos... fecha_inicio y fecha_final
En el open de la ventana
dw_1.settransobject
Boton mostrar:
DateTime ldt_fechaini,ldt_fechafin
ldt_fechaini = DateTime(em_fini.text)
ldt_fechafin = DateTime(em_ffin.text)
dw_1.Retrieve(ldt_fechaini,ldt_fechafin)
Los edit mask le puse formato datemask
Intenta hacer este cambio.
1. En tu dw los dos argumentos declaralos como string.
2. El botón mostrar cambialo por:
string ls_ini, ls_fin
ls_ini = String(Date(em_fini.text), 'yyyy.mm.dd')
ls_fin = String(Date(em_fini.text), 'yyyy.mm.dd')
dw_1.Retrieve(ls_ini,ls_fin)
Cualquier novedad me avisas.
Respuesta
1
Najtess
Tu preguntan o es del todo clara. Si lo que necesitas es hacer una búsqueda en un rango de fechas... lo que me comentás que hiciste está bien. REspecto al error que me comentás, chequeá de que tipo de dato definiste el parámetro nº1 de la DW y fíjate que seguro desde la aplicación le estás pasando un valor que no corresponde con el tipo de datos que definiste para el parámetro.
Respecto de que te aparece la pantalla para cargar los filtros, lo que debés hacer es que en la pantalla de búsqueda el usuario ingrese las fechas desde-hasta y poner un botón "buscar" y a esas fechas usarlas en el retrieve del DW y pasarlas como parámetro. Si lo que querés es que al entrar en la pantalla ya te aparezcan por default los registros filtrados con una fecha desde- hasta hacés que los box donde ingresas las fechas tengan valores por defecto de modo que cuando haces el retrieve en el open de la ventana los parámetros tegnan valor.
Cualquier cosa volvé a consultarme.
Respuesta
1
En el retrieve que estás haciendo desde el script no estás enviando los argumentos, que son los valores de tu f_ini y f_fin. Tienes que hacer el retrieve con esta sintaxis: dw_1. retrieve(valor_f_ini, valor_f_fin).

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas