Autor Tema: ACTUALIZACION DE BASE DE DATOS A TRAVES DE DATASET  (Leído 17420 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Carlos Eduardo

  • MiembrosReales
  • *
  • Mensajes: 33
  • el que nunca se equivoca es porque nunca hace nada
ACTUALIZACION DE BASE DE DATOS A TRAVES DE DATASET
« : mayo 24, 2012, 03:47:53 pm »
Muy buenas tardes amigos de SVCOMUNITY, les cuento que estoy desde hace ratos rompiendome la cabeza con un programa desde VB.Net que llena un DataGridView con el contenido de una tabla, esto, con el fin de poder darle el poder al usuario final que pueda modificar algun registro y luego actualizar esos cambios en la base de datos pero hasta hoy logro que a traves de un DataAdapter junto con un CommandBuilder me borre, pero no me modifica ni me adiciona....en que podre estar fallando? les dejo el codigo para que me orienten, gracias.

Public Sub New(ByVal numero As Object)
        InitializeComponent()
        Me.txtFecha.Text = ""
        flag = True
        Me.btnSave.Text = "Modificar"
        Me.btnCloseIngreso.Text = "Cancelar"
        'Llenando el Grid atraves de un DataSet que mas tarde me va a servir para
        'saber que lineas se han agregado,modificado o borrado
        Conectar()
        Adaptador = New SqlDataAdapter("Select Numero_linea,Precio_Articulo From Detalle WHERE Pedido_Numero='" & numero & "'", conect)
        cmdBuilder = New SqlCommandBuilder(Adaptador)
        dsModif = New DataSet
        Adaptador.Fill(dsModif, "Detalle")
        Cerrar_Conexion()
        DataGridView1.DataSource = dsModif.Tables("Detalle")
        DataGridView1.Columns(0).Visible = False
        DataGridView1.Refresh()
    End Sub


esta parte anterior fue solo para cargar los datos.....aqui les dejo ya para actualizar:
Try
                'Conectar()
                'Generando la consulta adecuada para actualizar BD.
                Adaptador.Update(dsModif, "Detalle")
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            Finally
                'Cerrar_Conexion()
                MessageBox.Show("Actualizacion exitosa")
                DataGridView1.Refresh()
            End Try


les repito amigos, solo puedo borrar, pero modificar e insertar no me lo permite pero tampoco me da mensajes de error.

gracias de antemano.
Cuando pensé que había terminado de aprender; sale la nueva version!!!

Desconectado Non Servium

  • Sv Member
  • ***
  • Mensajes: 426
  • Ilix Punx :)
Re:ACTUALIZACION DE BASE DE DATOS A TRAVES DE DATASET
« Respuesta #1 : mayo 24, 2012, 04:16:46 pm »
mmm para comenzar, bienvenido...

Umm y si probas con un SqlDataAdapter.ExcecuteNonQuery() haciendo update o insert en la consulta??

tipo algo asi
Código: [Seleccionar]
da = New SqlDataAdapter("INSERT INTO Detalle (Numero_linea,Precio_Articulo) VALUES ('" & Txt_NumeroLinea.Text & "'," & Txt_PrecioArticulo.Text & ")", cnn)
da.ExecuteNonQuery()

La verdad se me ha olvidado todo relacionado con DataSet. Te recomendaría LINQ-to-SQL!  :thumbsup:
♫ Condenados a perder la libertad! Por no acatar las leyes que les asignaron. ♪ ♫
Decididos, decididos a emprender! Un camino largo y duro por no ser esclavos ♫


Watch

Desconectado Carlos Eduardo

  • MiembrosReales
  • *
  • Mensajes: 33
  • el que nunca se equivoca es porque nunca hace nada
Re:ACTUALIZACION DE BASE DE DATOS A TRAVES DE DATASET
« Respuesta #2 : mayo 24, 2012, 04:36:13 pm »
gracias compañero de progra fijate que eso de LINQ to SQL se que es nuevo y no me he querido meter porque siento que es muy nuevo y que me va a costar aprenderlo y cuando lo domine lo cambian todo jejeje...pero no se si funciona estando en VB.Net creando aplicaciones para Windows....yo lo he oido pero para  ASP.Net y conexion a bases de datos....no se si ando perdido?

gracias.
Cuando pensé que había terminado de aprender; sale la nueva version!!!

Desconectado edu_guerr

  • Sv Member
  • ***
  • Mensajes: 463
