Visual Basic.NET - Problema al pasar xml a access

 
Vista:

Problema al pasar xml a access

Publicado por Liz (31 intervenciones) el 08/02/2007 19:11:20
saludos, hice una aplicacion que lee un archivo xml nodo a nodo para ir insertando sus datos en una tabla en access, este es mi codigo:

Dim mstrRutaOrigen As String = Path.GetFullPath(FileUpload1.PostedFile.FileName.ToString)
Dim documento As New XmlDocument
Dim nodo As XmlNode
Dim codigo As Integer
Dim valor1 As Decimal
Dim valor2 As Decimal
Dim valor3 As Decimal
Dim valor4 As Decimal

documento.Load(mstrRutaOrigen)
For Each nodo In documento.DocumentElement.ChildNodes
If nodo.Name = "DEUDA" Then
codigo = nodo.ChildNodes(0).InnerText
valor1 = nodo.ChildNodes(1).InnerText
valor2 = nodo.ChildNodes(2).InnerText
valor3 = nodo.ChildNodes(3).InnerText
valor4 = nodo.ChildNodes(3).InnerText

If verifica_usuario_existe(codigo) = True Then
insertar_datos(codigo, valor1, valor2, valor3, valor4)
End If


y este es el procedimiento para insertar los datos en la tabla:

Private Sub insertar_datos(ByVal codigo As Integer, ByVal valor1 As Decimal, ByVal valor2 As Decimal, ByVal valor3 As Decimal, ByVal valor4 As Decimal)
With cmd
.Connection = cn
.CommandType = CommandType.Text
.CommandText = "INSERT INTO DEUDA ([usuario_id], [valor1], [valor2], [valor3], [valor4]) VALUES (" & codigo & ", " & valor1 & ", " & valor2 & ", " & valor3 & ", " & valor4 & ")"
.ExecuteNonQuery()
Me.Label1.Text = "¡Registros actualizados con éxito!"
End With
End Sub

eso es todo pero el problema es que valor1 por ej en el xml esta 132.25 y cuando reviso en la tabla se ha guardado 13225 todo junto no diferencia los decimales y no se porque si los valores en la tabla estan tipo number decimal (2).

cual sera el problema?
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:Problema al pasar xml a access

Publicado por Edgar (1501 intervenciones) el 08/02/2007 19:22:46
Hola

Es probable que el problema sea el separador de decimales, en el xml es punto pero el access debe esperar coma, intenta sustituyendo el punto por coma a ver que tal

Saludos

Edgar Gonzalez
http://www.edgaragg.com
http://sobre-ing-software.blogspot.com/
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:Problema al pasar xml a access

Publicado por Liz (31 intervenciones) el 08/02/2007 19:45:57
gracias por contestar,

usted tiene razon el xml tiene los decimales separados por puntos y el access seguramente espera (,) pero no creo que sea la mejor solucion ir al xml y cambiar manualmente los puntos por comas aun mas cuando se tratan de casi 200 nodos cada uno uno con 14 datos dentro de ellos es demasiado.

Espero poder encontrar soluciona esto ya que de esto depende mi trabajo!
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:Problema al pasar xml a access

Publicado por Edgar (1501 intervenciones) el 08/02/2007 20:01:49
Hola

No hace falta que los cambies manualmente, lo que debes hacer es algo como

valor1 = nodo.ChildNodes(0).InnerText.Replace(".", ",")

Esto te cambia el valor del punto por la coma

Quizas no sea la mejor solución, pero te resuelve ;)

Saludos

Edgar Gonzalez
http://www.edgaragg.com
http://sobre-ing-software.blogspot.com/
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:Problema al pasar xml a access

Publicado por Liz (31 intervenciones) el 08/02/2007 20:28:06
ok! muchas gracias en este mismo momento lo pruebo! y le aviso si funciono o no?
gracias nuevamente Edgar!
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:Problema al pasar xml a access

Publicado por Liz (31 intervenciones) el 08/02/2007 20:33:53
Ya lo probe y me sale este error:

ErrorNumber of query values and destination fields are not the same.

