Usuario
una columna llamada id_product ya pertenece a esta tabla de datos

Pregunta
-
buenos días gracias ante todo
desearía que me ayudaran con este error que me sale luego de desarrollar esta aplicación que les tengo esta esta dirección
el proyecto contra de dos from uno de entrada de los productos y el otro que registra los productos de salidos el código fuente tiene mucho error en la consulta, inserción de datos y modificación me toco organizar todo eso y logre que guardara los datos corrigiendo todos esos errores pero tengo un problema que cuando cierro el formulario tanto como el de entrada y el de salida de productos me sale en siguiente error que les mostré en la imagen de abajo que dice que la :::::::
una columna llamada id_product ya pertenece a esta tabla de datos
((a column named id_product already belongs to this data table ))))
que no e logrado corregir desearía que me esplique como puedo serrar esta consulta y la columna también
este es el código en el l from loand
Dim idColumn As New DataColumn("id", GetType(Integer))
idColumn.Unique = True
idColumn.AutoIncrement = True
idColumn.AutoIncrementSeed = 1
idColumn.AutoIncrementStep = 1
tmpEntrada.Columns.Add(idColumn)
'declaramos el resto de los campos
tmpEntrada.Columns.Add("id_articulo", GetType(String))
tmpEntrada.Columns.Add("articulo", GetType(String))
tmpEntrada.Columns.Add("cantidad", GetType(Double))
'agregamos un primary key
tmpEntrada.PrimaryKey = New DataColumn() {tmpEntrada.Columns("id")}
''<termina la deficinicón de la tabla temporalesta en la dirrecion del ejemplo
http://www.tyrodeveloper.com/2012/03/sistema-de-almacen-visual-basic-parte-3.html
- Cambiado Enrique M. Montejo jueves, 4 de septiembre de 2014 15:08 Pregunta relacionada con errores en objetos de ADO .NET.
Todas las respuestas
-
Hola:
En un Form con 1 DataGridView, copia y pega el siguinte codigoPublic Class Form1
Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
Dim tmpEntrada As New DataTable
Dim idColumn As New DataColumn("id", GetType(Integer))
idColumn.Unique = True
idColumn.AutoIncrement = True
idColumn.AutoIncrementSeed = 1
idColumn.AutoIncrementStep = 1
tmpEntrada.Columns.Add(idColumn)
'declaramos el resto de los campos
tmpEntrada.Columns.Add("id_articulo", GetType(String))
tmpEntrada.Columns.Add("articulo", GetType(String))
tmpEntrada.Columns.Add("cantidad", GetType(Double))
'agregamos un primary key
tmpEntrada.PrimaryKey = New DataColumn() {tmpEntrada.Columns("id")}
Me.DataGridView1.DataSource = tmpEntrada
'Añadimos datos
Dim lDataRow As DataRow = tmpEntrada.NewRow
' Añadimos los datos
lDataRow.Item("id_articulo") = "1111"
lDataRow.Item("articulo") = "PRIMER ARTICULO"
lDataRow.Item("cantidad") = CDbl("22,33")
' Agregamos el registros a la colección Rows
tmpEntrada.Rows.Add(lDataRow)
'
lDataRow = tmpEntrada.NewRow
lDataRow.Item("id_articulo") = "2222"
lDataRow.Item("articulo") = "SEGUNDO ARTICULO"
lDataRow.Item("cantidad") = CDbl("33,44")
tmpEntrada.Rows.Add(lDataRow)
'
lDataRow = tmpEntrada.NewRow
lDataRow.Item("id_articulo") = "3333"
lDataRow.Item("articulo") = "TERCER ARTICULO"
lDataRow.Item("cantidad") = CDbl("55,66")
tmpEntrada.Rows.Add(lDataRow)
'
lDataRow = tmpEntrada.NewRow
lDataRow.Item("id_articulo") = "4444"
lDataRow.Item("articulo") = "CUARTO ARTICULO"
lDataRow.Item("cantidad") = CDbl("77,88")
tmpEntrada.Rows.Add(lDataRow)
'
lDataRow = tmpEntrada.NewRow
lDataRow.Item("id_articulo") = "5555"
lDataRow.Item("articulo") = "QUINTO ARTICULO"
lDataRow.Item("cantidad") = CDbl("99,00")
tmpEntrada.Rows.Add(lDataRow)
'Mostramos los datos
Me.DataGridView1.DataSource = tmpEntrada
End Sub
End ClassEl resultado es este
Un saludo desde Bilbo
Carlos -
bueno dias j. carlos herrero
gracias por responder
mira te mando bien en codigo desde la pagina de donde lo encontre pero la aplicacion esta trabajando con un listview
ProtectedSub generaColumnas() lvEntrada.Clear() lvEntrada.View = View.Details lvEntrada.Columns.Add("", 0, HorizontalAlignment.Left) lvEntrada.Columns.Add("Id ", 100, HorizontalAlignment.Left) lvEntrada.Columns.Add("Producto", 240, HorizontalAlignment.Left) lvEntrada.Columns.Add("Cantidad", 60, HorizontalAlignment.Right) lvEntrada.Columns.Add("Precio", 60, HorizontalAlignment.Right) lvEntrada.Columns.Add("Total", 80, HorizontalAlignment.Right) EndSub
este codigo muestr la informacion
Protected Sub mostrarEntrada() Try Dim varIVA As Double = 0 Dim varTOTAL As Double = 0 lvEntrada.Items.Clear() Dim i As Integer = 0 For i = 0 To tmpEntrada.Rows.Count - 1 Step 1 lvEntrada.Items.Add(tmpEntrada.Rows(i)("id").ToString()) lvEntrada.Items(i).SubItems.Add(tmpEntrada.Rows(i)("id_articulo").ToString()) lvEntrada.Items(i).SubItems.Add(tmpEntrada.Rows(i)("articulo").ToString()) lvEntrada.Items(i).SubItems.Add(String.Format("{0:N}", Convert.ToDouble(tmpEntrada.Rows(i)("cantidad")))) lvEntrada.Items(i).SubItems.Add(String.Format("{0:C}", Convert.ToDouble(tmpEntrada.Rows(i)("precio_compra")))) lvEntrada.Items(i).SubItems.Add(String.Format("{0:C}", (Convert.ToDouble(tmpEntrada.Rows(i)("precio_compra")) * Convert.ToDouble(tmpEntrada.Rows(i)("cantidad"))))) varTOTAL += Convert.ToDouble(tmpEntrada.Rows(i)("precio_compra")) * Convert.ToDouble(tmpEntrada.Rows(i)("cantidad")) varIVA += (Convert.ToDouble(tmpEntrada.Rows(i)("cantidad")) * Convert.ToDouble(tmpEntrada.Rows(i)("precio_compra"))) - ((Convert.ToDouble(tmpEntrada.Rows(i)("cantidad")) * Convert.ToDouble(tmpEntrada.Rows(i)("precio_compra"))) / (1.16)) Next catch ex as Exception MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) End
ProtectedFunction agregarArticulo() AsBooleanDim cnn AsNew OleDbConnection(CnnStr) Dim row As DataRow TryDim varId AsString = "" Dim varNombre AsString = "" cnn.Open() Dim strSQL AsString = "select articulo from articulos " + "where id_articulo=@id"Dim cmd AsNew OleDbCommand(strSQL, cnn) cmd.Parameters.Add("@id", OleDbType.VarChar, 50).Value = txtIdArticulo.Text Dim dr As OleDbDataReader = cmd.ExecuteReader() If (dr.Read()) Then varId = txtIdArticulo.Text varNombre = dr("articulo").ToString() ''agregamos la venta a la tabla temporal row = tmpEntrada.NewRow() row("id_articulo") = varId row("articulo") = varNombre row("cantidad") = CDbl(txtCantidad.Text) row("precio_compra") = CDbl(txtPrecioCompra.Text) row("iva") = 0.16 tmpEntrada.Rows.Add(row) ElseThrow (New Exception("El articulo no existe")) EndIf dr.Close() ReturnTrueCatch ex As Exception Throw (ex) Finally cnn.Close() EndTryEndFunction
aki es la parde del codigo que muestr los datos y los graba pero hay que hacer organizar las capos de las consultas y los insert
ProtectedFunction grabarEntrada() AsBooleanDim cnn AsNew OleDbConnection(CnnStr) Try cnn.Open() Dim tran As OleDbTransaction = cnn.BeginTransaction() Dim cmd AsNew OleDbCommand() cmd.Connection = cnn cmd.Transaction = tran ''insertamos el registro de la EntradaTry cmd.CommandText = "insert into entradas(fecha_entrada,fecha_factura,folio_factura,proveedor,user_login) " + " values (@fechaEntrada,@fechaFactura,@folioFactura,@nombreProveedor,@userLogin)"''params cmd.Parameters.Add("@fechaEntrada", OleDbType.Date).Value = New DateTime(dtpFechaEntrada.Value.Year, dtpFechaEntrada.Value.Month, dtpFechaEntrada.Value.Day) cmd.Parameters.Add("@fechaFactura", OleDbType.Date).Value = New DateTime(dtpFechaFactura.Value.Year, dtpFechaFactura.Value.Month, dtpFechaFactura.Value.Day) cmd.Parameters.Add("@folioFactura", OleDbType.VarChar, 50).Value = txtFolioFactura.Text cmd.Parameters.Add("@nombreProveedor", OleDbType.VarChar, 50).Value = txtNombreProveedor.Text cmd.Parameters.Add("@userLogin", OleDbType.VarChar, 50).Value = "admin" cmd.ExecuteNonQuery() cmd.Parameters.Clear() ''Limpiar params''obtenemos el folioDim _FolioEntrada AsInteger = 0 cmd.CommandText = "select @@identity" _FolioEntrada = Convert.ToInt32(cmd.ExecuteScalar()) ''insertamos el detalle de la entradaDim i AsInteger = 0 For i = 0 To tmpEntrada.Rows.Count - 1 Step 1 Dim _IdArticulo AsString = Convert.ToString(tmpEntrada.Rows(i)("id_articulo")) Dim _Cantidad AsDouble = Convert.ToDouble(tmpEntrada.Rows(i)("cantidad")) Dim _IVA AsDouble = Convert.ToDouble(tmpEntrada.Rows(i)("iva")) Dim _PrecioCompra AsDouble = Convert.ToDouble(tmpEntrada.Rows(i)("precio_compra")) Dim _CostoPromedio AsDouble = 0 ''insertamos el articulo cmd.CommandText = "insert into entradas_detalle(id_entrada,id_articulo,cantidad,precio_compra,iva) " + "values(@folioEntrada,@idArticulo,@cantidad,@precioCompra,@IVA)" cmd.Parameters.Add("@folioEntrada", OleDbType.Integer).Value = _FolioEntrada cmd.Parameters.Add("@idArticulo", OleDbType.VarChar, 50).Value = _IdArticulo cmd.Parameters.Add("@cantidad", OleDbType.Double).Value = _Cantidad cmd.Parameters.Add("@precioCompra", OleDbType.Double).Value = _PrecioCompra cmd.Parameters.Add("@IVA", OleDbType.Double).Value = _IVA cmd.ExecuteNonQuery() cmd.Parameters.Clear() ''Limpiar params''actualizamosexistencias cmd.CommandText = "update articulos set " + " existencia=existencia + @cantidad" + " where id_articulo=@idArticulo" cmd.Parameters.Add("@cantidad", OleDbType.Double).Value = _Cantidad cmd.Parameters.Add("@idArticulo", OleDbType.VarChar, 50).Value = _IdArticulo cmd.ExecuteNonQuery() cmd.Parameters.Clear() ''Limpiar params''establecemos el costo promedio cmd.CommandText = "select avg(precio_compra) " + " from entradas_detalle " + " where id_articulo=@idArticulo" cmd.Parameters.Add("@idArticulo", OleDbType.VarChar, 50).Value = _IdArticulo _CostoPromedio = Convert.ToDouble(cmd.ExecuteScalar()) cmd.Parameters.Clear() ''Limpiar params cmd.CommandText = "update articulos set " + " costo_promedio=@costo" + " where id_articulo=@idArticulo" cmd.Parameters.Add("@cantidad", OleDbType.Double).Value = _CostoPromedio cmd.Parameters.Add("@idArticulo", OleDbType.VarChar, 50).Value = _IdArticulo cmd.ExecuteNonQuery() cmd.Parameters.Clear() ''Limpiar paramsNext''finalizamos la transaccion tran.Commit() MessageBox.Show("Entrada grabada correctamente", "Información del Sistema", MessageBoxButtons.OK, MessageBoxIcon.Information) Catch ex As Exception tran.Rollback() Throw (ex) EndTryReturnTrueCatch ex As Exception Throw (ex) Finally cnn.Close() EndTryEndFunction
aki esta el error en el from loand aki al cerrar y al volver abrir el formulario me dice el error que la columna llamanda id ya esta leyendo
-
Hola:
Con el ejemplo que te puse, lo que te queria decir es que con las explicaciones que dabas en el primer post, no tenia ni pies ni cabeza porque el titulo del post es "una columna llamada id_product ya pertenece a esta tabla de datos" y en el codigo que expones la palabra id_product no aparece por ningun lado.Un saludo desde Bilbo
Carlos -
-