Re:ACTUALIZACION DE BASE DE DATOS A TRAVES DE DATASET
« Respuesta #3 : mayo 24, 2012, 08:04:13 pm »
CommandBuilder, según me recuerdo que solo lo podes usar con datos de una tabla y no con datos provenientes de tablas relacionadas(al menos así era en la VS 2005).

Hice un ejemplo a la rápida a ver si te ayuda,inserta y actualiza, cargo los datos en un grid, ahí sobre las filas del grid podes insertar y actualizar con el mismo botón.

Podes estudiarlos y aplicarlo a tu caso.



Código: [Seleccionar]
Imports System.Data.SqlClient
Public Class Form1
    Dim ds As New DataSet
    Dim ad As SqlDataAdapter
    Dim con As SqlConnection
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ds.Clear()
        con = New SqlConnection
        con.ConnectionString = "server=CECHZ\SQLEXPRESS;database=notas1;trusted_connection=yes"
        Dim sql1 As String = "select*  from empleado"
        ad = New SqlDataAdapter(sql1, con)
        ad.Fill(ds, "emp")
        Me.dtg.DataSource = ds.Tables("emp")
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If ds.HasChanges() Then
            con = New SqlConnection
            con.ConnectionString = "server=CECHZ\SQLEXPRESS;database=notas1;trusted_connection=yes"
            Dim cmd As SqlCommandBuilder
            cmd = New SqlCommandBuilder(ad)
            Dim sql1 As String = "select* from empleado"
            ad = New SqlDataAdapter(sql1, con)
            ad.Fill(ds, "emp")
            Me.dtg.DataSource = ds.Tables("emp")
            ad.InsertCommand = cmd.GetInsertCommand()
            ad.UpdateCommand = cmd.GetUpdateCommand()
            ad.DeleteCommand = cmd.GetDeleteCommand()
            ad.Update(ds, "emp")
            MessageBox.Show("Datos actualizados", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information)
            ds.Clear()
            con = New SqlConnection
            con.ConnectionString = "server=CECHZ\SQLEXPRESS;database=notas1;trusted_connection=yes"
            ad = New SqlDataAdapter(sql1, con)
            ad.Fill(ds, "emp")
            Me.dtg.DataSource = ds.Tables("emp")
        Else
            MessageBox.Show("No hay cambios", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information)
        End If
    End Sub
End Class

Si vas a dejar que el usuario actualize e inserte directamente desde el grid, lo tedioso es que tendras que validar lo que el usuario introduzca
en cada celda, lo que te puede ayudar es:
Código: [Seleccionar]
tu_datagrid_CellValidating(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles tu_datagrid_.CellValidating
Y usar los indices de cada celda según creas conveniente para hacer algún tipo de validación.

Desconectado fre_saga

  • Sv Member
  • ***
  • Mensajes: 275
Re:ACTUALIZACION DE BASE DE DATOS A TRAVES DE DATASET
« Respuesta #4 : mayo 24, 2012, 09:50:02 pm »
y todo lo vas hacer dentro del grid tienes texbox q al seleccionar la fila pase los datos a los texbox o en el grid tienes los botones

Desconectado Non Servium

  • Sv Member
  • ***
  • Mensajes: 426
  • Ilix Punx :)
Re:ACTUALIZACION DE BASE DE DATOS A TRAVES DE DATASET
« Respuesta #5 : mayo 25, 2012, 08:17:35 am »
gracias compañero de progra fijate que eso de LINQ to SQL se que es nuevo y no me he querido meter porque siento que es muy nuevo y que me va a costar aprenderlo y cuando lo domine lo cambian todo jejeje...pero no se si funciona estando en VB.Net creando aplicaciones para Windows....yo lo he oido pero para  ASP.Net y conexion a bases de datos....no se si ando perdido?

gracias.
haha relativamente nuevo, al menos en el país. Y no pueden cambiarlo así por así. ademas solo vas a aprenderlo una vez y estarías siendo autodidacta para algo q te puede servir en el futuro. linq funciona desde Visual Studio 2008 en adelante y puede ser integrado en Visual Studio 2005. Es parte de la nueva Framework (casi nueva) y puede ser usado en aplicaciones .NET como en formularios ASP.NET y demás (MVC, WPF, etc.) en Visual Basic y Visual C#. Cuando tengas un poco de tiempo, podrías leer de poco en poco...

ahora hablando de tu problema, creo q el ejemplo de edu_guerr te puede ayudar! A menos q tu consulta sea de una vista!

♫ Condenados a perder la libertad! Por no acatar las leyes que les asignaron. ♪ ♫
Decididos, decididos a emprender! Un camino largo y duro por no ser esclavos ♫


