Problema en actualizacion de registros con sql 2000

15/09/2006 - 18:23 por Danmir | Informe spam
Tengo el vb 2005 express y al momento de tratar de aplicar los cambios a la
bd me sale el siguiente mensaje de error.
"la generacion SQl dinámica no es compatible con con SelectCommand que no
devuelve ninguna informacion sobre columnas clave".
El problema es que todo lo estoy haciendo por codigo, no uso los data
adapter que se generan automaticamente, porque no sale la conexion hacia Sql
2000.
De todas maneras, mi codigo es el siguiente:
Public Class catCte
'ponemos las declaraciones
Dim conexion As SqlConnection

Dim orden As SqlDataAdapter

Dim comando As SqlCommand

Dim constructor As SqlCommandBuilder

Dim miTabla As DataSet

Dim bSource As BindingSource
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
' enlazando conexion a la base de datos
conChain = My.Settings.sqlChain
'conchain= Data Source=;Initial Catalog=mrp-ing;Integrated
Security=True

conexion = New SqlConnection(conChain)
comando = New SqlCommand("select * from tblClientes", conexion)

' respetar el espacion en blanco en DATA SOURCE



' cargando el adapter con la instruccion sql
orden = New SqlDataAdapter(comando)
constructor = New SqlCommandBuilder(orden)
'' cargando el dataset
miTabla = New DataSet()
orden.Fill(miTabla, "tblClientes")
'bsource es el binding para los datos de los textbox
bSource = New BindingSource(miTabla, "tblClientes")

'DGVdirecciones es un datagridview

DGVDirecciones.DataSource = miTabla
DGVDirecciones.DataMember = "tblClientes"



'les cargamos los bindings a los textos
txtCtaCont.DataBindings.Add("text", bSource, "cte_txtCuenta")
txtId.DataBindings.Add("text", bSource, "txtIdCliente")
txtNFiscal.DataBindings.Add("text", bSource, "txtnomfiscal")
txtNCorto.DataBindings.Add("text", bSource, "Cte_txtNomComercial")
txtRfc.DataBindings.Add("text", bSource, "cte_txtRFC")
txtCurp.DataBindings.Add("text", bSource, "cte_txtCurp")
txtTel.DataBindings.Add("text", bSource, "cte_txtTel")
txtFax.DataBindings.Add("text", bSource, "cte_txtFax")
txtDom.DataBindings.Add("text", bSource, "cte_txtDomicilio")
txtCol.DataBindings.Add("text", bSource, "cte_txtColonia")
txtPob.DataBindings.Add("text", bSource, "cte_txtPoblacion")
txtEdo.DataBindings.Add("text", bSource, "cte_txtEntidad")
txtPais.DataBindings.Add("text", bSource, "cte_txtPais")
txtcp.DataBindings.Add("text", bSource, "cte_txtCodPtl")
txtWeb.DataBindings.Add("text", bSource, "cte_txtWeb")
Tipo.DataBindings.Add("text", bSource, "cte_ltaTipos")
Sector.DataBindings.Add("text", bSource, "cte_ltaSector")
'le ponemos al navegador la binding source
CteNavigator.BindingSource = bSource
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Try
'hacemos lo que se supone que actualiza
bSource.EndEdit()

'el error sale aqui
orden.Update(miTabla, "tblClientes") 'error AYUDA!!
miTabla.AcceptChanges()
MsgBox("Update successful")
Catch ex As Exception
MsgBox("Update failed " & ex.Message & ex.ToString)
End Try
End Sub
End Class
 

Leer las respuestas

#1 Jesús López
15/09/2006 - 19:02 | Informe spam
Lo que ocurre es que para que el CommandBuilder pueda generar
automáticamente los comandos de actualizacción, la tabla debe tener una
clave primaria.

Saludos:

Jesús López



"Danmir" escribió en el mensaje
news:
Tengo el vb 2005 express y al momento de tratar de aplicar los cambios a
la
bd me sale el siguiente mensaje de error.
"la generacion SQl dinámica no es compatible con con SelectCommand que no
devuelve ninguna informacion sobre columnas clave".
El problema es que todo lo estoy haciendo por codigo, no uso los data
adapter que se generan automaticamente, porque no sale la conexion hacia
Sql
2000.
De todas maneras, mi codigo es el siguiente:
Public Class catCte
'ponemos las declaraciones
Dim conexion As SqlConnection

Dim orden As SqlDataAdapter

Dim comando As SqlCommand

Dim constructor As SqlCommandBuilder

Dim miTabla As DataSet

Dim bSource As BindingSource
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
' enlazando conexion a la base de datos
conChain = My.Settings.sqlChain
'conchain= Data Source=;Initial Catalog=mrp-ing;Integrated
Security=True

conexion = New SqlConnection(conChain)
comando = New SqlCommand("select * from tblClientes", conexion)

' respetar el espacion en blanco en DATA SOURCE



' cargando el adapter con la instruccion sql
orden = New SqlDataAdapter(comando)
constructor = New SqlCommandBuilder(orden)
'' cargando el dataset
miTabla = New DataSet()
orden.Fill(miTabla, "tblClientes")
'bsource es el binding para los datos de los textbox
bSource = New BindingSource(miTabla, "tblClientes")

'DGVdirecciones es un datagridview

DGVDirecciones.DataSource = miTabla
DGVDirecciones.DataMember = "tblClientes"



'les cargamos los bindings a los textos
txtCtaCont.DataBindings.Add("text", bSource, "cte_txtCuenta")
txtId.DataBindings.Add("text", bSource, "txtIdCliente")
txtNFiscal.DataBindings.Add("text", bSource, "txtnomfiscal")
txtNCorto.DataBindings.Add("text", bSource, "Cte_txtNomComercial")
txtRfc.DataBindings.Add("text", bSource, "cte_txtRFC")
txtCurp.DataBindings.Add("text", bSource, "cte_txtCurp")
txtTel.DataBindings.Add("text", bSource, "cte_txtTel")
txtFax.DataBindings.Add("text", bSource, "cte_txtFax")
txtDom.DataBindings.Add("text", bSource, "cte_txtDomicilio")
txtCol.DataBindings.Add("text", bSource, "cte_txtColonia")
txtPob.DataBindings.Add("text", bSource, "cte_txtPoblacion")
txtEdo.DataBindings.Add("text", bSource, "cte_txtEntidad")
txtPais.DataBindings.Add("text", bSource, "cte_txtPais")
txtcp.DataBindings.Add("text", bSource, "cte_txtCodPtl")
txtWeb.DataBindings.Add("text", bSource, "cte_txtWeb")
Tipo.DataBindings.Add("text", bSource, "cte_ltaTipos")
Sector.DataBindings.Add("text", bSource, "cte_ltaSector")
'le ponemos al navegador la binding source
CteNavigator.BindingSource = bSource
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Try
'hacemos lo que se supone que actualiza
bSource.EndEdit()

'el error sale aqui
orden.Update(miTabla, "tblClientes") 'error AYUDA!!
miTabla.AcceptChanges()
MsgBox("Update successful")
Catch ex As Exception
MsgBox("Update failed " & ex.Message & ex.ToString)
End Try
End Sub
End Class

Preguntas similares