Cita:
Empezado por ecfisa
Hola.
Ví que en otro hilo consultaste sobre la funcionalidad del método Requery, espero que esta traducción de la ayuda de Delphi conteste tu duda:
Saludos
|
Muchas gracias estimado ..
Mi pregunta relacionado a esto fue que he intentado que mi procedimiento para actualizar un registro lo hace bien, puesto que al intentar actualizar me sale el siguiente mensaje:
---------------------------
Debugger Exception Notification
---------------------------
Project CTRO.exe raised exception class EOleException with message 'No se puede encontrar la fila para su actualización: algunos valores han cambiado desde la última vez que se leyó'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
Te comento rapido, antes mi base de datos mysql (mariadb) estaba en un servidor Windows, por necesidades exporte la base de datos ahora a un servidor Linux, al querer usar el sistema nuevamente me aparece este mensaje al querer actualizar un registro, cosa que antes en el anterior servidor no lo hacia.
Mi codigo de actualización es el siguiente:
Código:
with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('SELECT * FROM ONTs ');
SQL.Add('WHERE MAC_ONT LIKE ' +quotedstr('%' + Edit1.Text + '%')+' ');
Open;
if isEmpty Then
begin
AdoQuery1.Close; // cierro la tabla.
AdoQuery1.Open; // abro la Tabla
msError('No se encuentra registrado, Favor verifica los datos.','ERROR: ID MAC');
ADOQuery1.Active := False;
Edit1.SetFocus;
exit;
End
Else // En caso de Si haber un resultado
Begin
If MessageDlg('¿Está seguro que desea ACTUALIZAR el registro? ',mtConfirmation,[mbYes,mbNo],0) = mrYes then
begin
Alta_ONT.Cursor:= crSQLWait;
DMod1.ADOConnection1.BeginTrans; // Inicio la Transacción
try
ADOQuery1.Edit; // Editar la Tabla
ADOQuery1.FieldByName('MOD_ONT').AsString := ComboBox1.Text;
ADOQuery1.FieldByName('SERIE_ONT').AsString := Edit2.Text;
ADOQuery1.FieldByName('PON_ONT').AsString := Edit3.Text;
ADOQuery1.FieldByName('ONT_S').AsString := Edit4.Text;
ADOQuery1.FieldByName('SSID_ONT').AsString := Edit5.Text;
ADOQuery1.FieldByName('KEYWIFI_ONT').AsString := Edit6.Text;
ADOQuery1.FieldByName('IP_ONT').AsString := Edit7.Text;
ADOQuery1.FieldByName('ESTATUS_ONT').AsString := ComboBox2.Text;
ADOQuery1.Post; // Guardo Datos;
if DMod1.ADOConnection1.InTransaction then
Begin
DMod1.AdoConnection1.CommitTrans; // actualizo la BD
AdoQuery1.Close; // cierro la tabla.
AdoQuery1.Open; // abro la Tabla
Alta_ONT.Cursor:= crDefault;
MSG:='EL Registro ONU [MAC: '+ Edit1.Text + ' - MODELO: ' + ComboBox1.Text + ' - SERIE: '+ Edit2.Text +' - ONT/s: ' + Edit4.Text + ' ] - SE MODIFICO/ACTUALIZO Satisfactoriamente';
Application.MessageBox(PChar(MSG), 'Atención',MB_ICONINFORMATION );
LimpiarCampos([Edit1,Edit2,Edit3,Edit4,Edit5,Edit6,Edit7,ComboBox1,Combobox2]);
DesactivarCampos([Edit1,Edit2,Edit3,Edit4,Edit5,Edit6,Edit7,ComboBox1,Combobox2]);
// -- Inicio Botones
CargarBotonesInicio;
// -- Fin Botones
Alta_ONT.Cursor:= crDefault;
ADOQuery1.Active := False;
bnuevo.SetFocus;
End;
except
on E:Exception do // Si hay Error de Conexión
begin
DMod1.AdoConnection1.RollbackTrans;
Alta_ONT.Cursor:= crDefault;
ADOQuery1.Active := False;
MSG:='Ocurrió un error al guardar los datos: ' + E.Message;
Application.MessageBox(PChar(MSG),'ERROR !!!', MB_ICONSTOP );
Abort;
exit;
end; // on
End; // try
End
Else
Begin
AdoQuery1.Close; // cierro la tabla.
AdoQuery1.Open; // abro la Tabla
Alta_ONT.Cursor:= crDefault;
ADOQuery1.Active := False;
msInfo('¡CANCELADO POR EL USUARIO!.','Atención Proceso Cancelado..');
BCancelar.SetFocus;
exit;
End;
End;