Watch

Desconectado tekun

  • -^- Elite Silver -^-
  • The Communiter-
  • *
  • Mensajes: 3221
  • Han convertido mi casa en cueva de mercaderes!!!!
    • www.tekun.es
Re:ACTUALIZACION DE BASE DE DATOS A TRAVES DE DATASET
« Respuesta #6 : mayo 25, 2012, 09:38:41 am »
esta parte anterior fue solo para cargar los datos.....aqui les dejo ya para actualizar:
Try
                'Conectar()
                'Generando la consulta adecuada para actualizar BD.
                Adaptador.Update(dsModif, "Detalle")
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            Finally
                'Cerrar_Conexion()
                MessageBox.Show("Actualizacion exitosa")
                DataGridView1.Refresh()
            End Try


actualiza el commandBuilder antes de el Update..

                cmdBuilder = New SqlCommandBuilder(Adaptador) ' agrega esta linea antes del update
                Adaptador.InsertCommand = cmdBuilder.GetInsertCommand() ' por cualquier cosa, con esto del Sqlserver, agrega esto tambien
                Adaptador.UpdateCommand = cmdBuilder.GetUpdateCommand()  ' por cualquier cosa, con esto del Sqlserver, agrega esto tambien
                Adaptador.DeleteCommand = cmdBuilder.GetDeleteCommand()  ' por cualquier cosa, con esto del Sqlserver, agrega esto tambien
                Adaptador.Update(dsModif, "Detalle") ' ahora el update,

lo difícil lo hago rápido, con lo imposible, casi siempre me tardo un poquito

Desconectado Juancho

  • The Communiter-
  • *
  • Mensajes: 1311
Re:ACTUALIZACION DE BASE DE DATOS A TRAVES DE DATASET
« Respuesta #7 : mayo 25, 2012, 05:01:37 pm »
Bueno, esto me recuerda un poco a la historia de los modelos de datos de MS  :roll:

Bueno, recordando un poco de historia (creo q aun m acuerdo), alla en los años de 1998, sacaron la version VB 6.0, en el cual el modelo de datos o era ADO o era DAO, (creo q en ese entonces el mas reciente era DAO pero tengo mis dudas..).

Luego vinieron los de MS, y sacaron el .NET Framework 1.0 - 1.1 con Visual Studio 2003, donde introdujeron un nuevo modelo de conexion de datos. El cual se utilizaba las clases de SQLConnection, SQLCommand, etc, (y todo las clases q inician con SQL). Asi q todos los q necesitaba ir a traer datos a SQL Server podian hacerlo con esas nuevas clases que habian introducido en al plataforma.

Luego, sacan Visual Studio 2005 con el .NET Framework 2.0, en el cual introducen el nuevo modelo de datos llamado ADO.NET, donde ya no se tenian que hacer las cosas a puro codigo (como con SQLConnection, SQLCommand), sino q a travez de la herramienta que automaticamente convertia todas mis tablas de la BD a DataSet. Es alli donde surgen los TableAdapter, DataSet, (y data no recuerdo...). En ese modelo estaba el modelo Desconectado (DataSet), y el modelo conectado (DataReader creo yo..). Y uno podia arrastrar y soltar y tenian ya sus formularios con sus campos o sus DataGrid completamente conectados sin nada de codigo.

En ese momento hubieron varios q decian q para aplicaciones de negocio no convenia utilizar los DataSet, q era mejor trabajarla todo por codigo, etc, etc.. pero ese es otro tema.

Luego, en entre 2006 - 2008, sacan tanto el .NET Framework 3.0 y 3.5, y vienen para convencer a ambos bandos del anterior (puro codigo o con asistente), sacan algo intermedio pero igual q potente y con poco codigo, lo denominado LINQ.
Si mal no recuerdo en la historia, LINQ vino en el .NET Framework 3.0 (asi como alli venia WPF, WCF, etc...) y en el .NET Framework 3.5, es donde introducen el nuevo modelo de datos, el cual es el EF (Entity Framework).
Este es el modelo mas reciente para trabajar con datos, y ahora todas las tablas las convierte en entidades, y "crea" una semi-capa de datos (Aplicaciones n-capas).
Al final, utilizar LINQ con EF, es completamente potente y facil de usar.

<a href="http://www.gametracker.com/player/%7BAiPI%7DJuancho/94.127.17.72:11480/" target="_blank">
<img src="http://cache.www.gametracker.com/player/%7BAiPI%7DJuancho/94.127.17.72:11480/b_560x95.png" border="0" width="560" height="95" alt="" />
</a>

