Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   error al modificar una Tabla (https://www.clubdelphi.com/foros/showthread.php?t=54865)

metroyd 01-04-2008 23:06:23

error al modificar una Tabla
 
Hola, les pido su ayuda para identificar y corregir el problema que se genera en mi aplicacion al intentar modificar un registro de una tabla en MySQL. La tabla se llama HORARIOS. En mi aplicacion tengo los tipicos botones Guardar, Borrar, Modificar. El caso es que al dar clic en Modificar aparece el siguiente error: 'No se puede encontrar la fila para su actualizacion: algunos valores han cambiado desde la ultima vez que se leyó'.

Pero lo raro aqui, es que este error apararece solamente cuando al iniciar mi aplicacion, me voy al dbgrid, doy doble clic en una clave, se llenan los campos respectivos, hago modificaciones y doy clic en Modificar!!!! Es decir, que solo ocurre cuando lo primero que hago en mi aplicacion es modificar un registro. Porque cuando primero guardo uno nuevo o borro uno existente, ahi ya puedo hacer las modificaciones.

El codigo que tengo en el boton Modificar es este:
Código Delphi [-]
// Modificar pelicula
   modulo.alta.Close;
   modulo.alta.SQL.Clear;
   modulo.alta.SQL.add('select * from horarios where cve_pelicula ='+chr(39)+edit1.text+chr(39));
   modulo.alta.Open;
   modulo.alta.edit;
   modulo.alta.FieldByName('cve_pelicula').Value:=Edit1.Text;
   modulo.alta.FieldByName('titulo').Value:=Edit2.Text;
   modulo.alta.FieldByName('distribuidor').Value:=Edit3.Text;
   modulo.alta.FieldByName('sala').Value:=combosala.Text;
   modulo.alta.FieldByName('duracion').Value:=timeduracion.Time;
   modulo.alta.FieldByName('clasificacion').Value:=combobox2.Text;
   modulo.alta.FieldByName('pfuncion').Value:=funcion1.time;
   modulo.alta.FieldByName('sfuncion').Value:=funcion2.time;
   modulo.alta.FieldByName('tfuncion').Value:=funcion3.time;
   modulo.alta.FieldByName('cfuncion').Value:=funcion4.time;
   modulo.alta.FieldByName('qfuncion').Value:=funcion5.time;
   modulo.alta.FieldByName('sextafuncion').Value:=funcion6.time;
   modulo.alta.Post;
   Application.MessageBox('PELICULA MODIFICADA CORRECTAMENTE','CINE',MB_ICONINFORMATION);

// Actualizacion del grid
   modulo.q1.SQL.Clear;
   modulo.q1.SQL.Add('select * from horarios');
   modulo.q1.Open;
   modulo.data1.DataSet:=modulo.q1;
   form1.dbgrid1.DataSource:=modulo.data1;

Acabo de probar con esto: En mi formulario de captura ocupo edits y DateTimepicker para almacenar la duracion de la pelicula y los horarios de las funciones. Debajo del formulario de captura hay un DBGrid que muestra los registros de la base de datos. Entonces, si yo doy doble clic en la celda de cualquier registro en el campo llave, el formulario de captura se llena con la informacion del DBGrid, y si en ese momento doy clic en Modificar, APARECE EL ERROR; pero si antes de dar clic en modificar me ubico en un DateTimePicker y muevo su valor, cuando doy clic en Modificar, el registro se modifica correctamente. Esto quiere decir que el problema radica en los TimePicker. Por si les ayuda, los tipos de datos de los campos que uso para los horarios, en MySql son de tipo TIME

Espero su ayuda, gracias!!!!!!

BlueSteel 02-04-2008 00:03:46

Hola

en realidad no he trabajado con MySQL.. pero no se supone que esto

Código SQL [-]
select * from horarios where cve_pelicula ='+chr(39)+edit1.text+chr(39)

debiera ser
Código SQL [-]
Update Tabla Set Campos... etc..etc...

Salu2:p:D

jacanche 03-04-2008 05:53:59

Hola, que tal, como dice bluesteel, quizas seria mas adecuado usar una sentencia update, en lugar del select. Pero eso no significa que no deba funcionar como lo tienes. Yo te sugeriria que checaras si realmente tienes definida una llave primaria en la tabla, a veces cuando no se tiene llave primaria se generan ese tipo de mensaje de error. Igual te preguntaria que componentes usas para acceso a datos.

metroyd 03-04-2008 18:04:07

Cita:

Empezado por jacanche (Mensaje 277208)
Hola, que tal, como dice bluesteel, quizas seria mas adecuado usar una sentencia update, en lugar del select. Pero eso no significa que no deba funcionar como lo tienes. Yo te sugeriria que checaras si realmente tienes definida una llave primaria en la tabla, a veces cuando no se tiene llave primaria se generan ese tipo de mensaje de error. Igual te preguntaria que componentes usas para acceso a datos.

Si tengo llave primaria, y los componentes que uso son: ADO Connection, ADOQuery y DATASource


La franja horaria es GMT +2. Ahora son las 12:42:18.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi