Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki
Tratamiento de fechas con Delphi y MySQL para las versiones 3 y 4 de MySQL - Delphi
Lenguaje de programación Borland Delphi


Este ejemplo en Delphi 6 y MySQL 3.x, MySQL 4.x, explica cómo formatear una fecha para insertar/actualizar un registro de tipo DATETIME y otro de tipo DATE de una tabla MySQL.

Para ello, en el caso de MySQL 4.x es suficiente con pasar como parámetro un valor de tipo ftDateTime, en la consulta SQL no es necesario formatear la cadena.

En el caso de MySQl 3.x es necesario formatear la fecha y hora que se le pasará en formato texto ftString y habrá que formatear la consulta SQL de la siguiente forma:
* Para campos de tipo DATETIME: STR_TO_DATE(nombre_campo, "%d/%c/%Y %H:%i:%s")
* Para campos de tipo DATE: STR_TO_DATE(nombre_campo, "%d/%c/%Y")


A continuación os mostramos un ejemplo completo desarrollado en Delphi, para este ejemplo serán necesarios varos componentes (TForm, TQuery, etc). Lo importante es la consulta SQL y el parámetro que se le pasa:

procedure TFormMenuPrincipal.guardarIPBD (ip : string);
begin
  be.Panels.Items[1].Text := 'Guardando nueva IP en Base de Datos';
  be.Refresh;
  try
    md.tcConsulta.Active := false;
    md.BD.LoginPrompt := false;
    md.BD.Connected := false;
    md.BD.HostName := vtIPServidorBD;
    md.BD.Port := vtPuertoServidorBD;
    md.BD.Database := vtBDServidorBD;
    md.BD.User := vtUsuarioConexionBDServidorBD;
    md.BD.Password := vtContrasenaConexionBDServidorBD;
    md.BD.Connected := true;
    md.tcConsulta.SQL.Clear;
    md.tcConsulta.SQL.Add('SELECT USUARIO, CONTRASENA ' +
        'FROM ip WHERE USUARIO = :pUsuario');
    md.tcConsulta.ParamByName('pUsuario').DataType := ftstring;
    md.tcConsulta.ParamByName('pUsuario').Value := 
        AnsiUpperCase (vtUsuarioServidorBD);
    md.tcConsulta.Open;
    if md.tcConsulta.RecordCount > 0 then
    begin
      if md.tcConsulta.FieldByName('CONTRASENA').AsString = 
          vtContrasenaServidorBD then
      begin
        md.tcConsulta.Close;
        md.tcConsulta.SQL.Clear;
        if vtServidorBDProtocolo <> 'mysql-4.1' then
          md.tcConsulta.SQL.Add('UPDATE ip SET IPACTUAL = :pIP,' +
              ' FECHACAMBIO = :pFecha' +
              ' WHERE USUARIO = :pUsuario')
        else
          md.tcConsulta.SQL.Add('UPDATE ip SET IPACTUAL = :pIP,' +
              ' FECHACAMBIO = STR_TO_DATE(:pFecha, "%d/%c/%Y %H:%i:%s")' +
              ' WHERE USUARIO = :pUsuario');
        md.tcConsulta.ParamByName('pUsuario').DataType := ftstring;
        md.tcConsulta.ParamByName('pUsuario').Value := AnsiUpperCase (vtUsuarioServidorBD);
        md.tcConsulta.ParamByName('pIP').DataType := ftstring;
        md.tcConsulta.ParamByName('pIP').Value := ip;
        if vtServidorBDProtocolo <> 'mysql-4.1' then
          md.tcConsulta.ParamByName('pFecha').DataType := ftDateTime
        else
          md.tcConsulta.ParamByName('pFecha').DataType := ftstring;
        md.tcConsulta.ParamByName('pFecha').Value := now;
        md.tcConsulta.ExecSQL;
        errorGuardarBD := false;
        be.Panels.Items[1].Text := 'IP guardada en Base de Datos correctamente';
        be.Refresh;
        if vtGuardarLog then
          mLog.Lines.Add(DateToStr (date) + ' - ' + TimeToStr (time) +
              ' IP guardada correctamente en Servidor Base de Datos');
      end
      else
      begin
        errorGuardarBD := true;
        be.Panels.Items[1].Text := 'Error al guardar IP en BD: contraseña no válida';
        be.Refresh;
        if vtGuardarLog then
          mLog.Lines.Add(DateToStr (date) + ' - ' + TimeToStr (time) +
              ' Error al conectar al Servidor de BD: la contraseña del usuario ' +
              vtUsuarioServidorIP + ' no es correcta');
      end;
    end
    else
    begin
      md.tcConsulta.Close;
      md.tcConsulta.SQL.Clear;
      if vtServidorBDProtocolo <> 'mysql-4.1' then
        md.tcConsulta.SQL.Add('INSERT INTO ip (IPACTUAL, USUARIO, CONTRASENA, ' +
            'FECHAALTA, FECHACAMBIO) ' +
            'VALUES (:pIP, :pUsuario, :pContrasena, :pFechaAlta, :pFechaCambio)')
      else
        md.tcConsulta.SQL.Add('INSERT INTO ip (IPACTUAL, USUARIO, CONTRASENA, ' +
            'FECHAALTA, FECHACAMBIO) ' +
            'VALUES (:pIP, :pUsuario, :pContrasena, ' +
            'STR_TO_DATE(:pFechaAlta, "%d/%c/%Y"), ' +
            'STR_TO_DATE(:pFechaCambio, "%d/%c/%Y %H:%i:%s"))');
      md.tcConsulta.ParamByName('pUsuario').DataType := ftstring;
      md.tcConsulta.ParamByName('pUsuario').Value := 
          AnsiUpperCase (vtUsuarioServidorBD);
      md.tcConsulta.ParamByName('pIP').DataType := ftstring;
      md.tcConsulta.ParamByName('pIP').Value := ip;
      md.tcConsulta.ParamByName('pContrasena').DataType := ftstring;
      md.tcConsulta.ParamByName('pContrasena').Value := vtContrasenaServidorBD;
      if vtServidorBDProtocolo <> 'mysql-4.1' then
        md.tcConsulta.ParamByName('pFechaAlta').DataType := ftDateTime
      else
        md.tcConsulta.ParamByName('pFechaAlta').DataType := ftstring;
      md.tcConsulta.ParamByName('pFechaAlta').Value := now;
      if vtServidorBDProtocolo <> 'mysql-4.1' then
        md.tcConsulta.ParamByName('pFechaCambio').DataType := ftDateTime
      else
        md.tcConsulta.ParamByName('pFechaCambio').DataType := ftString;
      md.tcConsulta.ParamByName('pFechaCambio').Value := now;
      md.tcConsulta.ExecSQL;
      errorGuardarBD := false;
      be.Panels.Items[1].Text := 'IP guardada en BD correctamente';
      be.Refresh;
      if vtGuardarLog then
        mLog.Lines.Add(DateToStr (date) + ' - ' + TimeToStr (time) +
            ' IP guardada correctamente en Servidor Base de Datos (el usuario ' +
            vtUsuarioServidorBD + ' se ha añadido correctamente');

    end;
    md.tcConsulta.Close;
    md.bd.Disconnect;
  except
    on E : Exception do
    begin
      errorGuardarBD := true;
      be.Panels.Items[1].Text := 'Error al guardar IP en Base de Datos';
      be.Refresh;
      if vtGuardarLog then
        mLog.Lines.Add(DateToStr (date) + ' - ' + TimeToStr (time) +
            ' Error al conectar al Servidor de BD ' + ip + ': [' + 
            E.ClassName + '] ' +
            e.Message);
    end;
  end;
end;




Publicado el: 2006-07-06

Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A