none
una columna llamada id_product ya pertenece a esta tabla de datos RRS feed

  • 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 temporal

    esta en la dirrecion del ejemplo 

    http://www.tyrodeveloper.com/2012/03/sistema-de-almacen-visual-basic-parte-3.html

    por favor desearía que me ayudaran con este error cito que no logro entender gracias...

    • Cambiado Enrique M. Montejo jueves, 4 de septiembre de 2014 15:08 Pregunta relacionada con errores en objetos de ADO .NET.
    miércoles, 27 de agosto de 2014 18:25

Todas las respuestas

  • Hola:
    En un Form con 1 DataGridView, copia y pega el siguinte codigo

    Public 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 Class

    El resultado es este

    Un saludo desde Bilbo
    Carlos

    jueves, 28 de agosto de 2014 11:01
  • 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 

    jueves, 28 de agosto de 2014 18:20
  • 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

    viernes, 29 de agosto de 2014 7:59
  • Hola:
    "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"
    ¿Cual es el codigo del FormXXXXXXX_Load?

    Un saludo desde Bilbo
    Carlos

    viernes, 29 de agosto de 2014 8:01
  • SI el codigo que esta arriba pertenece al el formulario de entradas 
    lunes, 1 de septiembre de 2014 21:17