Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MySQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-02-2017
koalasoft koalasoft is offline
Miembro
 
Registrado: oct 2004
Ubicación: Tenosique Tabasco
Posts: 86
Poder: 20
koalasoft Va por buen camino
Mensaje al Editar, después de Migrar BD

Que tal estimados ..

Me paso algo curioso .. anteriormente estaba trabajando con una maquina virtual donde tenia cargado mi Base de datos por medio de mariaDB en un servidor Linux, todo marchando bien ...

El detalle salio al cambiar la Base de Datos igualmente con mariaDB pero ahora a una maquina normalita con Windows 10 (xampp), alli volvi a crear la base de datos e importe esta al nuevo equipo con la ayuda de phpMyadmin.

Configuré el el Origines de Datos ODBC ahora con la base de datos y todo bien ...

Bueno ejecute el programa, me consulta bien, el problema sale cuando deseo hacer una actualización en mi sistema. Antes de la migración lo hacia sin problemas, todo bien .. fue ahora que lo cambié , al tratar de actualizar mi Base de datos con el sistema me envía este 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.
---------------------------


Como ya había comentado, puedo realizar una consulta sin problemas, solo ahora cuando quiero actualizar los datos me sale esto de igual forma me aparece cuando quiero insertar uno nuevo.

Por que sería?
Responder Con Cita
  #2  
Antiguo 23-02-2017
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Estas actualizando utilizando sentencias SQL (UPDATE Tabla ...) o los metodos Edit y Post de TDataSet?
Responder Con Cita
  #3  
Antiguo 23-02-2017
koalasoft koalasoft is offline
Miembro
 
Registrado: oct 2004
Ubicación: Tenosique Tabasco
Posts: 86
Poder: 20
koalasoft Va por buen camino
Cita:
Empezado por AgustinOrtu Ver Mensaje
Estas actualizando utilizando sentencias SQL (UPDATE Tabla ...) o los metodos Edit y Post de TDataSet?
Estoy usando ADOQuery para actualizar uso los métodos Edit y Post de TDataSet
Responder Con Cita
  #4  
Antiguo 23-02-2017
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
El tema es mas o menos asi, los componentes de acceso a datos para implementar el Edit y el Post construyen una sentencia UPDATE WHERE. Por algun motivo, la actualizacion que estas realizando provoca que la sentencia (concretamente el WHERE) filtre la fila que debe actualizar y por eso te retorna un error "no se puede encontrar la fila, quiza algun valor (claves primarias, secundarias, foraneas) haya cambiado)"

Existe la posibilidad de que cuando hayas montado el nuevo servidor en Windows te carge por defecto otra configuracion inicial, o bien te hayas olvidado de modificar algo y por eso estas teniendo otro comportamiento
Responder Con Cita
  #5  
Antiguo 23-02-2017
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
No es el mismo error, pero algo similar me lo he encontrado alguna vez cuando no hay definida clave primarias en una tabla.
Trabajando con ClientDataset, cuando no hay definido un campo Key (que al final el problema es similar).
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 23-02-2017
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Yo encontraba este tipo de problemas cuando habia varios usuarios usando la misma aplicacion contra la misma BD. Para reproducir:

1. Usuario 1 abre el query
2. Usuario 2 abre el query y se va a hacer un cafe
3. Usuario 1 modifica datos (edit + post)
4. Usuario 2 termina su cafe, vuelve e intenta modificar datos --> se produce la excepcion

Una solucion era refrescar el query (en caso de ADO si mal no recuerdo hay un metodo Requery). Ten en cuenta que puede provocar que el registro seleccionado cambie (por lo general sucede que se posiciona en el primero). Asi que tendrias que guardarte algun dato, como la clave primaria, del registro en donde estas parado, luego lanzar el Requery, volverte a posicionar usando algun metodo como Locate y luego realizar la modificacion

Ya que estamos, como se ve tu codigo para realizar la edicion?
Responder Con Cita
  #7  
Antiguo 23-02-2017
koalasoft koalasoft is offline
Miembro
 
Registrado: oct 2004
Ubicación: Tenosique Tabasco
Posts: 86
Poder: 20
koalasoft Va por buen camino
Cita:
Empezado por AgustinOrtu Ver Mensaje
Yo encontraba este tipo de problemas cuando habia varios usuarios usando la misma aplicacion contra la misma BD. Para reproducir:

