Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Actualizacion BD en Ado (https://www.clubdelphi.com/foros/showthread.php?t=60515)

koalasoft 04-03-2017 16:58:34

Cita:

Empezado por ecfisa (Mensaje 513989)
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;


ecfisa 04-03-2017 19:56:27

Hola.
Cita:

Empezado por koalasoft (Mensaje 513995)
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.

Entiendo entonces, que tu programa funcionaba bién hasta que realizaste el cambio. Revisa en estos enlaces donde se menciona dicho error a ver si alguno de los casos se corresponde con el tuyo o te orienta al respecto:
Saludos :)


La franja horaria es GMT +2. Ahora son las 13:39:34.

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