Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Error conversion from string '26/01/2006' (https://www.clubdelphi.com/foros/showthread.php?t=29659)

ZRR 27-01-2006 20:55:41

Error conversion from string '26/01/2006'
 
Que tal, buen dia a todos
Tengo un problema con una consulta SQL que usa una fecha, uso Delphi 7, Firebird 1.5 sobre Win XP en ingles

El programa pide fecha y cliente para buscar los pedidos de dicho cliente en la fecha indicada. Para la fecha utilizo un DateTimePicker.
Una vez que el usr introduce los datos, presiona un botón y se ejecuta un query con la fecha y el cliente indicados:
Código Delphi [-]
EditFecha.Field.Value:= FormatDateTime('mm"/"dd"/"yyyy', DateTFecha.Date);
Código SQL [-]
IBqry.SQL.Clear;
IBqry.SQL.Add('Select CvePedido from Pedidos where Fecha='''+
EditFecha.Field.AsString +''' and CveCliente='+ ComboCliente.Field.AsString);
IBqry.Open;
...
IBqry.Close;

Todo funciona bien en la maquina de desarrollo (servidor), pero al correr a una maquina con Windows XP en español (cliente) conectada con la base de datos en la maquina de desarrollo con Windows XP en ingles (servidor) al ejecutar la misma aplicación me regresa el error:
Código:

Conversion error from string '26/01/2006'
Como pueden ver, el edit que contiene la fecha 'EditFecha' ya esta formateando la fecha a 'mm"/"dd"/"yyyy' de la fecha del DateTimePicker.

Alguien saben a que se debe?

Muchas gracias por su ayuda

delphi.com.ar 27-01-2006 21:50:28

Esa manía... esa manía!
Cita:

Empezado por ZRR
Código Delphi [-]
EditFecha.Field.Value:= FormatDateTime('mm"/"dd"/"yyyy', DateTFecha.Date);

¿Porque si tenes una fecha la convertís a una cadena?
Código Delphi [-]
EditFecha.Field.Value:= DateTFecha.Date;

Equinoxe 27-01-2006 22:14:15

Configuración regional de idioma.
 
El error se debe a la configuración regional y de idioma local del sistema operativo.

En inglés el formato para fecha es mm/dd/yyyy, sin embargo en español es dd/mm/yyyy, es por eso que no funciona con el Windows en español.

Firebird es incapaz de entender e interpretar tu fecha string en formato Timestamp; aunque en realidad no es culpa de Firebird. Puedo sugerirte dos soluciones:

[1] Si vas a insertar el valor de la fecha directamente en la sentencia SQL al construírla en el Query, entonces deberías usar el formato universal aceptado en SQL, que es: yyyy-mm-dd.

[2] En vez de insertar los valores directamente en la sentencia SQL de tu Query, utiliza parámetros para pasar estos valores a la sentencia.

Tu sentencia quedaría así:
Código:

SELECT CvePedido
FROM Pedidos
WHERE Fecha = :Fecha AND CveCliente = :CveCliente

De esta manera, puedes pasar el valor de la fecha directamente de tu DateTimePicker, sin tener que preocuparte por la conversión regional de idioma. Tu código Delphi quedaría así:
Código Delphi [-]
IBqry.ParamByName('Fecha').Value := DateTFecha.Date;
IBqry.ParamByName('CveCliente').Value := ComboCliente.Field.AsString;

Te recomiendo ampliamente la opción [2] sobre la [1]; es más elegante y te permite abstraerte de detalles regionales para que puedas concentrarte en cosas más importantes.

Equinoxe 27-01-2006 22:25:10

1 Archivos Adjunto(s)
__________

ZRR 27-01-2006 23:46:42

sin comentarios

delphi.com.ar 27-01-2006 23:56:12

Cita:

Empezado por Equinoxe
¡Buéh, porque este pibe es un boludo!
¿Qué querés...? Hay gente en este mundo a la que le fascinan las cadenas.

Cuidiado!.. entre amigos y con confianza no hay problema, pero en otros casos esa palabra puede sonar muy agresiva y grosera!


La franja horaria es GMT +2. Ahora son las 21:33:35.

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