1. Usuario 1 abre el query
2. Usuario 2 abre el query y se va a hacer un cafe
3. Usuario 1 modifica datos (edit + post)
4. Usuario 2 termina su cafe, vuelve e intenta modificar datos --> se produce la excepcion

Una solucion era refrescar el query (en caso de ADO si mal no recuerdo hay un metodo Requery). Ten en cuenta que puede provocar que el registro seleccionado cambie (por lo general sucede que se posiciona en el primero). Asi que tendrias que guardarte algun dato, como la clave primaria, del registro en donde estas parado, luego lanzar el Requery, volverte a posicionar usando algun metodo como Locate y luego realizar la modificacion

Ya que estamos, como se ve tu codigo para realizar la edicion?
Este es lo que hago para actualizar ..

Código Delphi [-]
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
        Alta_ONT.Cursor:= crDefault;
        AdoQuery1.Close;            // cierro la tabla.
        AdoQuery1.Open;             // abro la Tabla
        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;
End;

Última edición por ecfisa fecha: 04-03-2017 a las 11:58:30. Razón: Cambiar etiquetas PHP por Delphi
Responder Con Cita
  #8  
Antiguo 23-02-2017
koalasoft koalasoft is offline
Miembro
 
Registrado: oct 2004
Ubicación: Tenosique Tabasco
Posts: 86
Poder: 20
koalasoft Va por buen camino
Intenté regresar al servidor donde lo tenia antes, con la esperanza de que funcionaría, pero mi sorpresa es que ahora alli me vuelve a mostrar ese mensaje ...

Responder Con Cita
  #9  
Antiguo 25-02-2017
koalasoft koalasoft is offline
Miembro
 
Registrado: oct 2004
Ubicación: Tenosique Tabasco
Posts: 86
Poder: 20
koalasoft Va por buen camino
Entonces, como ven el procedimiento? .. faltará algo? ..
Responder Con Cita
  #10  
Antiguo 04-03-2017
koalasoft koalasoft is offline
Miembro
 
Registrado: oct 2004
Ubicación: Tenosique Tabasco
Posts: 86
Poder: 20
koalasoft Va por buen camino
Cita:
Empezado por AgustinOrtu Ver Mensaje
Yo encontraba este tipo de problemas cuando habia varios usuarios usando la misma aplicacion contra la misma BD. Para reproducir:

1. Usuario 1 abre el query
2. Usuario 2 abre el query y se va a hacer un cafe
3. Usuario 1 modifica datos (edit + post)
4. Usuario 2 termina su cafe, vuelve e intenta modificar datos --> se produce la excepcion

Una solucion era refrescar el query (en caso de ADO si mal no recuerdo hay un metodo Requery). Ten en cuenta que puede provocar que el registro seleccionado cambie (por lo general sucede que se posiciona en el primero). Asi que tendrias que guardarte algun dato, como la clave primaria, del registro en donde estas parado, luego lanzar el Requery, volverte a posicionar usando algun metodo como Locate y luego realizar la modificacion

Ya que estamos, como se ve tu codigo para realizar la edicion?
Cómo podria utilizar el requery en mi caso !! .. ese parametro no lo conocia.
Responder Con Cita
  #11  
Antiguo 04-03-2017
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Los componentes de ADO que derivan de la clase TCustomADODataSet tienen un metodo Requery. En lineas generales, es casi un equivalente a ejecutar un Close y luego un Open sobre el DataSet de ADO, pero hay algunas referencias. Te recomiendo que leas la documentacion que lo va explicar mejor que yo

Acá hay otro articulo que habla de este metodo
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
(SOLUCIONADO) Cómo editar el título de un mensaje neftali2 La Taberna 2 22-05-2012 11:30:42
Despues de Mensaje de error en user y password el_barto Conexión con bases de datos 4 21-06-2005 17:36:32
No encuentra el path despues de migrar datos Walterdf Conexión con bases de datos 2 07-03-2005 20:17:17
DBGrid no deja editar despues de..... Phacko Conexión con bases de datos 1 30-09-2004 19:30:35
Mostrar un mensaje despues de la visualización de un form __cadetill Varios 13 16-12-2003 00:43:14


La franja horaria es GMT +2. Ahora son las 17:15:18.


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