none
Consulta al guardar datos RRS feed

  • Pregunta

  •  

    Hola amigos, tengo un problema en cual consiste en que cuando quiero grabar los datos de operario, al parecer pasa por alto la busqueda para comprobar si existe para actualizarlo solamente... por lo cual siempre lo toma como para agregar un nuevo registro y me manda el error por violar la regla del campo clave.... este es el código... ¿que está mal?

     

    DS.Clear()

    DR = Nothing

    DA.FillSchema(DS, SchemaType.Mapped, "Fasmel")

    DR = DS.Tables("Fasmel").Rows.Find(Val(TxtCodigo.CtlText))

     

    If (DR Is Nothing) Then

    Sql = "Insert Into Operario Values(" & Val(TxtCodigo.CtlText) & "," & Rut & ",'" & Trim(Dig) & "','" & Trim(CboNombre.Text) & "'," & Val(TxtValor.CtlText) & ")"

    Else

    Sql = "Update Operario Set Rut=" & Rut & ",Dig='" & Trim(Dig) & "',Nombre='" & Trim(CboNombre.Text) & "' ,Valor=" & Val(TxtValor.CtlText) & " Where CodOpe=" & Val(TxtCodigo.CtlText)

    End If

    Dim SqlIns As New SqlClient.SqlCommand(Sql, Conexion) 'crear comando de insercion

    '

    Try

    SqlIns.ExecuteNonQuery() 'ejecutar comando

    Catch ex As Exception

    MessageBox.Show(ex.Message.ToString)

    Exit Sub

    End Try

     

    El campo clave es CodOpe

    martes, 6 de noviembre de 2007 4:21

Respuestas

  •  

    Lo probé pero siguieron los mismo problemas... pero ya lo solucioné de la siguiente manera, hice un pequeño ajuste en el código...

     

    DA = New SqlClient.SqlDataAdapter("Select * From Operario where CodOpe=" & Val(TxtCodigo.CtlText), Conexion)

    DS = New DataSet

    DS.Clear()

    DA.Fill(DS, "Operario")

    If DS.Tables("Operario").Rows.Count = 0 Then

    Sql = "Insert Into Operario Values(" & Val(TxtCodigo.CtlText) & "," & Rut & ",'" & Trim(Dig) & "','" & Trim(CboNombre.Text) & "'," & Val(TxtValor.BDFormat) & ")"

    Else

    Sql = "Update Operario Set Rut=" & Rut & ",Dig='" & Trim(Dig) & "',Nombre='" & Trim(CboNombre.Text) & "' ,Valor=" & Val(TxtValor.BDFormat) & " Where CodOpe=" & Val(TxtCodigo.CtlText)

    End If

    Dim SqlIns As New SqlClient.SqlCommand(Sql, Conexion) 'crear comando de insercion

    Try

    SqlIns.ExecuteNonQuery() 'ejecutar comando

    Catch ex As Exception

    MessageBox.Show(ex.Message.ToString)

    Exit Sub

    End Try

    DA.Dispose()

    DS.Dispose()

    martes, 6 de noviembre de 2007 19:02

Todas las respuestas

  • Hola,

     

    ¿Has probado a ver que te trae el DR?, es decir, pon un punto de parada y mira a ver que te devuelve.

     

    Un Saludo

     

    martes, 6 de noviembre de 2007 8:20
    Moderador
  • Sip... lo probé y siempre llega con "Nothing"... y por eso no ejecuta biene el IF..

     

    martes, 6 de noviembre de 2007 13:13
  • Hola,

     

    ¿Como tienes definido el dataadapter?, prueba a usar el método Fill, comprueba si tiene datos el dataset.

     

    Un saludo,

     

    Carmen Sánchez
    Analista Programador - Desarrollador 4 estrellas
    http://www.carmen-sanchez.com
    martes, 6 de noviembre de 2007 14:05
  • Ya probé pero es lo mismo, no sé porque no recibe el dato de txtcodigo

     

    martes, 6 de noviembre de 2007 14:14
  • Hola,

     

    ¿Esto(TxtCodigo.CtlText) es un control textobox?

     

    Un Saludo

     

    martes, 6 de noviembre de 2007 14:43
    Moderador
  • Si, es un ActiveX creado en VB 6, un TextBox que uso para los campos numericos, acepta sólo números al digitar.

     

    martes, 6 de noviembre de 2007 14:50
  • Hola CyberMauro,

     

    ¿Porque no pruebas a cambiar tu control por un textbox normal?, solo para ver si es por el control.

     

    Un Saludo

     

    martes, 6 de noviembre de 2007 16:29
    Moderador
  •  

    Lo probé pero siguieron los mismo problemas... pero ya lo solucioné de la siguiente manera, hice un pequeño ajuste en el código...

     

    DA = New SqlClient.SqlDataAdapter("Select * From Operario where CodOpe=" & Val(TxtCodigo.CtlText), Conexion)

    DS = New DataSet

    DS.Clear()

    DA.Fill(DS, "Operario")

    If DS.Tables("Operario").Rows.Count = 0 Then

    Sql = "Insert Into Operario Values(" & Val(TxtCodigo.CtlText) & "," & Rut & ",'" & Trim(Dig) & "','" & Trim(CboNombre.Text) & "'," & Val(TxtValor.BDFormat) & ")"

    Else

    Sql = "Update Operario Set Rut=" & Rut & ",Dig='" & Trim(Dig) & "',Nombre='" & Trim(CboNombre.Text) & "' ,Valor=" & Val(TxtValor.BDFormat) & " Where CodOpe=" & Val(TxtCodigo.CtlText)

    End If

    Dim SqlIns As New SqlClient.SqlCommand(Sql, Conexion) 'crear comando de insercion

    Try

    SqlIns.ExecuteNonQuery() 'ejecutar comando

    Catch ex As Exception

    MessageBox.Show(ex.Message.ToString)

    Exit Sub

    End Try

    DA.Dispose()

    DS.Dispose()

    martes, 6 de noviembre de 2007 19:02
  • Hola CyberMauro,

     

    Me alegro de que te saliese . Una pequeña duda, al final el TxtCodigo.CtlText, ¿si te estaba devolviendo el dato no?

     

    Un Saludo

     

    miércoles, 7 de noviembre de 2007 10:47
    Moderador
  • Asi es Fran, efectivamente TxtCodigo estaba devolviendo bien su contenido... no tenía ningún problema, pero no sé porque no funcionaba de la otra forma...

     

    Gracias.

    miércoles, 7 de noviembre de 2007 17:53