Foros del Web » Programación para mayores de 30 ;) » .NET »

Problema ADO .NET con VB .NET

Estas en el tema de Problema ADO .NET con VB .NET en el foro de .NET en Foros del Web. Buenas tardes, verán, resulta que cuando inserto un usuario, pues me lo inserta bien, sin ningún problema, pero antes de que cierre el formulario, voy ...
  #1 (permalink)  
Antiguo 30/06/2004, 13:27
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 10 meses
Puntos: 7
Problema ADO .NET con VB .NET

Buenas tardes, verán, resulta que cuando inserto un usuario, pues me lo inserta bien, sin ningún problema, pero antes de que cierre el formulario, voy a isertar otro, justo despues de haber insertado el anterior, al dar a insertar por segunda vez, me aparece el siguiente mensaje:

"El campo id está bloqueado, no puede repetirse el valor '1' ".

No entiendo como si me inserta la primera vez y despues me sale ese error.

Les dejo el código para ver si pueden ver algun error, me imagino que será algo con el DataRow o algo asi, no sé, o a la hora de actualizar el DataSet que me salte algo, en fin, haber si pueden ayudarme, desde ya, gracias.

Private Sub BtnInsertar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles BtnInsertar.Click
If TxtCliente.Text <> "" Or TxtTelefono.Text <> "" Then
If IsNumeric(TxtTelefono.Text) Then
FrmMdi.MDI.DAClientes.FillSchema(FrmMdi.MDI.DS, SchemaType.Source, "DSTClientes")
Dim NR As DataRow
Try
NR = FrmMdi.MDI.DS.Tables("DSTClientes").NewRow
NR("ncliente") = TxtCliente.Text
NR("ntelefono") = TxtTelefono.Text
NR("coge_mucho") = ChkMucho.Checked
NR("ncomentario") = TxtComentario.Text
FrmMdi.MDI.DS.Tables("DSTClientes").Rows.Add(NR)
FrmMdi.MDI.DAClientes.Update(FrmMdi.MDI.DS, "DSTClientes")
FrmMdi.MDI.DS.AcceptChanges()
Limpiar(Me)
MessageBox.Show("Cliente Almacenado con éxito", "Confirmación", MessageBoxButtons.OK, MessageBoxIcon.Information)
TxtCliente.Focus()
Catch ex As Exception
MessageBox.Show(ex.Message, "Error al crear nueva fila", MessageBoxButtons.OK, MessageBoxIcon.Error)
Finally
NR.ClearErrors()
End Try
Else
MessageBox.Show("El teléfono ha de ser numérico", "Error al Almacenar", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
Else
MessageBox.Show("Los Datos introducidos son incorrectos", "Error al Almacenar", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
End Sub
__________________
Charlie.
  #2 (permalink)  
Antiguo 30/06/2004, 15:22
Avatar de SunDarK  
Fecha de Ingreso: diciembre-2003
Ubicación: Jerez de la Frontera
Mensajes: 1.193
Antigüedad: 20 años, 4 meses
Puntos: 8
Wenash,eso es porque no has especificado en la BD que el campo es autonumerico.
Si usas access en el campo id de la base de datos tienes que poner que es AUTOINCREMENTAL, y si usas SQL Server tienes que poner que ID es la columna IDENTIDAD.
Con eso se deberia solucionar,recuerda que el campo ID no tienes que insertarlo en la consulta,es decir como bien dice se incrementa solo
Un saludo
  #3 (permalink)  
Antiguo 30/06/2004, 18:08
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 10 meses
Puntos: 7
Pero si ya es autonumérico !!!! Además, si ese campo no fuera autonumérico tampoco debería insertarme la primera vez que lo ejecuto, pero siempre me inserta el primer dato y despues no me inserta el siguiente.
__________________
Charlie.
  #4 (permalink)  
Antiguo 30/06/2004, 23:41
Avatar de SunDarK  
Fecha de Ingreso: diciembre-2003
Ubicación: Jerez de la Frontera
Mensajes: 1.193
Antigüedad: 20 años, 4 meses
Puntos: 8
Vamos pues por lo que veo parece eso,que el 1 está por defecto y siempre se repite :S A ver si alguno tiene otra idea
  #5 (permalink)  
Antiguo 01/07/2004, 02:34
Avatar de GeRuNdIo  
Fecha de Ingreso: marzo-2004
Ubicación: Sanlúcar de Barrameda, Cádiz
Mensajes: 232
Antigüedad: 20 años, 1 mes
Puntos: 2
Estoy con SunDarK, es un error de BD. Si no insertas "a mano" el ID (Primary Key en la BD), en la inserción, el problema está en la base de datos.
1 Saludo!
__________________
Una buena forma de sacar las castañas del fuego sin quemarse: LEE FOROSDELWEB..... :si:
------
F.P.R. MCAD .NET
  #6 (permalink)  
Antiguo 01/07/2004, 07:23
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 10 meses
Puntos: 7
Bueno, pues la BD tiene el campo id autonumérico, sin duplicados.

Creo que el problema está en que el dataset debe liarse despues de hacer la primera insercción. Pero es que no sé por que puede ser, doy al botón de insertar, y me insertar, vuelvo a intentar insertar otro dato y me dice eso:

La columna id está restringida para ser única. Ya está presente el valor '1'.

Sin embargo, la primera vez me inserta, y me inserta el id correspondiente al siguiente. Pero despues, en el segudo, debe ser que al actualizar el DataSet algo pasa ahi y chifla, por que no es normal que si me funciona la priemra vez en la segunda casque.

Haber si con esto último comentado surgen nuevas ideas, gracias a todos.
__________________
Charlie.
  #7 (permalink)  
Antiguo 01/07/2004, 13:36
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 10 meses
Puntos: 7
Please, hechenme un cable que estoy pila atascado, si quiere alguien incluso le mando el programa pa que lo mire, es uqe no sé donde tengo el error.
__________________
Charlie.
  #8 (permalink)  
Antiguo 01/07/2004, 15:06
Avatar de SunDarK  
Fecha de Ingreso: diciembre-2003
Ubicación: Jerez de la Frontera
Mensajes: 1.193
Antigüedad: 20 años, 4 meses
Puntos: 8
Venga chcma mandamelo ahora que tengo tiempo libre,mandalo a SunDarK2004(arroba)gmail.com
Un saludo
  #9 (permalink)  
Antiguo 03/07/2004, 07:59
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 10 meses
Puntos: 7
¿Has conseguido resolver el problema SunDark?, por que me imagino uqe te habrá llegado el correo, ¿VerdaD?
__________________
Charlie.
  #10 (permalink)  
Antiguo 03/07/2004, 12:51
Avatar de SunDarK  
Fecha de Ingreso: diciembre-2003
Ubicación: Jerez de la Frontera
Mensajes: 1.193
Antigüedad: 20 años, 4 meses
Puntos: 8
Lo acabo de ver,que llevo unos dias de relax ejejejej,ahora le hecho un vistazo,un saludo
  #11 (permalink)  
Antiguo 03/07/2004, 13:19
Avatar de SunDarK  
Fecha de Ingreso: diciembre-2003
Ubicación: Jerez de la Frontera
Mensajes: 1.193
Antigüedad: 20 años, 4 meses
Puntos: 8
Wenash chcma.
En FrmInsertarCliente.VB,donde se encuentra las lineas
Cita:
Try
NR = FrmMdi.MDI.DS.Tables("DSTClientes").NewRow
NR("ncliente") = TxtCliente.Text
Te falta añadir esta linea
Cita:
FrmMdi.MDI.DS.Clear()
Es decir,te quedaría
Cita:
Try
FrmMdi.MDI.DS.Clear()
NR = FrmMdi.MDI.DS.Tables("DSTClientes").NewRow
NR("ncliente") = TxtCliente.Text
Y ya funciona sin problemas
Un saludo
  #12 (permalink)  
Antiguo 04/07/2004, 07:50
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 10 meses
Puntos: 7
Pero si hago eso que dices frmmdi.mdi.ds.clear(), a la hora de hacer el frmmdi.mdi.ds.accpetChanges(), ¿No me deberia eliminar todos los datos menos el nuevo insertado?

Vamos, yo entiendo que la BD se actualiza según lo que haya en el DataSet, si lo limpio con .clear(), entonces a la hora de actualizar los cambios el dataadapter y el dataset, la BD solo debería quedarse con el registro recién insertado únicamente, ¿Por qué no es asi?
__________________
Charlie.

Última edición por chcma; 04/07/2004 a las 07:53 Razón: No me ha quedado claro un asunto y esto q publiqué es de menor importancia.
  #13 (permalink)  
Antiguo 04/07/2004, 09:41
Avatar de sindestino  
Fecha de Ingreso: noviembre-2003
Ubicación: xxxx xxxx
Mensajes: 270
Antigüedad: 20 años, 6 meses
Puntos: 0
ya me parecía que había leído algo del tema, si bien yo trabajo de forma diferente, éste artículo puede ayudar

http://www.microsoft.com/spanish/msd...anidcrisis.asp

espero que sirva, saludos
  #14 (permalink)  
Antiguo 04/07/2004, 13:12
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 10 meses
Puntos: 7
Esta muy interesante el enlace sindestino, sin embargo, no menciona el problema que a mi se me presenta, sino que ese artículo es para obtener el último id almacenado en la BD.


Sundark, poniendo como me has dicho: FrmMdi.MDI.DS.Clear() antes de insertar, a la hora de realizar la acutalización del DS:

FrmMdi.MDI.DS.Tables("DSTClientes").Rows.Add(NR)
FrmMdi.MDI.DAClientes.Update(FrmMdi.MDI.DS, "DSTClientes")
FrmMdi.MDI.DS.AcceptChanges()

¿No deberían borrarse todos los registros de la Base de Datos y verse solo el último registro insertado?

Lo digo por que en teoría lo que se hace es actualizar la Tabla de la BD en base al DataTable del DataSet, y si he hecho primero un .clear() y despues un addrow, simplemente debería verse esa fila insertada, ¿No?
__________________
Charlie.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:55.