FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||||
|
||||||
Agradezco la buena intención, Mario. Vamos por partes para tratar de sintonizarnos.
"Tal vez" no, ¡con toda seguridad! Ha quedado claro que una cosa es el estándar ISO para fechas y horas y otra el presunto estándar SQL para fechas y horas (sería bueno encontrar la prueba definitiva de su existencia). Los cuales, hace algunos años, asumí de forma errónea que se trataban de la misma cosa, y por eso nombré a esas funciones con la palabra "ISO", empleándolas luego en asuntos de SQL. Cita:
Cita:
Cita:
La función que refieres, la nativa FormatDateTime de Delphi, toma como primer argumento el formato que se quiere utilizar. Pero otras funciones nativas, como DateToStr, TimeToStr y DateTimeToStr (las versiones que reciben un sólo parámetro) no. Todas estas hacen la conversión con base en el formato que señalan un grupo de variables globales. Es algo de lo más normal y a nadie le hace poner el grito en el cielo, en virtud de que dicho formato es relativamente estable bajo su contexto (en nuestro caso sería el contexto del lenguaje SQL), pero siempre está abierto a que la aplicación lo establezca. Tú mismo has dicho que usas el comando Set DateFormat de MS-SQL. Cita:
Cita:
Vamos Mario, arrima el hombro más allá de la crítica (ésta no dejes de soltarla porque la considero importante). Casimiro, ElKurgan y beginner01 se tomaron la molestia de hacer pruebas e indagar. He leído que trabajas con muy diversas tecnologías, por lo que es probable que tengas acceso inmediato a SGBDs no evaluados aún. Si lees con detenimiento, comprenderás que hay indicios sobre la existencia de ese estándar SQL para expresión literal de fechas y horas. Y si es un estándar, ¿por qué no habría de ser el valor predeterminado (default) de la variable global de formato? A fin de cuentas, sólo tendrían que ajustar esta variable aquellos que usen gestores SQL "renegados" (y mira que MS-SQL, por lo que se ve en los enlaces y en las pruebas, ha terminado admitiendo el formato sin la T). Esa manía de lanzar aventuradas generalizaciones... Recuerda que hablamos de una biblioteca de propósito general. No voy a suprimir la existencia de una función sólo porque alguien podría darle un mal uso (¿que se dejen de fabricar cuchillos para evitar los apuñalamientos?). Como programadores bibliotecarios, no podemos conocer el total de las situaciones donde una rutina o clase podría ser útil, porque eso está en el infinito. Pero sí podemos, y debemos, abrirnos a la experiencia, al estudio de toda clase de temas y al entendimiento de las necesidades de nuestros usuarios (con más ánimo cuando éstos tienen la paciencia de explicarlas a detalle); y entonces considerar escenarios en los que nuestras pequeñas creaciones significarán la solución a algo. Nunca sabes quién estará, por ejemplo, creando una herramienta de administración de bases de datos con capacidad para formar sentencias SQL puras, quizá de mantenimiento, a partir de palabras y valores introducidos en cuadros de texto. Ninguna inyección (no "injeccion") SQL por la que tengamos que asustarnos. Cita:
¿Qué es una variable global? Es un campo de una clase anónima cuyo contexto es la aplicación entera. Saludos. Última edición por Al González fecha: 14-04-2013 a las 08:47:09. |
#2
|
||||
|
||||
Cita:
En cierto trabajo que estuve hace un tiempo presumían de no usar variables globales, era el gran secreto del programador jefe de allí, "bien, y entonces cómo hacéis?, pregunté, y la respuesta: usamos un record accesible a todos los módulos. ¿Y eso no es lo mismo que una variable global? Perdón por desvirtuar un poco. |
#3
|
||||
|
||||
No desvirtúas nada, Antonio. GHF, como la propia VCL, emplea variables globales para algunas cosas.
Bueno, sigamos avanzando en esto. Propuesta Por un lado tendremos las funciones ISO ghISODate, ghISOTime y ghISODateTime, que usarán invariablemente el formato extendido de representación completa para fecha del calendario y hora local dado por el estándar ISO 8601; mirar estas tablas. Las funciones ghISOXXX serán útiles donde quiera que se necesite expresar fechas y horas bajo ese formato, como es el caso de los documentos XML: Código:
<xs:attribute name="fecha" use="required"> <xs:annotation> <xs:documentation>Atributo requerido para la expresión de la fecha y hora de expedición del comprobante fiscal. Se expresa en la forma aaaa-mm-ddThh:mm:ss, de acuerdo con la especificación ISO 8601.</xs:documentation> </xs:annotation> <xs:simpleType> <xs:restriction base="xs:dateTime"> <xs:whiteSpace value="collapse" /> </xs:restriction> </xs:simpleType> </xs:attribute> ---------- <cfdi:Comprobante xmlns:cfdi="http://www.sat.gob.mx/cfd/3" xmlns:xsi="http://www.w3.org /2001/XMLSchema-instance" xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx /sitio_internet/cfd/3/cfdv3.xsd http://www.sat.gob.mx/TimbreFiscalDigital TimbreFiscalDigital.xsd" version="3.0" folio="4009" fecha="2011-11-14T09:21:00" [...]
Las tres últimas, ghSQLDate, ghSQLTime y ghSQLDateTime serán "configurables" mediante tres variables globales de tipo String: GHSQLDateFormat, GHSQLTimeFormat, y GHSQLDateTimeFormat, cuyos valores predeterminados serán 'yyyy-mm-dd', 'hh:nn:ss' y 'yyyy-mm-dd hh:nn:ss' (espacio intermedio y no T), respectivamente. No porque sean los que Firebird acepta incondicionalmente, sino porque todos los motores SQL debieran admitirlo sin protestar, ¿me ayudan por favor a corroborar o refutar esta última afirmación? Si quisiéramos prescindir de las variables globales, habría que declarar parámetros de formato para fechas y horas en todas las funciones del diagrama anterior. Eso sería engorroso y la aplicación consumiría un poco más de recursos, además de que llamar a tales funciones con valores de fecha y hora, y hacerlo con formatos distintos a los del estándar SQL, sería probablemente lo menos frecuente. ¿Vamos bien? Última edición por Al González fecha: 15-04-2013 a las 20:03:12. |
#4
|
||||
|
||||
Cita:
------ PD: Segun http://www.postgresql.org/docs/9.1/s...-datetime.html Cita:
Código:
ISO ISO 8601/SQL standard 1997-12-17 07:37:16-08 SQL traditional style 12/17/1997 07:37:16.00 PST POSTGRES original style Wed Dec 17 07:37:16 1997 PST German regional style 17.12.1997 07:37:16.00 PST Con respecto a probar cada estilo en BD, lo que yo hago es que lo defino con comandos como SET DATEFORMAT o su similar. Cuando el motor no tiene algo asi (ej: FoxPro) uso una funcion (ej: Date(2003,1,1) y en el *peor* de los casos el formato de acuerdo al locale de la BD. El punto que no deje claro antes y que ahora por fin lo logro articular (y que se desprende del principio de la robustes) es que si la cadena de fecha es una "salida" se puede definir el formato que mejor parezca (ya sea el ISO, si es pa pasar entre programas, y el "SQL" para mostrar a humanos) pero en este caso de uso en particular se envia como una "entrada" y por lo tanto, no se puede garantizar que vaya a funcionar, en *todos* los motores. En los motores principales (Sql Server, Postgres, MySql) va a funcionar (ya chequee los docs). Osea, en resumen... dejalo asi como lo has pensado..
__________________
El malabarista. |
#5
|
||||
|
||||
Acabo de subir la actualización de abril (archivo GHFreebrary_Delphi7_20130419.zip) con los cambios que aquí se trataron. Todo lo concerniente al tema de este hilo quedó resuelto dentro de la unidad GHFRTL.pas. Siéntanse con la libertad de examinarla, aprovecharla y compartir sus opiniones.
Un agradecimiento a beginner01, ElKurgan, mamcx y Casimiro Notevi. Sigamos avanzando en los otros temas. Al González. Última edición por Al González fecha: 27-04-2013 a las 07:07:46. |
#6
|
||||
|
||||
Una nota más: Las funciones mencionadas ya se encuentran disponibles y probadas también en el paquete para XE2.
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Ayuda sobre manejo de fechas | francodelphi | Conexión con bases de datos | 12 | 27-10-2011 01:22:15 |
Como definir Funciones Globales | destrukthor | Varios | 4 | 07-07-2006 14:12:18 |
Problemas al definir UDF (Funciones en una DLL) | pcicom | Firebird e Interbase | 2 | 21-06-2006 05:49:15 |
Definir funciones y procedimientos en FastReport???? | burasu | Impresión | 1 | 16-05-2005 21:47:37 |
Sobre actualizaciones de programas y estándar x2 | obiwuan | Humor | 0 | 06-05-2003 22:04:07 |
|