Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   DbGrid en Delphi 7 (https://www.clubdelphi.com/foros/showthread.php?t=51716)

drakkon 26-12-2007 20:49:06

DbGrid en Delphi 7
 
Que tal compañeros, tengo una consulta que hacer con ustedes los expertos. El problemas es el siguiente, estoy creando una aplicacion en delphi 7 y la he conectado a mi BD creada en MYSQL. He colocado en un form un dbgrid y ahi mismo un TQuery (BDE) y un TDataSource, el TQuery y dbgrid estan conectados al mismo Datasource. Realizo una consulta que es la siguiente:

Código SQL [-]
Query4.Close;
Query4.SQL.Clear;
Query4.SQL.Add('SELECT id_producto,cantidad,UM,id_tienda FROM previa_venta WHERE id_tienda="'+Edit1.Text+'";');
Query4.Open;

En el edit1 tengo una clave de la tienda.

Los datos se muestran correctamente en el DbGrid, el problema es al momento de querer modificarlos directamente en el mismo dbgrid. Ya he intentado poner la propiedad RequestLive del TQuery en true al igual que la propiedad AutoRefresh. Pero aún asi no me permite escribir nada en el Dbgrid y me arroja este error: "Couldn't perform the edit because anothe user changed the record". Y no se como solucionarlo. Podría alguien ayudarme, por favor. Esto de escribir en el dbgrid ya lo había podido hacer antes utilizando delphi 6 y sin ningun problema, pero no se cual es la diferencia o no se por que en delphi 7 me este costando trabajo.

AzidRain 26-12-2007 21:44:01

Quitale el autorefresh. Cuando editas en un dbgrid la tabla entra en modo dsBrowse mientras estas moviéndote por las filas, en cuanto das un enter para editar una celda, entra a modo dsEdit. Cuando pasas a otra fila se hace un Post de manera automática a la tabla.

Prueba quitando el autorefresh.

drakkon 27-12-2007 03:36:25

Ya he intentado poniendo la propiedad autorefresh en false, pero no funciona. Sigo tratando de hacer modificaciones en el dbgrid pero no puedo hacerlo, me envía el mismo error. Puedes ayudarme por favor ??

jachguate 27-12-2007 04:42:08

¿la tabla tiene una llave primaria?

¿está dicha llave primaria identificada en el TQuery?. debiera ocurrir automáticamente, pero quizás el driver de Mysql no provee esa funcionalidad.

El mensaje de error significa que el BDE no ha podido encontrar el registro para actualizar... por tanto asume que fue modificado (o borrado) por otro usuario, en un entorno multiusuario.

Te recomiendo la lectura del libro "La Cara oculta de Delphi 4", de Ian Marteens, enfocado al desarrollo con BDE, que podes obtener en el ftp del club Delphi-Win32/Libros.

De lo aprendido en dicho libro (según creo), el BDE se basa en el valor establecido en la propiedad UpdateMode para construir la sentencia Update.

Probablemente dicho valor está establecido a upWhereAll, pero o bien hay algún campo cuyo valor es construido al vuelo o bien el valor realmente ha cambiado. Podes conseguir corregir el comportamiento dejando dicho valor en upWhereKeyOnly, para que solo en los campos que conforman la llave primaria formen parte del where, aunque esto signifique el riesgo de machacar las modificaciones realizadas por otro usuario.

Hasta luego.

;)


La franja horaria es GMT +2. Ahora son las 11:46:07.

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