Actualizar registro en tabla
Publicado por Adolfo (55 intervenciones) el 14/10/2017 02:04:23
Hola amigos,
Tengo la siguiente situacion:
Tengo una tabla donde se almacena cada factura en un supermercado, cada factura puede tener varias veces repetidas el mismo producto vendido, por lo cual el codigo de producto se repite en la tabla.
Basicamente busco por numero de factura + codigo de producto para acualizar el registro cuando se cambia la cantidad de unidades.
Pero como el codigo se repite, el codigo de abajo me modifica todos los productos que tienen el mismo codigo en la misma factura. el indice de la table lo ago con un Autonumero.
Como puedo hacer para que se modifica solamente el registro del producto en la tabla que corresponde al producto que yo seleccone en el ListView para modificar?
el problema se da a partir de la siguiente linea
CMD.CommandText = "UPDATE [TBFacturasDetalleTemp]................................
me modifica todos los registros con el mismo codigo de producto y numero de factura.
Agradeceria cualquier sugerencia.
--------------------------
Dim sql As String
sql = "SELECT * FROM TBFacturasDetalleTemp"
Using conn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source= " & VarPath & "\BDFacturacion.accdb;")
Dim CMD As New OleDbCommand(sql, conn)
conn.Open()
CMD.Connection = conn
Dim TR As OleDbTransaction = conn.BeginTransaction
CMD.Transaction = TR
Try
CMD.Parameters.Clear()
If FRMFacturacion.VarFacturaDetalleTemp = 0 Then 'Agrega registro nuevo
CMD.CommandText = "INSERT INTO [TBFacturasDetalleTemp] (NumPreFactura, CodigoProd, NombreProd, PrecioProd, CantidadUnidVendProd, DescuentoProd, SubTotalProd, ImpuestoVProd, CodigoCategoriaProd, FechaVentaProd) VALUES(@NumPreFactura, @CodigoProd, @NombreProd, @PrecioProd, @CantidadUnidVendProd, @DescuentoProd, @SubTotalProd, @ImpuestoVProd, @CodigoCategoriaProd, @FechaVentaProd)"
Else 'Edita un registro existente
CMD.CommandText = "UPDATE [TBFacturasDetalleTemp] SET NumPreFactura = @NumPreFactura, CodigoProd = @CodigoProd, NombreProd = @NombreProd, PrecioProd = @PrecioProd, CantidadUnidVendProd = @CantidadUnidVendProd, DescuentoProd = @DescuentoProd, SubTotalProd = @SubTotalProd, ImpuestoVProd = @ImpuestoVProd, CodigoCategoriaProd = @CodigoCategoriaProd, FechaVentaProd = @FechaVentaProd WHERE NumPreFactura = @NumPreFactura and CodigoProd = @CodigoProd"
End If
CMD.Parameters.AddWithValue("@NumPreFactura", nuevoDetalle.NumPreFactura)
CMD.Parameters.AddWithValue("@CodigoProd", nuevoDetalle.CodigoProd)
CMD.Parameters.AddWithValue("@NombreProd", nuevoDetalle.NombreProd)
CMD.Parameters.AddWithValue("@PrecioProd", nuevoDetalle.PrecioProd)
CMD.Parameters.AddWithValue("@CantidadUnidVendProd", nuevoDetalle.CantidadUnidVendProd)
CMD.Parameters.AddWithValue("@DescuentoProd", nuevoDetalle.DescuentoProd)
CMD.Parameters.AddWithValue("@SubTotalProd", nuevoDetalle.SubTotalProd)
CMD.Parameters.AddWithValue("@ImpuestoVProd", nuevoDetalle.ImpuestoVProd)
CMD.Parameters.AddWithValue("@CodigoCategoriaProd", nuevoDetalle.CodigoCategoriaProd)
CMD.Parameters.AddWithValue("@FechaVentaProd", nuevoDetalle.FechaVentaProd)
CMD.ExecuteNonQuery()
TR.Commit()
Catch ex As Exception
TR.Rollback()
conn.Close()
Throw ex
Finally
If conn IsNot Nothing AndAlso conn.State <> ConnectionState.Closed Then
conn.Close()
conn.Dispose()
CMD.Dispose()
End If
End Try
End Using
Tengo la siguiente situacion:
Tengo una tabla donde se almacena cada factura en un supermercado, cada factura puede tener varias veces repetidas el mismo producto vendido, por lo cual el codigo de producto se repite en la tabla.
Basicamente busco por numero de factura + codigo de producto para acualizar el registro cuando se cambia la cantidad de unidades.
Pero como el codigo se repite, el codigo de abajo me modifica todos los productos que tienen el mismo codigo en la misma factura. el indice de la table lo ago con un Autonumero.
Como puedo hacer para que se modifica solamente el registro del producto en la tabla que corresponde al producto que yo seleccone en el ListView para modificar?
el problema se da a partir de la siguiente linea
CMD.CommandText = "UPDATE [TBFacturasDetalleTemp]................................
me modifica todos los registros con el mismo codigo de producto y numero de factura.
Agradeceria cualquier sugerencia.
--------------------------
Dim sql As String
sql = "SELECT * FROM TBFacturasDetalleTemp"
Using conn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source= " & VarPath & "\BDFacturacion.accdb;")
Dim CMD As New OleDbCommand(sql, conn)
conn.Open()
CMD.Connection = conn
Dim TR As OleDbTransaction = conn.BeginTransaction
CMD.Transaction = TR
Try
CMD.Parameters.Clear()
If FRMFacturacion.VarFacturaDetalleTemp = 0 Then 'Agrega registro nuevo
CMD.CommandText = "INSERT INTO [TBFacturasDetalleTemp] (NumPreFactura, CodigoProd, NombreProd, PrecioProd, CantidadUnidVendProd, DescuentoProd, SubTotalProd, ImpuestoVProd, CodigoCategoriaProd, FechaVentaProd) VALUES(@NumPreFactura, @CodigoProd, @NombreProd, @PrecioProd, @CantidadUnidVendProd, @DescuentoProd, @SubTotalProd, @ImpuestoVProd, @CodigoCategoriaProd, @FechaVentaProd)"
Else 'Edita un registro existente
CMD.CommandText = "UPDATE [TBFacturasDetalleTemp] SET NumPreFactura = @NumPreFactura, CodigoProd = @CodigoProd, NombreProd = @NombreProd, PrecioProd = @PrecioProd, CantidadUnidVendProd = @CantidadUnidVendProd, DescuentoProd = @DescuentoProd, SubTotalProd = @SubTotalProd, ImpuestoVProd = @ImpuestoVProd, CodigoCategoriaProd = @CodigoCategoriaProd, FechaVentaProd = @FechaVentaProd WHERE NumPreFactura = @NumPreFactura and CodigoProd = @CodigoProd"
End If
CMD.Parameters.AddWithValue("@NumPreFactura", nuevoDetalle.NumPreFactura)
CMD.Parameters.AddWithValue("@CodigoProd", nuevoDetalle.CodigoProd)
CMD.Parameters.AddWithValue("@NombreProd", nuevoDetalle.NombreProd)
CMD.Parameters.AddWithValue("@PrecioProd", nuevoDetalle.PrecioProd)
CMD.Parameters.AddWithValue("@CantidadUnidVendProd", nuevoDetalle.CantidadUnidVendProd)
CMD.Parameters.AddWithValue("@DescuentoProd", nuevoDetalle.DescuentoProd)
CMD.Parameters.AddWithValue("@SubTotalProd", nuevoDetalle.SubTotalProd)
CMD.Parameters.AddWithValue("@ImpuestoVProd", nuevoDetalle.ImpuestoVProd)
CMD.Parameters.AddWithValue("@CodigoCategoriaProd", nuevoDetalle.CodigoCategoriaProd)
CMD.Parameters.AddWithValue("@FechaVentaProd", nuevoDetalle.FechaVentaProd)
CMD.ExecuteNonQuery()
TR.Commit()
Catch ex As Exception
TR.Rollback()
conn.Close()
Throw ex
Finally
If conn IsNot Nothing AndAlso conn.State <> ConnectionState.Closed Then
conn.Close()
conn.Dispose()
CMD.Dispose()
End If
End Try
End Using
Valora esta pregunta


0