Desconectado Carlos Eduardo

  • MiembrosReales
  • *
  • Mensajes: 33
  • el que nunca se equivoca es porque nunca hace nada
Re:ACTUALIZACION DE BASE DE DATOS A TRAVES DE DATASET
« Respuesta #8 : agosto 27, 2012, 02:53:29 pm »
buenas tardes a todos los que me han ayudado con alguno aporte les informo que aun sigo con mi problema, lo que pasa es que tengo dos tablas, Encabezado y detalle  y he logrado hasta el momento que si elimino o modifico datos en el Datagrid que me presenta el detalle me los guarda bien pero si en el mismo grid de Detalle empiezo a ingresar datos nuevo para ese pedido y quiero actualizar es entonces cuando no me funciona.....no se si hay alguna otra idea pero desde ya muchas gracias.
Cuando pensé que había terminado de aprender; sale la nueva version!!!

Desconectado eLTeCoMaTe

  • Sv Jr.
  • **
  • Mensajes: 93
  • Cuerpo no es presencia
Re:ACTUALIZACION DE BASE DE DATOS A TRAVES DE DATASET
« Respuesta #9 : agosto 27, 2012, 06:19:13 pm »
@Carlos Eduardo
tal ves estos ejemplos te pueden ayudar y logres verlo de otra manera
http://quickstarts.asp.net/QuickStartv20/aspnet/doc/ctrlref/data/detailsview.aspx

espero que te ayude.

Desconectado Carlos Eduardo

  • MiembrosReales
  • *
  • Mensajes: 33
  • el que nunca se equivoca es porque nunca hace nada
Re:ACTUALIZACION DE BASE DE DATOS A TRAVES DE DATASET
« Respuesta #10 : octubre 10, 2012, 09:46:24 am »
buenos dias compañeros llevo ya un largo rato quebrandome la cabeza y sigo sin poder hacer funcionar mi programita, es un Grid que trae datos de una tabla y la enlaza con el DataSet y logro hasta el momento, modificar o eliminar datos; pero si agrego nuevas filas no las toma a la hora de actualizar....porque sera??? alguna idea de QUE ESTOY HACIENDO MAL??? y de paso les comento que ya hice todo lo que me sugirieron y me sigue sin funcionar.

gracias.
Cuando pensé que había terminado de aprender; sale la nueva version!!!

Desconectado edu_guerr

  • Sv Member
  • ***
  • Mensajes: 463
Re:ACTUALIZACION DE BASE DE DATOS A TRAVES DE DATASET
« Respuesta #11 : octubre 13, 2012, 12:54:06 pm »
buenos dias compañeros llevo ya un largo rato quebrandome la cabeza y sigo sin poder hacer funcionar mi programita, es un Grid que trae datos de una tabla y la enlaza con el DataSet y logro hasta el momento, modificar o eliminar datos; pero si agrego nuevas filas no las toma a la hora de actualizar....porque sera??? alguna idea de QUE ESTOY HACIENDO MAL??? y de paso les comento que ya hice todo lo que me sugirieron y me sigue sin funcionar.

gracias.

No te funcionaria algo asi? con HasChanges()
Código: [Seleccionar]
  If tudataset.HasChanges() Then
           ..............
            Dim sql As String = "query con la consulta y los nuevo registros agregados"

            ........


Desconectado Carlos Eduardo

  • MiembrosReales
  • *
  • Mensajes: 33
  • el que nunca se equivoca es porque nunca hace nada
Re:ACTUALIZACION DE BASE DE DATOS A TRAVES DE DATASET
« Respuesta #12 : octubre 15, 2012, 03:50:56 pm »
pues si ya estoy progando
If DataSet.HasChanges() then
   Adaptador.Update(DataSet, "Detalle")
   DataSet.Table("Detalle").AcceptChanges()
Else
   MessageBox.Show("No hubo cambios")
End if

Pero nada, y el "AcceptChanges" dicen que marca los registros como si nunca hubieron cambios por eso lo llamo despues del Update pero por cualquier cosa tambien lo llamo antes del Update y en ningun caso tengo exito añadiendo una nueva fila.......creanme que yo todos los dias le busco y no le hayo.....se que no soy el gran sabio pero no pense que esto me llevara tanto tiempo.......por eso les agradezco que dediquen su tiempo en orientarme......
Cuando pensé que había terminado de aprender; sale la nueva version!!!