BORRADO DE REGISTRO EN SQL SERVER

30/08/2006 - 13:13 por INFORMÁTICA APLICADA | Informe spam
Adjunto el código que se ejecuta para borrar un registro de una tabla de SQL
SERVER.

Dim DTVPAI As DataView = New DataView(DTSPAI.Tables("MPAISES"))
DTVPAI.Sort = "CODPAIS"
Dim BORRAR As Integer = DTVPAI.Find(TXTCODIGO.Text)
DTSPAI.Tables("MPAISES").Rows(BORRAR).Delete()
CONEX.Open()
DTAPAI.Update(DTSPAI, "MPAISES")
DTSPAI.AcceptChanges()

El problema que tengo es que sólo me borra un registro la primera vez que
entro en el formulario. Si al entrar en el formulario añado nuevos registros,
consulto, o modifico otros registros y a continuación intento borrar alguno,
no me lo borra.

Que me falta por poner de código?

Un saludo y gracias anticipadas.

INFORMÁTICA APLICADA
 

Leer las respuestas

#1 Jesús López
30/08/2006 - 15:40 | Informe spam
El problema es que el número que devuelve DataView.Find() es el índice del
registro dentro del DataView que no tiene por qué coincidir con el registro
dentro del DataTable con el mismo índice. Esto es así por dos razones:

1) El orden de los registros del dataview y del datatable pueden ser
diferentes.
2) El número de registros del datatable y del dataview pueden ser diferentes
ya que:
a) De forma predeterminada, los dataviews no contienen los registros
eliminados mientras que los datatables sí.
b) Los dataviews pueden estar filtrados.

Dim DTVPAI As DataView = New DataView(DTSPAI.Tables("MPAISES"))
DTVPAI.Sort = "CODPAIS"
Dim BORRAR As Integer = DTVPAI.Find(TXTCODIGO.Text)
If BORRAR <> -1 Then
DTVPAI(BORRAR).Delete
'CONEX.Open() no es necesario abrir la conexión, ya que update
lo hace
DTAPAI.Update(DTSPAI, "MPAISES")
'DTSPAI.AcceptChanges() no es necesario llamar a AcceptChanges
puesto que ya lo hace el adapter
Else
MsgBox("Registro no encontrado")
End If

por otra parte, crear un dataview cada vez que se quiera eliminar un
registro me parece un despilfarro de recursos. Sería más eficiente usar el
método Find de DataTable.Rows si CODPAIS es la clave primaria en el
datatable, o el método Select si no lo es:

Suponiendo que CODPAIS es de tipo String:

Dim RowToDelete As DataRow =
DTSPAI.Tables("MPAISES").Rows.Find(TXTCODIGO.Text)
If RowToDelete IsNot Nothing Then
RowToDelete.Delete
DTAPAI.Update(DTSPAI, "MPAISES")
Else
MsgBox("Registro no encontrado")
End If



Saludos:

Jesús López



"INFORMÁTICA APLICADA" escribió en el mensaje
news:
Adjunto el código que se ejecuta para borrar un registro de una tabla de
SQL
SERVER.

Dim DTVPAI As DataView = New DataView(DTSPAI.Tables("MPAISES"))
DTVPAI.Sort = "CODPAIS"
Dim BORRAR As Integer = DTVPAI.Find(TXTCODIGO.Text)
DTSPAI.Tables("MPAISES").Rows(BORRAR).Delete()
CONEX.Open()
DTAPAI.Update(DTSPAI, "MPAISES")
DTSPAI.AcceptChanges()

El problema que tengo es que sólo me borra un registro la primera vez que
entro en el formulario. Si al entrar en el formulario añado nuevos
registros,
consulto, o modifico otros registros y a continuación intento borrar
alguno,
no me lo borra.

Que me falta por poner de código?

Un saludo y gracias anticipadas.

INFORMÁTICA APLICADA

Preguntas similares