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