Visual Basic.NET - adapter update

   
Vista:

adapter update

Publicado por Candelaria (1 intervención) el 07/01/2008 22:18:44
Hola a todos, tengo el siguiente problema: acceso una base de datos usundo el data adapter lo hace bien haciendo la consulta con una tabla , pero si en la consulta agrego otra tabla relacionada a la anterior no me actualiza nada y es asi como lo necesito porque validare la fecha_ing : el codigo es el sig:

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim sel As String
Dim cnx As New OracleConnection("Data Source=xxx User Id=yyy ;Password=zzzz;")
Dim i, n As Integer
( con este select lo hace bien)

sel = "SELECT COD_EMPRESA,NO_EMP,NO_PLANILLA,SALARIO,ANTIGUEDAD,OTROS_ING,HORAS_EXTRAS,INSS,IR FROM PLANILLA where ((horas_extras > 0) OR (salario + antiguedad + horas_extras + otros_ing) > '37518') and no_planilla = " & TextBox2.Text & " and cod_empresa = " & TextBox3.Text & ""

( con este select me manda un error)

'sel = "SELECT A.COD_EMPRESA,A.NO_EMP,A.NO_PLANILLA,A.SALARIO,A.ANTIGUEDAD,A.OTROS_ING,A.HORAS_EXTRAS,A.INSS,A.IR FROM PLANILLA A,EMPLEADO B WHERE A.COD_EMPRESA='03' AND A.NO_PLANILLA='200707' AND B.FECHA_ING <'01/07/2007' AND A.COD_EMPRESA = B.COD_EMPRESA AND A.CODIGO_DEP = B.CODIGO_DEP AND A.COD_CENT_COSTO = B.COD_CENT_COSTO AND A.COD_CARGO=B.COD_CARGO AND B.NO_EMP=A.NO_EMP"


adp = New OracleDataAdapter(sel, cnx)
Dim oCB As OracleCommandBuilder = New OracleCommandBuilder(adp)
Try
cnx.Open()
dt = New Data.DataTable
adp.Fill(dt)
GridView1.DataSource = dt
GridView1.DataBind()
Catch ex As Exception
Throw ex
Finally
If cnx.State = Data.ConnectionState.Open Then
cnx.Close()
End If
End Try

n = dt.Rows.Count
If n = 0 Then
'no hay registro
Else
For i = 0 To n - 1
'asignar a la variable el valor del registro
nsalario = dt.Rows(i)("salario").ToString
nantiguedad = dt.Rows(i)("ANTIGUEDAD").ToString
notrosingresos = dt.Rows(i)("OTROS_ING").ToString
nhorasext = dt.Rows(i)("HORAS_EXTRAS").ToString
ninss = dt.Rows(i)("INSS").ToString
nir = CStr(ir(CSng(nsalario), CSng(nantiguedad), CSng(notrosingresos), CSng(nhorasext), CSng(ninss)))
dt.Rows(i)("IR") = nir
adp.Update(dt)
dt.AcceptChanges()
Next
End If
dt = New Data.DataTable
adp.Fill(dt)
GridView2.DataSource = dt
GridView2.DataBind()
Label4.Text = "--Listado Actualizado--"
End Sub

El error es el siguiente:
Fallo en la generación de SQL dinámico. No se ha encontrado información sobre la clave y se detiene en el adp.update(dt)
gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:adapter update

Publicado por Stiv (36 intervenciones) el 10/01/2008 15:37:38
Muy buenas:
El primer sql te funciona porque la select solo está apuntando contra una tabla y el dataadapter puede encontrar la información de clave necesaria para hacer el update, en el segundo no puede porque estás intentando hacer un update contra una vista que tiene datos que vienen de 2 tablas diferentes.

Por cierto si en lugar de utilizar la notación:

SELECT CamposTabla1, CamposTabla2 FROM Tabla1, Tabla2 WHERE
CampoClaveTabla1 = CampoClaveTabla2

utilizas los JOIN te irá más rápido:

SELECT CamposTabla1, CamposTabla2 FROM Tabla1 JOIN Tabla2 ON
CampoClaveTabla1 = CampoClaveTabla2

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar