El juego de las citas


El Perpetuo Novato de la Entrada de Registro #6.1
Este artículo apareció por primera vez en http://www.undu.com
Si usted tiene consultas parametrizadas, usted probablemente está obteniendo rangos de fecha para un campo u otro en el proceso. Un típico podría ser, un total de ventas de informe para un tiempo específico.
La solución más simple es configurar un par de datepickers y el uso de los parámetros de la función de la consulta para asignar el valor. Personalmente, me gusta construir la consulta de forma dinámica cada vez. Es un poco más lento, pero puedo ver toda la consulta en mi código de programación y que con frecuencia una bendición.
Además, me gustaría ofrecer mis usuarios un método rápido para entrar en la nebulosa del tiempo de marcos de este mes, en el último trimestre o año a la fecha. Así, lo que sigue es cómo construir en una Fecha Ranger en mis aplicaciones.
El primer paso es adquirir el ESB Fechas de freeware en la biblioteca. Glen Crouch y colaboradores han creado un gran recurso en el sitio web: www.esbconsult.com.au
Mientras que usted está en la ESB sitio, agarrar el programa bibliotecas para las matemáticas y de las rutinas. Cada uno tiene el código que se incluye y su top-notch de programación. Y echar un vistazo a las Estadísticas del programa que es la característica principal del sitio. Si haces CUALQUIER fantasía de matemáticas en su programa, entonces esta es la herramienta para usted.
yo uso la Fecha Ranger forma de servir también como una confirmación de que el usuario desea ejecutar el informe. Tiene dos datepickers (si usted ha estado siguiendo otros hilos en la web, usted sabrá acerca de los recientes temores acerca de los nativos de Delphi recicladores. Yo uso Orfeo de la versión en su lugar, con su habilidad para escribir en breves frases en inglés para las fechas. Orfeo está disponible desde TurboPower en www.turbopower.com). Conjunto de los dos selectores para la fecha de hoy (o la más común rango de fechas si hay una abrumadora mayoría popular requisito) en la forma de crear proc.
Una de las ventajas de utilizar el Orfeo de control es que tiene una sencilla función para convertir fechas en cuatro dígitos para el año cadenas. Se llama DateString y requiere de una máscara, como se verá.
Inbetweeen los dos datepickers, denominado cdesde y dTo, respectivamente, es un botón con un simple título. Sirve como una etiqueta Y un conducto de un menú emergente, para facilitar la selección de un conjunto de intervalo de fechas. El procedimiento para este botón se parece a esto:
procedimiento TFrmReport.BtnToClick(Sender: TObject)
begin
& nbsp & nbsp pmDateRanger.Popup(FrmReport.A La Izquierda 120, FrmReport.Top 84)
fin
En forzar la convocatoria de la ventana emergente, usted tiene que decir dónde pop-up. Usted puede experimentar y obtener coordenadas absolutas, o puede utilizar una fórmula que puede llegar a ser muy involucrado. Una cosa no hay que olvidar que cuando se utiliza la siguiente fórmula, usted tiene que crear una lo suficientemente grande como off-set para acomodar el título y cualquier menú de altura:
(FrmReport.a la izquierda BtnTo.a la izquierda, FrmReport.top BtnTo.top BtnTo.altura 25)
también puede señalar el menú emergente de la propiedad del botón para el pmDateRanger. De esa manera, si el usuario hace clic en, se muestra en el antiguo lugar. Si el usuario hace clic en el botón, el menú aparece en el defecto, un número de píxeles inferior y a la derecha. Es sólo un poco desconcertante.
El menú emergente que se rellena a través de su menú de opciones. El grupo del que yo podría o podría NO coincidir con el tuyo. Estoy seguro que vas a tener un diferente concepto de agrupación que la mía. Sin embargo, el secreto está en la configuración de la etiqueta de cada opción de menú, para que pueda ser procesada por el controlador central. Yo uso la ecografía de las 11-13 para los días 21 al 23 de semanas, 31-33 durante meses, 41-43 por trimestres, 51-54 para la fecha en grupo, 61-62 para biz días, 71-72 durante años y de 80 para el omnipresente en TODAS las Fechas. Tenga en cuenta que usted puede ser que desee establecer el cdesde a una fecha anterior que de 1980 si usted tiene necesidad de aún MÁS la fecha histórica que van.
es importante en este momento para decirles de una trampa caí en los primeros tres veces he tratado de programa de la memoria. (Soy un novato, después de todo). Hay una sensación de que usted debe utilizar la OnPopUp o evento OnChange del menú emergente para hacer el menú de picking manejo. Nope! Crear un procedimiento independiente para el uso del método OnCLICK de cada elemento de menú, MIENTRAS que se está mostrando en el diseñador de menús. A continuación, pulse mayús y haga clic en todas las medidas inmediatas elementos de menú y seleccione el OnClick para su controlador. NO incluir a los padres de cualquier niño menús que usted pueda tener. Cometió ese error.
El código para actualizar el selector de fecha para un rango del conjunto de las carreras de la pmMenuHandler proc:
procedimiento TFrmReport.pmMenuHandler(Sender: TObject)
var
& nbsp & nbsp t, s : TDateTime
begin
& nbsp & nbsp t := fecha
& nbsp & nbsp caso (remitente como TMenuItem).etiqueta de
& nbsp & nbsp & nbsp & nbsp 11 : begin // ayer
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateFrom.fecha := t - 1
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := t - 1
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp 12 : begin // hoy
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateFrom.fecha := t
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := t
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp 13 : begin // mañana
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateFrom.fecha := t 1
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := t 1
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp 21 : begin // la semana pasada
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp s := t - 7
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp mientras isMonday(s) = false
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp s := s - 1
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateFrom.fecha := s
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := s 6
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp 22 : begin // esta semana
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp s := t
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp mientras isMonday(s) = false
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp s := s - 1
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateFrom.fecha := s
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := s 6
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp 23 : begin // la próxima semana
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp s :t = 7
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp mientras isMonday(s) = false
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp s := s - 1
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateFrom.fecha := s
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := s 6
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp 31 : begin // el mes pasado
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp s := GetFirstDayOfMonth(t)-1 // obtiene el último día del último mes.
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateFrom.fecha := GetFirstDayOfMonth(s)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := s
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp 32 : begin // este mes
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateFrom.fecha := GetFirstDayOfMonth(t)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := GetLastDayOfMonth(t)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp 33 : begin // el próximo mes

& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp s := GetLastDayOfMonth(t) 1 // obtiene el primer día del próximo mes.
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateFrom.fecha := s
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := GetLastDayOfMonth(s)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp 41 : begin // el último trimestre
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp s := GetFirstDayOfQuarter(t)-1 // obtiene el último día de la última P
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateFrom.fecha := GetFirstDayOfQuarter(s)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := s
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp 42 : begin // este trimestre
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateFrom.fecha := GetFirstDayOfQuarter(t)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := GetLastDayOfQuarter(t)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp 43 : begin // siguiente cuarto
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp s := GetLastDayOfQuarter(t) 1 // obtiene el primer día de la próxima Q
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateFrom.fecha := s
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := GetLastDayOfQuarter(s)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp 51 : begin // mes a la fecha
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateFrom.fecha := EncodeDate(este año,ThisMonth,1)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := t
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp 52 : begin // año hasta la fecha
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateFrom.fecha := EncodeDate(este año,1,1)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := t
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp 53 : begin // últimos 365 días
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateFrom.fecha := t - 365
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := t
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp 54 : begin // hace 13 semanas
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateFrom.fecha := t - 91
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := t
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp 61 : begin // antes biz día
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp s := t-1 // ayer
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp mientras isWeekend(s)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp hacer s := s - 1
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbs eDateFrom.fecha := s
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := s
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp 62 : begin // siguiente biz día
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp s :t = 1 // mañana
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp mientras isWeekend(s)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp hacer s := s 1
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateFrom.fecha := s
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := s
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp 71 : begin // el año pasado
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp s := GetFirstDayOfYear(Date2Year(t))-1 // obtiene el último día del último año.
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateFrom.fecha := GetFirstDayOfYear(Date2Year(s))
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := s
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp 72 : begin // este año
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateFrom.fecha := GetFirstDayOfYear(Date2Year(t))
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := GetLastDayOfYear(Date2Year(t))
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp 73 : begin // el próximo año
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp s := GetLastDayOfYear(Date2Year(t)) 1 // obtiene el primer día del próximo mes.
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateFrom.fecha := s
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := GetLastDayOfYear(Date2Year(s))
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp 80 : begin // todas las fechas
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateFrom.fecha := strToDate('1/1/1980')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := strToDate('1/1/2222')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp final
fin
más Tarde, un fragmento de código para tomar ventaja de lo que conseguimos con el rango de fecha seleccionado ahora. Aquí está el código para iniciar una consulta con el rango de fecha seleccionado:
procedimiento TFrmReport.BtnRepPrintClick(Sender: TObject)
var
& nbsp & nbsp dStart, dEnd : string
begin
& nbsp & nbsp dStart := ' (DateProd >= '' cdesde.DateString('mm/dd/yyyy') '')'
& nbsp & nbsp dfin := ' Y (DateProd <= '' dTo.DateString('mm/dd/yyyy') '')'
& nbsp & nbsp con qValue empiezan
& nbsp & nbsp & nbsp & nbsp active := false
& nbsp & nbsp & nbsp & nbsp sql.beginUpdate
& nbsp & nbsp & nbsp & nbsp sql.claro
& nbsp & nbsp & nbsp & nbsp sql.add('SELECT DISTINCT ')
& nbsp & nbsp & nbsp & nbsp sql.add(' PartNum,')
& nbsp & nbsp & nbsp & nbsp sql.add(' LotNum,')
& nbsp & nbsp & nbsp & nbsp sql.add(' DateProd,')
& nbsp & nbsp & nbsp & nbsp sql.add(' Producción')
& nbsp & nbsp & nbsp & nbsp sql.add(' ProductionValue')
& nbsp & nbsp & nbsp & nbsp sql.add('DESDE ')
& nbsp & nbsp & nbsp & nbsp sql.add(' 'de las VENTAS.db'')
& nbsp & nbsp & nbsp & nbsp sql.add('CUANDO ')
& nbsp & nbsp & nbsp & nbsp sql.agregar( DStart)
& nbsp & nbsp & nbsp & nbsp sql.agregar( Dfin)
& nbsp & nbsp & nbsp & nbsp sql.add('ORDER BY ')
& nbsp & nbsp & nbsp & nbsp sql.add(' PartNum,')
& nbsp & nbsp & nbsp & nbsp sql.add(' LotNum,')
& nbsp & nbsp & nbsp & nbsp sql.add(' DateProd,')
& nbsp & nbsp & nbsp & nbsp sql.add(' Producción')
& nbsp & nbsp & nbsp & nbsp sql.add(' ProductionValue')
& nbsp & nbsp & nbsp & nbsp sql.EndUpdate
& nbsp & nbsp & nbsp & nbsp active := true
& nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp qrValue.Imprimir
fin
no Hay duda de que yo pudiera tener paramaterized esta consulta. Pero es muy fácil de construir y modificar. Por ejemplo, tiene un número de lote del cuadro de edición en el formulario de informe para permitir opcional para limitar el informe. Una sencilla línea para añadir después de 'agregar dfin' de la línea sería:
si editLotNum.texto <> '
& nbsp & nbsp sql.add (' Y LotNum='' editLotNum.texto '')'
Si usted tiene un MONTÓN de parámetros para llenar de esta manera, a continuación, vaya a uno de los sql dinámico de la creación de servicios públicos. Ellos parecen estar apareciendo en todas partes. Yo uso SimpleQuery de lelSoft (http://lelsoft.hypermart.net). Pero si la fecha van es todo lo que usted necesita, usted debe ser el juego para escribir su propio.
Gary Mugford
Idea Mecánico, Bramalea EN Canadá
[email protected]









El juego de las citas


El juego de las citas : Multi-millones de consejos para hacer su vida mas facil.


El Perpetuo Novato de la Entrada de Registro #6.1
Este articulo aparecio por primera vez en http://www.undu.com
Si usted tiene consultas parametrizadas, usted probablemente esta obteniendo rangos de fecha para un campo u otro en el proceso. Un tipico podria ser, un total de ventas de informe para un tiempo especifico.
La solucion mas simple es configurar un par de datepickers y el uso de los parametros de la funcion de la consulta para asignar el valor. Personalmente, me gusta construir la consulta de forma dinamica cada vez. Es un poco mas lento, pero puedo ver toda la consulta en mi codigo de programacion y que con frecuencia una bendicion.
Ademas, me gustaria ofrecer mis usuarios un metodo rapido para entrar en la nebulosa del tiempo de marcos de este mes, en el ultimo trimestre o año a la fecha. Asi, lo que sigue es como construir en una Fecha Ranger en mis aplicaciones.
El primer paso es adquirir el ESB Fechas de freeware en la biblioteca. Glen Crouch y colaboradores han creado un gran recurso en el sitio web: www.esbconsult.com.au
Mientras que usted esta en la ESB sitio, agarrar el programa bibliotecas para las matematicas y de las rutinas. Cada uno tiene el codigo que se incluye y su top-notch de programacion. Y echar un vistazo a las Estadisticas del programa que es la caracteristica principal del sitio. Si haces CUALQUIER fantasia de matematicas en su programa, entonces esta es la herramienta para usted.
yo uso la Fecha Ranger forma de servir tambien como una confirmacion de que el usuario desea ejecutar el informe. Tiene dos datepickers (si usted ha estado siguiendo otros hilos en la web, usted sabra acerca de los recientes temores acerca de los nativos de Delphi recicladores. Yo uso Orfeo de la version en su lugar, con su habilidad para escribir en breves frases en ingles para las fechas. Orfeo esta disponible desde TurboPower en www.turbopower.com). Conjunto de los dos selectores para la fecha de hoy (o la mas comun rango de fechas si hay una abrumadora mayoria popular requisito) en la forma de crear proc.
Una de las ventajas de utilizar el Orfeo de control es que tiene una sencilla funcion para convertir fechas en cuatro digitos para el año cadenas. Se llama DateString y requiere de una mascara, como se vera.
Inbetweeen los dos datepickers, denominado cdesde y dTo, respectivamente, es un boton con un simple titulo. Sirve como una etiqueta Y un conducto de un menu emergente, para facilitar la seleccion de un conjunto de intervalo de fechas. El procedimiento para este boton se parece a esto:
procedimiento TFrmReport.BtnToClick(Sender: TObject)
begin
& nbsp & nbsp pmDateRanger.Popup(FrmReport.A La Izquierda 120, FrmReport.Top 84)
fin
En forzar la convocatoria de la ventana emergente, usted tiene que decir donde pop-up. Usted puede experimentar y obtener coordenadas absolutas, o puede utilizar una formula que puede llegar a ser muy involucrado. Una cosa no hay que olvidar que cuando se utiliza la siguiente formula, usted tiene que crear una lo suficientemente grande como off-set para acomodar el titulo y cualquier menu de altura:
(FrmReport.a la izquierda BtnTo.a la izquierda, FrmReport.top BtnTo.top BtnTo.altura 25)
tambien puede señalar el menu emergente de la propiedad del boton para el pmDateRanger. De esa manera, si el usuario hace clic en, se muestra en el antiguo lugar. Si el usuario hace clic en el boton, el menu aparece en el defecto, un numero de pixeles inferior y a la derecha. Es solo un poco desconcertante.
El menu emergente que se rellena a traves de su menu de opciones. El grupo del que yo podria o podria NO coincidir con el tuyo. Estoy seguro que vas a tener un diferente concepto de agrupacion que la mia. Sin embargo, el secreto esta en la configuracion de la etiqueta de cada opcion de menu, para que pueda ser procesada por el controlador central. Yo uso la ecografia de las 11-13 para los dias 21 al 23 de semanas, 31-33 durante meses, 41-43 por trimestres, 51-54 para la fecha en grupo, 61-62 para biz dias, 71-72 durante años y de 80 para el omnipresente en TODAS las Fechas. Tenga en cuenta que usted puede ser que desee establecer el cdesde a una fecha anterior que de 1980 si usted tiene necesidad de aun MAS la fecha historica que van.
es importante en este momento para decirles de una trampa cai en los primeros tres veces he tratado de programa de la memoria. (Soy un novato, despues de todo). Hay una sensacion de que usted debe utilizar la OnPopUp o evento OnChange del menu emergente para hacer el menu de picking manejo. Nope! Crear un procedimiento independiente para el uso del metodo OnCLICK de cada elemento de menu, MIENTRAS que se esta mostrando en el diseñador de menus. A continuacion, pulse mayus y haga clic en todas las medidas inmediatas elementos de menu y seleccione el OnClick para su controlador. NO incluir a los padres de cualquier niño menus que usted pueda tener. Cometio ese error.
El codigo para actualizar el selector de fecha para un rango del conjunto de las carreras de la pmMenuHandler proc:
procedimiento TFrmReport.pmMenuHandler(Sender: TObject)
var
& nbsp & nbsp t, s : TDateTime
begin
& nbsp & nbsp t := fecha
& nbsp & nbsp caso (remitente como TMenuItem).etiqueta de
& nbsp & nbsp & nbsp & nbsp 11 : begin // ayer
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateFrom.fecha := t - 1
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := t - 1
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp 12 : begin // hoy
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateFrom.fecha := t
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := t
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp 13 : begin // mañana
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateFrom.fecha := t 1
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := t 1
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp 21 : begin // la semana pasada
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp s := t - 7
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp mientras isMonday(s) = false
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp s := s - 1
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateFrom.fecha := s
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := s 6
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp 22 : begin // esta semana
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp s := t
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp mientras isMonday(s) = false
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp s := s - 1
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateFrom.fecha := s
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := s 6
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp 23 : begin // la proxima semana
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp s :t = 7
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp mientras isMonday(s) = false
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp s := s - 1
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateFrom.fecha := s
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := s 6
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp 31 : begin // el mes pasado
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp s := GetFirstDayOfMonth(t)-1 // obtiene el ultimo dia del ultimo mes.
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateFrom.fecha := GetFirstDayOfMonth(s)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := s
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp 32 : begin // este mes
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateFrom.fecha := GetFirstDayOfMonth(t)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := GetLastDayOfMonth(t)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp 33 : begin // el proximo mes

& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp s := GetLastDayOfMonth(t) 1 // obtiene el primer dia del proximo mes.
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateFrom.fecha := s
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := GetLastDayOfMonth(s)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp 41 : begin // el ultimo trimestre
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp s := GetFirstDayOfQuarter(t)-1 // obtiene el ultimo dia de la ultima P
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateFrom.fecha := GetFirstDayOfQuarter(s)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := s
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp 42 : begin // este trimestre
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateFrom.fecha := GetFirstDayOfQuarter(t)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := GetLastDayOfQuarter(t)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp 43 : begin // siguiente cuarto
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp s := GetLastDayOfQuarter(t) 1 // obtiene el primer dia de la proxima Q
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateFrom.fecha := s
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := GetLastDayOfQuarter(s)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp 51 : begin // mes a la fecha
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateFrom.fecha := EncodeDate(este año,ThisMonth,1)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := t
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp 52 : begin // año hasta la fecha
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateFrom.fecha := EncodeDate(este año,1,1)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := t
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp 53 : begin // ultimos 365 dias
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateFrom.fecha := t - 365
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := t
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp 54 : begin // hace 13 semanas
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateFrom.fecha := t - 91
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := t
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp 61 : begin // antes biz dia
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp s := t-1 // ayer
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp mientras isWeekend(s)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp hacer s := s - 1
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbs eDateFrom.fecha := s
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := s
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp 62 : begin // siguiente biz dia
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp s :t = 1 // mañana
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp mientras isWeekend(s)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp hacer s := s 1
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateFrom.fecha := s
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := s
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp 71 : begin // el año pasado
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp s := GetFirstDayOfYear(Date2Year(t))-1 // obtiene el ultimo dia del ultimo año.
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateFrom.fecha := GetFirstDayOfYear(Date2Year(s))
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := s
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp 72 : begin // este año
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateFrom.fecha := GetFirstDayOfYear(Date2Year(t))
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := GetLastDayOfYear(Date2Year(t))
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp 73 : begin // el proximo año
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp s := GetLastDayOfYear(Date2Year(t)) 1 // obtiene el primer dia del proximo mes.
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateFrom.fecha := s
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := GetLastDayOfYear(Date2Year(s))
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp 80 : begin // todas las fechas
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateFrom.fecha := strToDate('1/1/1980')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eDateTo.fecha := strToDate('1/1/2222')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp final
fin
mas Tarde, un fragmento de codigo para tomar ventaja de lo que conseguimos con el rango de fecha seleccionado ahora. Aqui esta el codigo para iniciar una consulta con el rango de fecha seleccionado:
procedimiento TFrmReport.BtnRepPrintClick(Sender: TObject)
var
& nbsp & nbsp dStart, dEnd : string
begin
& nbsp & nbsp dStart := ' (DateProd >= '' cdesde.DateString('mm/dd/yyyy') '')'
& nbsp & nbsp dfin := ' Y (DateProd <= '' dTo.DateString('mm/dd/yyyy') '')'
& nbsp & nbsp con qValue empiezan
& nbsp & nbsp & nbsp & nbsp active := false
& nbsp & nbsp & nbsp & nbsp sql.beginUpdate
& nbsp & nbsp & nbsp & nbsp sql.claro
& nbsp & nbsp & nbsp & nbsp sql.add('SELECT DISTINCT ')
& nbsp & nbsp & nbsp & nbsp sql.add(' PartNum,')
& nbsp & nbsp & nbsp & nbsp sql.add(' LotNum,')
& nbsp & nbsp & nbsp & nbsp sql.add(' DateProd,')
& nbsp & nbsp & nbsp & nbsp sql.add(' Produccion')
& nbsp & nbsp & nbsp & nbsp sql.add(' ProductionValue')
& nbsp & nbsp & nbsp & nbsp sql.add('DESDE ')
& nbsp & nbsp & nbsp & nbsp sql.add(' 'de las VENTAS.db'')
& nbsp & nbsp & nbsp & nbsp sql.add('CUANDO ')
& nbsp & nbsp & nbsp & nbsp sql.agregar( DStart)
& nbsp & nbsp & nbsp & nbsp sql.agregar( Dfin)
& nbsp & nbsp & nbsp & nbsp sql.add('ORDER BY ')
& nbsp & nbsp & nbsp & nbsp sql.add(' PartNum,')
& nbsp & nbsp & nbsp & nbsp sql.add(' LotNum,')
& nbsp & nbsp & nbsp & nbsp sql.add(' DateProd,')
& nbsp & nbsp & nbsp & nbsp sql.add(' Produccion')
& nbsp & nbsp & nbsp & nbsp sql.add(' ProductionValue')
& nbsp & nbsp & nbsp & nbsp sql.EndUpdate
& nbsp & nbsp & nbsp & nbsp active := true
& nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp qrValue.Imprimir
fin
no Hay duda de que yo pudiera tener paramaterized esta consulta. Pero es muy facil de construir y modificar. Por ejemplo, tiene un numero de lote del cuadro de edicion en el formulario de informe para permitir opcional para limitar el informe. Una sencilla linea para añadir despues de 'agregar dfin' de la linea seria:
si editLotNum.texto <> '
& nbsp & nbsp sql.add (' Y LotNum='' editLotNum.texto '')'
Si usted tiene un MONTON de parametros para llenar de esta manera, a continuacion, vaya a uno de los sql dinamico de la creacion de servicios publicos. Ellos parecen estar apareciendo en todas partes. Yo uso SimpleQuery de lelSoft (http://lelsoft.hypermart.net). Pero si la fecha van es todo lo que usted necesita, usted debe ser el juego para escribir su propio.
Gary Mugford
Idea Mecanico, Bramalea EN Canada
[email protected]


El juego de las citas

El juego de las citas : Multi-millones de consejos para hacer su vida más fácil.
Recommander aux amis
  • gplus
  • pinterest

Comentario

Dejar un comentario

Clasificación