![]() |
Problema para Actualizar en un VirtualQuery
Saludos amigos, estoy haciendo un carrito de compras usando 10.2.1 Tokyo y SQL Server 2014. He aqui la situacion:
Paso 1: Identificación de Componentes Involucrados: 1. cxGrid (nombre=gridCarritoCompra), 2. TVirtualTable (nombre=vt_Carrito) 3. TVirtualQuery (nombre=q_UPDParams) 4. TUniDataSource (nombre=ds_Carrito) 5. TcxTextEdit (nombre=txtCantidad) 6. TcxTextEdit (nombre=txtPrevioVenta) Paso 2: Descripción del Proceso 1. El Usuario busca y selecciona un producto, el cual se agrega a vt_Carrito y se muestra en gridCarritoCompra. (Esto funciona bien). Por defecto la cantidad del pedido agregado es 1. 2. El usuario al hacer doble clic sobre la fila que contiene el pedido de un producto en vt_Carrito, se permite cambiar la cantidad y el precio de venta en txtCantidad y txtPrecioVenta ubicados en la parte inferior del cxgrid. 3. Se programó el evento OnExit de txtCantidad para ejecutar el siguiente código:
4. El Codigo SQL de q_UPDParams es:
5. Los Eventos Click y DblClick de la cxGrid los coloco a continuacion:
El problema es que solo funciona la primera vez la actualización, visualizandose el cambio en la grilla, la segunda vez y subsiguientes no hace ningún cambio. Agradezco cualquier ayuda en esto. Americo |
Cita:
¿Exactamente del comportamiento que comentas, cual es el que no funciona (intenta concretar)? Por otro lado, mi recomendación es que no utilices los eventos visuales para realizar tareas en la Base de Datos. En el caso del Exit, yo revisaría los eventos asociados al Dataset (al cambiar el valor del campo). |
Gracias Netftali como siempre
Aqui te resumo en 36 segundos el problema. Respecto a tu recomendación, como haría específicamente lo que intento hacer aquí?
Un abrazo |
Cita:
2) Revisa el valor de Base de Datos, para saber (lo primero) si es un problema visual o de Base de Datos (así centras el problema). Cita:
Al no ser un componente Dataware, yo lo que haría sería poner ese código en un módulo de Datos (procedure ActualizacionLineaDetalle) y hacer la llamada desde el evento. De esta forma al menos, "separas" la parte visual de la parte lódica/Datos. |
Gracias Neftali
Cita:
Saludos |
Hice los primeros cambios
Saludos Neftali, me pareció prudente cambiar los 2 componentes de texto txtCantidad y txtPrevioVenta a componentes DB-Aware, ahora son TCxDBTextEdit y estan conectados a sus respectivos campos correctamente. Aquí los cambios:
Paso 1: En el Evento OnExit de txtCantidad hago el post:
Sin embargo, al intentar cambiar un valor la aplicación arroja un error: Assertion failure (D:\Projects\MemData.pas, line 7161), luego al salir del foco del componente aparece el mensaje de que el DataSet no esta en Edit o Insert Mode... Recuerda que estoy trabajando sobre un VirtualTable llamado vt_Carrito, de modo que la única forma que conozco de saber que se realizo bien es mediante la visualizacion de sus registros en la grilla. Saludos |
Cita:
Normalmente ese error ocurre cuando intentas cambiar un Dataset (un valor de un campo) estando en el estado "incorrecto". Las líneas en el orden correcto serían algo así; Revisa que las estés haciendo correctamente
Revisa las líneas donde estés cambiando campos del Dataset y asegurate de que el Dataset está en modo Edit; Haz debug paso a paso y dinos exactamente la línea que está fallando. |
Error Assertion
|
La franja horaria es GMT +2. Ahora son las 18:31:28. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi