Ver Mensaje Individual
  #1  
Antiguo 09-07-2018
darkamerico darkamerico is offline
Miembro
 
Registrado: dic 2010
Posts: 225
Reputación: 14
darkamerico Va por buen camino
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:
Código Delphi [-]
procedure TfrmCompras.txtCantidadExit(Sender: TObject);
begin
  q_UPDParams.Close;
  q_UPDParams.Params[0].AsString:=txtCantidad.Text;
  q_UPDParams.Params[1].AsString:=txtPrecioVenta.Text;
  q_UPDParams.Params[2].AsString:=FloatToStr(StrToFloat(txtCantidad.Text)*StrToFloat(txtPrecioVenta.Text));
  q_UPDParams.Params[3].AsString:=IntToStr(idNroDetailSelecc);
  q_UPDParams.ExecSQL;
  gridCarritoCompraDBTableView1.DataController.DataSet.Refresh;
  q_CalcTotal.Close;
  q_CalcTotal.Open;
  txtMontoTotal.Text:=q_CalcTotal.Fields[0].AsString;
end;

4. El Codigo SQL de q_UPDParams es:
Código SQL [-]
UPDATE vt_Carrito
SET CANT=:NewCant,
    PRECIOUNIT=:NewPrecio,
    SUBTOTAL=:NewSubTotal
WHERE NRO=:NroX

5. Los Eventos Click y DblClick de la cxGrid los coloco a continuacion:

Código Delphi [-]
procedure TfrmCompras.gridCarritoCompraDBTableView1CellClick(
  Sender: TcxCustomGridTableView; ACellViewInfo: TcxGridTableDataCellViewInfo;
  AButton: TMouseButton; AShift: TShiftState; var AHandled: Boolean);
var
  ColCant,ColPrecioVenta, ColNro:TField;
begin
  ColCant:=gridCarritoCompraDBTableView1CANT.DataBinding.Field;
  ColPrecioVenta:=gridCarritoCompraDBTableView1PRECIOUNIT.DataBinding.Field;
  ColNro:=gridCarritoCompraDBTableView1NRO.DataBinding.Field;
  txtCantidad.Text:=ColCant.AsString;
  txtPrecioVenta.Text:=ColPrecioVenta.AsString;
  idNroDetailSelecc:=ColNro.AsInteger;
end;

procedure TfrmCompras.gridCarritoCompraDBTableView1CellDblClick(
  Sender: TcxCustomGridTableView; ACellViewInfo: TcxGridTableDataCellViewInfo;
  AButton: TMouseButton; AShift: TShiftState; var AHandled: Boolean);
begin
  itemCantidad.Enabled:=True;
  itemPV.Enabled:=True;
  txtCantidad.SetFocus;
end;


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
Responder Con Cita