que podra ser estoy desesperada :(
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:Problema al pasar xml a access

Publicado por Edgar (1501 intervenciones) el 08/02/2007 20:38:55
Hola

Parece que la consulta se confunde ahora por el poco de comas..

Haz lo siguiente con el comando

.CommandText = "INSERT INTO DEUDA ([usuario_id], [valor1], [valor2], [valor3], [valor4]) VALUES (@codigo, @valor1, @valor2, @valor3, @valor4)"
.Parameters.Add("@codigo", SqlDbType.Int).Value = codigo
.Parameters.Add("@valor1", SqlDbType.Double).Value = valor1
.Parameters.Add("@valor2", SqlDbType.Double).Value = valor2
.Parameters.Add("@valor3", SqlDbType.Double).Value = valor3
.Parameters.Add("@valor4", SqlDbType.Double).Value = valor4

Asegurate de que los tipos de datos sean los correctos, lo que te debe quedar es algo parecido a lo que te puse mas arriba

Saludos

Edgar Gonzalez
http://www.edgaragg.com
http://sobre-ing-software.blogspot.com/
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:Problema al pasar xml a access

Publicado por Liz (31 intervenciones) el 08/02/2007 20:53:43
No se que estoy haciendo mal le recuerdo todo mi codigo, el cual ahora me queda asi:

Dim mstrRutaOrigen As String = Path.GetFullPath(FileUpload1.PostedFile.FileName.ToString)
Dim documento As New XmlDocument
Dim nodo As XmlNode
Dim codigo As Integer
Dim valor1 As Decimal
Dim valor2 As Decimal
Dim valor3 As Decimal
Dim valor4 As Decimal

documento.Load(mstrRutaOrigen)
For Each nodo In documento.DocumentElement.ChildNodes
If nodo.Name = "DEUDA" Then
codigo = nodo.ChildNodes(0).InnerText
valor1 = nodo.ChildNodes(1).InnerText
valor2 = nodo.ChildNodes(2).InnerText
valor3 = nodo.ChildNodes(3).InnerText
valor4 = nodo.ChildNodes(3).InnerText

If verifica_usuario_existe(codigo) = True Then
insertar_datos(codigo, valor1, valor2, valor3, valor4)
End If

Private Sub insertar_datos(ByVal codigo As Integer, ByVal valor1 As Decimal, ByVal valor2 As Decimal, ByVal valor3 As Decimal, ByVal valor4 As Decimal)
With cmd
.Connection = cn
.CommandType = CommandType.Text
.CommandText = "INSERT INTO DEUDA ([usuario_id], [valor1], [valor2], [valor3], [valor4]) VALUES (" & codigo & ", " & valor1 & ", " & valor2 & ", " & valor3 & ", " & valor4 & ")"

.Parameters.Add("@codigo", OleDbType.Integer).Value = codigo
.Parameters.Add("@valor1", OleDbType.Decimal).Value = valor1
.Parameters.Add("@valor2", OleDbType.Decimal).Value = valor2
.Parameters.Add("@valor3", OleDbType.Decimal).Value = valor3
.Parameters.Add("@valor4", OleDbType.Decimal).Value = valor4

.ExecuteNonQuery()
Me.Label1.Text = "¡Registros actualizados con éxito!"
End With
End Sub

a los valores de arriba no les pongo el @ porque no estan declarados asi, mire a ver si estoy haciendo algo mal!

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:Problema al pasar xml a access

Publicado por Edgar (1501 intervenciones) el 08/02/2007 21:17:43
Hola

Tienes que poner el comando de la siguiente manera

.CommandText = "INSERT INTO DEUDA ([usuario_id], [valor1], [valor2], [valor3], [valor4]) VALUES (@codigo, @valor1, @valor2, @valor3, @valor4)"

Esto lo que hace es crear una consulta generica, mas abajo le estas dando los valores de los parametros... Lo que estas haciendo es de cierta forma pasandole parametros a la consulta, los parametros son @codigo, @valor1, @valor2, @valor3 y @valor4, luego en las lineas de mas abajo le estas diciendo de que tipo son los parametros y el valor que toman, esto evita problema de incompatibilidad de los tipos de datos como los que te esta pasando en este momento.

Tienes que ponerlo asi, porque tal como lo hiciste en el codigo, los parametros no estan haciendo nada porque en la consulta no estan definidos

Saludos

Edgar Gonzalez
http://www.edgaragg.com
http://sobre-ing-software.blogspot.com/
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:Problema al pasar xml a access

Publicado por Liz (31 intervenciones) el 08/02/2007 21:24:00
Cuando coloco el @ delante de las variables me sale el error el error de:

Caracter no es valido y se pinta el @, no se donde mas tendre que aumentarle, porque en si pongo arroba en los datos del private sub tambien me sale el mismo error. que estoy haciendo mal?

ayudeme please!

Private Sub insertar_datos(ByVal codigo As Integer, ByVal valor1 As Decimal, ByVal valor2 As Decimal, ByVal valor3 As Decimal, ByVal valor4 As Decimal)
With cmd
.Connection = cn
.CommandType = CommandType.Text
.CommandText = "INSERT INTO DEUDA ([usuario_id], [valor1], [valor2], [valor3], [valor4]) VALUES (" & @codigo & ", " & @valor1 & ", " & @valor2 & ", " & @valor3 & ", " & @valor4 & ")"

.Parameters.Add("@codigo", OleDbType.Integer).Value = codigo
.Parameters.Add("@valor1", OleDbType.Decimal).Value = valor1
.Parameters.Add("@valor2", OleDbType.Decimal).Value = valor2
.Parameters.Add("@valor3", OleDbType.Decimal).Value = valor3
.Parameters.Add("@valor4", OleDbType.Decimal).Value = valor4

.ExecuteNonQuery()
Me.Label1.Text = "¡Registros actualizados con éxito!"
End With
End Sub
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:Problema al pasar xml a access

Publicado por Edgar (1501 intervenciones) el 08/02/2007 21:55:57
Hola

Es que los nombres de los parametros no van concatenados, sino como parte del string

Copia textualmente esto

.CommandText = "INSERT INTO DEUDA ([usuario_id], [valor1], [valor2], [valor3], [valor4]) VALUES (@codigo, @valor1, @valor2, @valor3, @valor4)"

Fijate que las variables con el @ estan dentro del string y no concatenadas ;)

Saludos

Edgar Gonzalez
http://www.edgaragg.com
http://sobre-ing-software.blogspot.com/
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:Problema al pasar xml a access

Publicado por Liz (31 intervenciones) el 08/02/2007 22:05:39
Pues si eso era, pero ahora me sale otro error y es que me sale registros actualizados con exito, pero cuando revise la tabla esta llena de puros valores (0) solo el primer valor se guardo pero asi: 13254 los demas todos son ceros.

Ahi le dejo el error:

ErrorThe changes you requested to the table were not successful because they would create duplicate values in the index, primary key, or relationship. Change the data in the field or fields that contain duplicate data, remove the index, or redefine the index to permit duplicate entries and try again.

Otra cosa el xml no tiene codigos repetidos y ese campo es el primary key.

No se porque me sale ese error!!! :( hep me!
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:Problema al pasar xml a access

Publicado por Edgar (1501 intervenciones) el 08/02/2007 22:20:40
Hola

Bueno, si en xml no tiene valores repetidos, pues entonces tendrias que buscar en la base de datos y revisar si no tienes definido algún indice como único, lo cual sería lo que te esta causando el problema.

Saludos

Edgar Gonzalez
http://www.edgaragg.com
http://sobre-ing-software.blogspot.com/
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:Problema al pasar xml a access

Publicado por Liz (31 intervenciones) el 08/02/2007 22:28:46
En la tabla DEUDA el unico campo unico es el codigo los demas valores se pueden repetir cuantas veces quieran, es un problema muy extraño porque no deberia darse ya que no tengo codigos repetidos en el xml.

Los campos valores si pero los codigos no, ademas me sale registro actualizados con exito, y me llena la tabla de puros ceros.

help me please!
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:Problema al pasar xml a access

Publicado por Edgar (1501 intervenciones) el 08/02/2007 22:51:14
Hola Liz

Intenta colocar un breakpoint o punto de quiebre en el metodo que hace la insercion en la base de datos.

De esta forma podras comprobar si los valores estan en 0 antes de llegar a la bd aparte de que tambien puedes revisar si por alguna razón esta enviando siempre el mismo código. El breakpoint lo colocas ubicandote en la linea donde deseas ponerlo y luego presionas F9

Luego puedes agregar inspecciones para ver los valores de las variables, asi sabrás si el problema esta en otra parte del codigo o en la BD

Saludos

Edgar Gonzalez
http://www.edgaragg.com
http://sobre-ing-software.blogspot.com/
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:Problema al pasar xml a access

Publicado por Liz (31 intervenciones) el 08/02/2007 23:04:56
hola, ya lo corri con los breakpoint, ademas yo estoy segura que los valores estan en cero antes de llegar a la base porque primero y elimino todos los registros de la tabla bodega para despues hacer la insersion, ya que es una actualizacion en lotes.

estoy casi segura que el problema no es de la forma que esta estructurada la base de datos sino mas bien en el codigo, tal parece que es como si yo quisiera insertar dos veces los mismos campos y eso me genera el error.

Gracias de todos modos por tratar de ayudarme ha sido muy amable y se lo agardezco.
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