none
Editar datos de una base datos access RRS feed

  • Pregunta

  • HOla a todos

    quisiera saber si este codigo donde está el error ya que no consigo que edite unos datos

    If txtMaterialesEditMat.Visible = True Then
    Dim cn As OleDbConnection
    cn = New OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|" & "\costo.dtc")
    cn.Open()
    Dim cm As OleDbCommand
    cm = New OleDbCommand("UPDATE Precios INNER JOIN Composicion ON Composicion.COS_DESCR = Precios.COS_DESCR " & _
                               "SET Composicion.Precio = '" & txtCostoEditMat.Text & "', Composicion.Unidad = '" & cmbUnidadMat.Text & "', Composicion.Total = '" & txtCostoEditMat.Text & "' * [Composicion]![Cantidad] " & _
                                "WHERE (((Precios.COS_DESCR)= '" & cmbMat.Text & "'))")
    cm.Connection = cn
    cm.ExecuteNonQuery()
    cn.Close()
    Me.MiAdaptadorMat.Update(CType(Me.MiEnlazadorMat.DataSource, DataTable))


    Saludos

    Carlos
    • Cambiado Enrique M. Montejo miércoles, 1 de junio de 2011 21:50 acceso a datos (De:Lenguaje VB.NET)
    viernes, 14 de agosto de 2009 19:41

Todas las respuestas

  • hola,

    el tema me parece pasa porque no puedes utilizar JOIN en una consulta de update.

    por ahi deberias primeramente armar el select con los datos a actualizar el filtro.

    por ejemplo analiza este link: http://www.vbforums.com/archive/index.php/t-360363.html

    veras como reemplaza el filtrod el update por un select anidado

    tenia esto

    UPDATE Products
    INNER JOIN tblSTOCK
    ON Products.InternalPartNumber=tblSTOCK.STOCK_CODE
    SET Products.InternalDescription = "DEF"

    y lo reemplazo por esto otro

    Update Products set InternalDescription = "DEF" where
    InternalPartNumber in (select STOCK_CODE from tblSTOCK)

    or ahi podrias probar tecnicas similares

    Nota: trata de hacer uso de parameters asi la consulta es mas legible.
    o sea el ?, si se trate de Ms Access

    Nota: no se si funcione donde pusiste el !, de que db se trata de Access ?

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 14 de agosto de 2009 21:02
  • Si se trata de una base datos access, solo que yo lo cambie por "dtc"

    anteriormente en vb 6 tenia así

    Dim strtemp2 As QueryDef
                            Set strtemp2 = mydb.CreateQueryDef("", "UPDATE Precios INNER JOIN Composicion ON Composicion.COS_DESCR = Precios.COS_DESCR " & _
                            "SET Composicion.Precio = '" & txtCosto.Text & "', Composicion.Unidad = '" & txtUnidad.Text & "', Composicion.Total = '" & txtCosto.Text & "' * [Composicion]![Cantidad] " & _
                            "WHERE (((Precios.COS_DESCR)= '" & txtMaterial.Text & "'))")
                            strtemp2.Execute
                           
                            dtaMateriales.Recordset.Edit
                            dtaMateriales.Recordset!COS_DESCR = txtMaterial.Text
                            dtaMateriales.Recordset!COS_Costo = txtCosto.Text


    y trato de que en vb 2008 express funcione algo similar

    saludos
    sábado, 15 de agosto de 2009 15:08
  • hola,

    me habia olvidado de preguntar, cuando ejecutas el codigo obtienes algun error, o simplemente no actualiza?

    - has probado debugrear el codigo, llegar hasta la parte del query que se arma, y cuando tienes el estring copiarlo y llevarlo a Access,  ejecutandolo dentro de este para ver si ejecuta correctamente

    o sea armar el codigo de esta forma:

    Dim cn As OleDbConnection
    cn = New OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|" & "\costo.dtc")
    cn.Open()

    Dim query As String = "UPDATE Precios INNER JOIN Composicion ON Composicion.COS_DESCR = Precios.COS_DESCR " & _
    "SET Composicion.Precio = '" & txtCostoEditMat.Text & "', Composicion.Unidad = '" & cmbUnidadMat.Text & "', Composicion.Total = '" & txtCostoEditMat.Text & "' * [Composicion]![Cantidad] " & _
    "WHERE (((Precios.COS_DESCR)= '" & cmbMat.Text & "'))"


    Dim cm As New OleDbCommand(query)
    cm.Connection = cn

    cm.ExecuteNonQuery()
    cn.Close()


    como veras lo que hice simplemente es llevar el query a un string para que cuando pases por alli en el debug piuedas copiar el contenido del string y ejecutarlo en Access, para verificar si ejecuta correctamente.



    Lo que no entendi del codigo que representataria esta linea:

    Dim cn As OleDbConnection
    cn = New OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|" & "\costo.dtc")
    cn.Open()
    Dim cm As OleDbCommand
    cm = New OleDbCommand("UPDATE Precios INNER JOIN Composicion ON Composicion.COS_DESCR = Precios.COS_DESCR " & _
                               "SET Composicion.Precio = '" & txtCostoEditMat.Text & "', Composicion.Unidad = '" & cmbUnidadMat.Text & "', Composicion.Total = '" & txtCostoEditMat.Text & "' * [Composicion]![Cantidad] " & _
                                "WHERE (((Precios.COS_DESCR)= '" & cmbMat.Text & "'))")
    cm.Connection = cn
    cm.ExecuteNonQuery()
    cn.Close()
    Me.MiAdaptadorMat.Update(CType(Me.MiEnlazadorMat.DataSource, DataTable))


    la marcada en negrita ?
    alli no te da pronblemas o si ?
    o sea el problema lo tienes en el ExecuteNonQuery



    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    domingo, 16 de agosto de 2009 22:01
  • Hola Leandro, como siempre muy amable al responder mis dudas, muchas gracias

    Sencillamente no actualiza, no da error, creo que me falta implementar esto

    dtaMateriales.Recordset.Edit
    dtaMateriales.Recordset!COS_DESCR = txtMaterial.Text
    dtaMateriales.Recordset!COS_Costo = txtCosto.Text....

    este es un codigo en vb 6

    Gracias

    Carlos
    domingo, 16 de agosto de 2009 22:26
  • hola,

    pero el program esta desarrollado en vb.net o en vb6 ?

    estas utilizando ado.net para conectarte a la db ?

    como te decia el query si lo ejecutas con el ExecuteNonQuery() dberia bastar, ya que a este lo estas armando en base a tus textbox.

    salvo que quieras esitar en base a dataset bindeados, bueno ahi ay es otro tema.

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    domingo, 16 de agosto de 2009 22:47