Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Providers
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-08-2013
gcaffe gcaffe is offline
Miembro
 
Registrado: oct 2004
Posts: 53
Poder: 20
gcaffe Va por buen camino
Question Grabar DateField en MySQL da error

Hola,
Después de tiempo les presento una consulta que no puedo resolver, se trata de lo siguiente:
1. Estoy pasando una aplicación que trabaja con una BBDD SQL Server, sin problemas, a usar BBDD MySQL;
2. En una parte de la aplicación hay una grilla donde el usuario ingresa 3 datos: Una Fecha (dd/mm/yyyy), y dos datos mas, cuando termina el registro pasa al siguiente grabándose la información del anterior, esto funciona perfectamente en la versión SQL Server;
3. La misma operacion usando MySQL da el error 'Field value required', y he comprobado que es el campo Fecha, que pasa al MySQL en formato dd/mm/yyyy y eso no es soportado solo se permiten fecha yyyymmdd y otros mas pero siempre con el año como primer campo.
4. He tratado de resolver esto con lo en el evento OnBeforePost tratando de modificar la Fecha al formato YYYYMMDD pero da error que es fecha inválida.
5. He leído que se puede interceptar el DataPacket del Provider para modificarlo, pero no se como hacerlo;

En todo caso, una operación cotidiana y sencilla lo debería resolver el DBExpress, pero por alguna razón no lo hace.

Recurro a usted por si me dan alguna solución.

Muchas gracias
Responder Con Cita
  #2  
Antiguo 08-08-2013
Alejandro73 Alejandro73 is offline
Miembro
 
Registrado: abr 2006
Ubicación: Valparaiso - CHILE
Posts: 132
Poder: 19
Alejandro73 Va por buen camino
Estimado

Revisa este link http://www.clubdelphi.com/foros/showthread.php?t=68351, tal vez ahí este la solución a tu problema.

Saludos
__________________
Los muertos en CRISTO de sus tumbas volveran y los que vivimos en las nubes nos levantara .......
Responder Con Cita
  #3  
Antiguo 08-08-2013
gcaffe gcaffe is offline
Miembro
 
Registrado: oct 2004
Posts: 53
Poder: 20
gcaffe Va por buen camino
Gracias Alejando73:

El caso es que si yo preparo la sentencia SQL no tengo problemas en grabar, lo hace bien, porque en la sentencia puedo modificar el valor que envía al campo Date poniendo 'yyyymmdd'.
El problema surge cuando desde la grilla se envía a grabar, ya sea con el botón nbPost del componente TDbNavegator o porque pasa al siguiente registro.
En ese caso lo que ocurre es que en DBExpress genera automáticamente la sentencia SQL dejando la fecha en formato dd/mm/aaaa, lo que produce el error.
Necesito interceptar esa sentencia generada automáticamente por el dbExpress para modificarla, o sea modificar el datapacket.

Si alguien sabe como hacerlo les agradeceré una mano.

Muchas gracias.
Responder Con Cita
  #4  
Antiguo 08-08-2013
Alejandro73 Alejandro73 is offline
Miembro
 
Registrado: abr 2006
Ubicación: Valparaiso - CHILE
Posts: 132
Poder: 19
Alejandro73 Va por buen camino
Estimado

Y si cambias el TDBNavegator por botones? como lo son el bitbtn, speedbutton o tiene que ser necesariamente el TDBNavegator que se parece a la consola de comando de las radiocasette?

Saludos
__________________
Los muertos en CRISTO de sus tumbas volveran y los que vivimos en las nubes nos levantara .......
Responder Con Cita
  #5  
Antiguo 09-08-2013
gcaffe gcaffe is offline
Miembro
 
Registrado: oct 2004
Posts: 53
Poder: 20
gcaffe Va por buen camino
Hola Alejandro73:

Ya había probado la solución que sugieres y funciona, pero he encontrado otra sin la necesidad de eliminar el TDbNavegator, preparé un pequeño programa de ejemplo para probar y el resultado es este:
1. Creo un procedimiento para grabar el registro, como son campos persistentes no necesito el Sender, además así lo puedo invocar desde cualquier otro evento, lo que muestro es un ejemplo particular de mi aplicación, pero se entiende.
Código Delphi [-]
procedure TForm1.GrabarFechasPostError;
var
  FechaAMD: string;
begin
    FechaAMD := Copy(FechasFecha.AsString,7,4)+Copy(FechasFecha.AsString,4,2)+Copy(FechasFecha.AsString,1,2);
    with GrlDT do begin
      Close;
      CommandText := 'INSERT INTO TestFechas (Fecha) VALUES ('''+FechaAMD+''')';
      CambiarSQLText.Params[0].AsString := 'GrlSQLSrvDT';
      CambiarSQLText.Params[1].AsString := CommandText;
      CambiarSQLText.ExecuteMethod;
      Execute;
    end;
end;

Luego en el evento OnPostError de la tabla pongo este código:
Código Delphi [-]
procedure TForm1.FechasPostError(DataSet: TDataSet; E: EDatabaseError;
  var Action: TDataAction);
begin
// daFail, daAbort, daRetry
  Action := daAbort;
  GrabarFechas;
  Fechas.Close;
  Fechas.Open;
  Fechas.Last;
  grdFechas.SetFocus;
  PostMessage(ActiveControl.Handle, WM_KEYDOWN, VK_DOWN, 0); // Abre un nuevo registro para insertar
end;

Así funciona correctamente, pero creo que es una solución TEMPORAL, porque insisto, el dbExpress debe resolver esta situación al generar el SQL automático.
De todas formas agradeceré una respuesta para evitar estos artificios.

Muchas gracias.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
grabar stringgrid en mysql edgar_prospero Varios 9 04-07-2012 18:35:46
Error Al Grabar En Base De Datos MARIA_MAR MySQL 2 09-05-2012 18:14:40
Error al grabar un registro en IB Coichi Kake Conexión con bases de datos 2 17-08-2011 14:18:44
Error al Grabar informacion The_figo MySQL 0 30-10-2006 17:53:53
Error al grabar silviodp Conexión con bases de datos 5 31-05-2004 17:52:34


La franja horaria es GMT +2. Ahora son las 14:15:08.


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
Copyright 1996-2007 Club Delphi