Visual Basic.NET - DATA ADAPTER.UPDATE

 
Vista:

DATA ADAPTER.UPDATE

Publicado por JUAN CARLOS (5 intervenciones) el 15/02/2005 12:03:09
BUENOS DIAS ,

MI PROBLEMA ES QUE QUIERO ACTUALIZAR UNA BBDD CON EL UPDATE DEL DATA ADAPTER , PERO SOLO DE LOS DATOS CARGADOS EN EL DATASET . DE MANERA QUE SI SE AÑADEN REGISTROS MIENTRAS EL PROCESO NO HA TERMINADO , ESTOS REGISTROS NO SE TENGAN EN CUENTA .

ESTE ES EL CODIGO :
Dim cmd As New OdbcCommand
da.UpdateCommand = cmd
da.UpdateCommand.Connection = cn
da.UpdateCommand.CommandText = ("UPDATE " & taula & " SET TRGFLA = 'X' WHERE TRGFLA = ' '")

Dim PROMO As DataRow
For Each PROMO In Me.Tables("UNICA").Rows
Me.Tables("unica").Rows(0)("TRGFL1") = "N"
Next

Dim DC1 As DataSet = New DataSet
DC1 = Me.GetChanges(DataRowState.Modified)
If Me.HasChanges(DataRowState.Modified) Then

Try
da.Update(DC1, "unica")
Catch ex As OdbcException
Dim fdfs As String = ex.Message
Catch ex As System.Data.DBConcurrencyException
Dim fdfs As String = ex.Message
Dim fdffs As String = ex.HelpLink
End Try
End If

GRACIAS Y SALUDOS
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:DATA ADAPTER.UPDATE

Publicado por Edgar (1501 intervenciones) el 15/02/2005 12:20:39
Hola

Haz una cosa, usa el CommandBuilder (OdbcCommandBuilder) para construir los comandos, luego asignas nulo (Nothing) a las propiedades InsertCommand y DeleteCommand, de tal manera que solamente haga el Update y la selección

Finalmente, ejecutas el metodo Update del adaptador

Saludos
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

RE:DATA ADAPTER.UPDATE

Publicado por JUAN CARLOS (5 intervenciones) el 15/02/2005 15:02:36
GRACIAS POR LA RESPUESTA . DE TODAS FORMAS NO ES LA SOLUCIÓN A MI PROBLEMA . A VER SI LE DOY MÁS LUZ:

MI DESEO ES QUE LA SENTENCIA UPDATE SOLO AFECTE A LOS REGISTROS QUE SE HAYAN CARGADO EN EL DATASET . PERO EN DEBUG , SI PARO DESPUÉS DE CARGAR EL DATASET I ANTES DE HACER EL UPDATE , Y AÑADO UN REGISTRO A LA BBDD , AL HACER EL UPDATE TAMBIEN ACTUALIZA ESTE NUEVO REGISTRO.

NO SE SI HE PODIDO DARLE MAS LUZ, PERO ESTE ES MI PROBLEMA

GRACIAS


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

RE:DATA ADAPTER.UPDATE

Publicado por Edgar (1501 intervenciones) el 15/02/2005 15:12:49
Hola

Lo que debe estar sucediendo es que la clausula Update que estas creandoafecta a mas de una fila.. fijate.. cuando creas el adaptador por el diseñador, (arrastrandolo desde la barra de herramientas hasta el formulario o componente) puedes indicarle que quieres que maneje la concurrencia optimista... esto permite que se modifique unicamente el registro, siempre que no se haya modificado, esto excluiria cualquier registro agregado externamente a la bd...

Por que sucede esto? porque cuando indicas que use concurrencia optimista, la clausula where se asegura que actualizes unicamente el registro siempre y cuando mantenga los valores originales, es decir, que el update solo afecta una fila a la vez...

Esto es lo que debes estar necesitando, y al parecer el commandbuilder no es capaz de generar la actualización optimista. Te recomiendo entonces que crees el adaptador por el diseñador, o en todo caso, que lo agregues al formulario unicamente para que tengas una idea de como lo hace, para que tu hagas algo similar por código

Si no.. entonces tendrás que ejecutar un proceso mucho mas complejo.. pero cuentame a ver que tal te va con esta solución que te planteo

Saludos
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

RE:DATA ADAPTER.UPDATE

Publicado por JUAN CARLOS (5 intervenciones) el 17/02/2005 16:57:03
HOLA EDGAR

PERDONA POR NO RESPONDER ANTES PERO HE ESTADO MUY LIADO .

HE HECHO UN MONTON DE PRUEBAS , PERO LA LUZ VINO CREANDO EL DATAADAPTER COMO ME DIJISTE . RESULTA QUE CON ODBC NO RECUPERA LAS CLAVES ( LA TABLA ES DE AS/400) . AHORA ACTUALIZO LA TABLA AL MISMO TIEMPO QUE EL DATASET CON UN COMANDO DIRECTO . ESTE ES EL CODIGO :

Dim PROMO As DataRow
Dim REGAL As DataRow

For Each PROMO In Me.Tables("UNICA").Rows
Dim cmd1 As New OdbcCommand
Dim X As String = CType(Me.Tables(0).Rows(0)("ADAST"), String)
Dim X1 As Long = CType(Me.Tables(0).Rows(0)("ADATID"), Long)
cmd1.Connection = cn
cmd1.CommandText = ("UPDATE " & taula & " SET TRGFLA = 'X' WHERE TRGFLA = ' ' AND ADAST = '" & X & " ' AND ADATID = " & X1 & " ")
Try
cmd1.ExecuteNonQuery()
Catch ex As System.Data.odbc.OdbcException
Dim s As String = ex.Message
MsgBox(s)
End Try
Me.Tables("unica").Rows(0)("TRGFL1") = "N"
Next .

SOLO UNA PREGUNTA , SI HE DE ACTUALIZAR MUCHAS FILAS ( ENTR E 2000 Y 4000) , Y TENIENDO EN CUENTA QUE TRABAJAMOS CON UNA LINEA PEQUEÑA (64 KB ) ESTO SE PUEDE DEMORAR MUCHO ? Y SI ES ASÍ HAY ALGUNA MANERA DE HACERLO MÁS OPTIMIZADO ?

MUCHAS GRACIAS POR TODO :-D




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

RE:DATA ADAPTER.UPDATE

Publicado por Edgar (1501 intervenciones) el 17/02/2005 23:25:36
Hola

Pues si creo que puede tardar mucho... la mejor opción siempre será usar el dataset, pero por lo visto parece que te da problemas..

Ahora bien, no se si las BD en AS/400 te permiten crear procedimientos almacenados o stored procedures.. ya que si es asi, podrías optar por irte por esta vía, ya que puedes hacer tu procedimiento y crear el adaptador con un comando de procedimento almacenado

Saludos
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