Foros del Web » Programación para mayores de 30 ;) » .NET »

Ruego a SunDark

Estas en el tema de Ruego a SunDark en el foro de .NET en Foros del Web. Hola de nuevo; Te ruego que me revises el codigo que te dejé en este tema: http://www.forosdelweb.com/s/msg197613.html porque no sé cómo recorrer un dataset y ...
  #1 (permalink)  
Antiguo 30/04/2004, 04:31
Avatar de luiscl  
Fecha de Ingreso: abril-2004
Ubicación: Zaragoza
Mensajes: 305
Antigüedad: 20 años, 7 meses
Puntos: 0
Ruego a SunDark

Hola de nuevo;

Te ruego que me revises el codigo que te dejé en este tema:

http://www.forosdelweb.com/s/msg197613.html

porque no sé cómo recorrer un dataset y guardar los registros en una tabla de una base de datos access distinta a la que leímos los datos para guardarlos en el dataset.

Gracias mil

__________________
Pide lo que quieras...y luego paga por ello
  #2 (permalink)  
Antiguo 30/04/2004, 07:17
Avatar de SunDarK  
Fecha de Ingreso: diciembre-2003
Ubicación: Jerez de la Frontera
Mensajes: 1.193
Antigüedad: 20 años, 11 meses
Puntos: 8
Buenas amigo,estoy leyendo y releyendo el codigo a ver si consigo dar con la solución pero se me anda resistiendo,es rarisimo porque puedo agregar filas y actualizar la BD sin problemas,pero cuando intento actualizar la BD con el contenido de un dataset no me la actualiza y no se porque(yo soy "nuevecillo" en esto tambien),asi que paciencia por favor hasta que de con la solución(ya es un reto personal :P)
Aqui dejo el codigo por si a alguien se le ocurre alguna idea,para probar lo unico que estoy intentando hacer es un SELECT con una condición y actualizar la misma BD,nada de BD distintas,pero ni asi sale,saludos
Cita:
Dim oconexion As New OleDbConnection
Me.odataset = New DataSet
Dim ocommbuild As OleDbCommandBuilder = New OleDbCommandBuilder(odataadapter)
'NOTA: es importante poner la ruta relativa de mi origen de datos(Data Source)para evitar que al llevar
'la aplicacion a cualquier otra maquina no encuentre la ruta y se vaya directamente a la excepcion.
oconexion.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source= ..\Datos\Peliculas_Diego.mdb"

Me.odataadapter = New OleDbDataAdapter("SELECT * FROM PELICULAS WHERE (FORMATO_PELICULA='DIVX')", oconexion)
Try
oconexion.Open()
odataadapter.Fill(odataset, "PELICULAS")
oconexion.Close()
Catch ex As Exception
MessageBox.Show("ERROR:" & ex.Message)
End Try
Me.odataadapter.Update(odataset.Tables("PELICULAS" ))
MessageBox.Show("bd actualizada")
  #3 (permalink)  
Antiguo 01/05/2004, 01:15
Avatar de luiscl  
Fecha de Ingreso: abril-2004
Ubicación: Zaragoza
Mensajes: 305
Antigüedad: 20 años, 7 meses
Puntos: 0
Hola señor;

Pues en mi caso, me acabo de dar cuenta de que mi problema empieza...porque no me llena el dataset, creo, ya que he creado un Dataview para recorrer el Dataset y guardar los registros...pero cuando le digo que me ponga en pantalla el número de registros del Dataview, me da valor 0.

Este es el código:

Dim datasetLprincipal As New DataSet
Dim dataadapterLprincipal As New OleDbDataAdapter
seleccionstringLprincipal = "Select IdInmueble, DirecciónInmueble, Situación1, NúmeroExpediente, Precio1Euros, Precio1Pts From DAT_Inmueble Where DirecciónInmueble IS NOT NULL " & "And Situación1 IS NOT NULL " & "And Eliminado = 0 " & "And IdTipoInmueble = @tipoinmueble " & "And IdTipoOperación = 4"

dataadapterLprincipal = New OleDbDataAdapter( seleccionstringLprincipal, conexionLprincipal)

dataadapterLprincipal.SelectCommand.Parameters.Add ( "@tipoinmueble", lblrespuesta.Text )

dataadapterLprincipal.Fill( datasetLprincipal, "datasetpisos" )

Dim myDataView as DataView
MyDataView = datasetLprincipal.Tables("datasetpisos").DefaultVi ew

response.write(myDataView.Count)
__________________
Pide lo que quieras...y luego paga por ello
  #4 (permalink)  
Antiguo 01/05/2004, 03:30
Avatar de SunDarK  
Fecha de Ingreso: diciembre-2003
Ubicación: Jerez de la Frontera
Mensajes: 1.193
Antigüedad: 20 años, 11 meses
Puntos: 8
Buenash luiscl,voy a mirar tu código ese a ver porque no se te guarda,pero,¿podrias mandarme la tabla en Access a mi correo electronico?asi podre cerciorarme de que funcione perfectamente,saludos
  #5 (permalink)  
Antiguo 01/05/2004, 03:40
Avatar de SunDarK  
Fecha de Ingreso: diciembre-2003
Ubicación: Jerez de la Frontera
Mensajes: 1.193
Antigüedad: 20 años, 11 meses
Puntos: 8
Buenash amigo,ya estoy aqui de nuevo jejeje,no hace falta que me mandes la tabla,he probado tu código con otra tabla mia y te explico:
El código esta perfecto,se crea la vista y se rellena,¿que porque te da 0 el count? bien,tu sentencia SELECT es muy compleja,revisala porque seguro que la sentencia no devuelve ningún valor,prueba a poner una sentencia simple para ver si te funcione bien("SELECT * FROM DAT_Inmueble") y ya veras como te devuelve valores.
Ya me contarás si has encontrado el error en dicha sentencia,un saludo
  #6 (permalink)  
Antiguo 01/05/2004, 04:06
Avatar de luiscl  
Fecha de Ingreso: abril-2004
Ubicación: Zaragoza
Mensajes: 305
Antigüedad: 20 años, 7 meses
Puntos: 0
Hola Sun

Tenías razón: Algo debía de haber mal escrito en mi consulta Select, porque la he vuesto a escribir y, al menos, ahora consigo que se me rellene el DataSet.

Sin embargo, me sigue fallando la escritura en la otra tabla (que llamé intermedia). Cuando se ejecuta el comando ExecuteNonQuery, me da un error de Desbordamiento...

Así que sigo con parte del problema!!!
__________________
Pide lo que quieras...y luego paga por ello
  #7 (permalink)  
Antiguo 01/05/2004, 12:00
Avatar de SunDarK  
Fecha de Ingreso: diciembre-2003
Ubicación: Jerez de la Frontera
Mensajes: 1.193
Antigüedad: 20 años, 11 meses
Puntos: 8
El error de desbordamiento que te da será porque el EXECUTENONQUERY devuelve un entero que indica el número de filas que se han visto afectadas por la ejecución del objeto command.La consulta debe de ser tipo UPDATE,DELETE o INSERT ya que no puede devolver un conjunto de registros,saludos
  #8 (permalink)  
Antiguo 01/05/2004, 12:44
Avatar de luiscl  
Fecha de Ingreso: abril-2004
Ubicación: Zaragoza
Mensajes: 305
Antigüedad: 20 años, 7 meses
Puntos: 0
Ok. Entonces es que igual no debo utilizar el ExcuteNonQuery para grabar en la base de datos...qué comando me recomiendas tú qué utilice?

Yo lo utilizo así para guardar los datos del dataset en la bd intermedia

seleccionstringGintermedia = "Insert Into intermedia (IdInmueble, Situación1, NúmeroExpediente, Precio1Euros, Precio1Pts) Values (@idinmueble, @situacion1, @numeroexpediente, @precio1euros, @precio1pts)"

seleccionGintermedia = New OleDbCommand (seleccionstringGintermedia, conexionGintermedia)

seleccionGintermedia.Parameters.Add( "@idinmueble", lblIdInmueble.Text )

seleccionGintermedia.Parameters.Add( "@situacion1", lblSituación1.Text )

seleccionGintermedia.Parameters.Add( "@numeroexpediente", lblNúmeroExpediente.Text )

seleccionGintermedia.Parameters.Add( "@precio1pts", lblPrecio1Pts.Text )

seleccionGintermedia.Parameters.Add( "@precio1euros", lblPrecio1Euros.Text )

conexionGintermedia.open()

seleccionGintermedia.ExecuteNonQuery()

conexionGintermedia.close()


Next

¡¡¡es precisamente en executeNonQuery donde me da el error!!!
__________________
Pide lo que quieras...y luego paga por ello
  #9 (permalink)  
Antiguo 01/05/2004, 13:10
Avatar de SunDarK  
Fecha de Ingreso: diciembre-2003
Ubicación: Jerez de la Frontera
Mensajes: 1.193
Antigüedad: 20 años, 11 meses
Puntos: 8
Hombre es que ExecuteNonQueary NO GRABA NADA en la BD puesto que no es su función,la idea que yo tengo es actualizar una BD con el contenido de una tabla de un dataset.Es decir

1º Haces una consulta y llenas una tabla de un dataset con los datos que quieras
2º Abres la otra BD y actualizas una tabla de la nueva BD con el contenido de la tabla del dataset anterior

Si lo consigo se aviso,saludosss
  #10 (permalink)  
Antiguo 03/05/2004, 07:36
Avatar de lucxx  
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 321
Antigüedad: 21 años
Puntos: 0
Hola
Cita:
Hombre es que ExecuteNonQueary NO GRABA NADA en la BD puesto que no es su función
¿¿?? Joer SunDark, a que te refieres con eso? Yo utilizo executeNonQuery cuando quiero insertar nuevos datos en la BD, y la verdad es que no se me ocurre forma mejor de hacerlo...

Salu2
  #11 (permalink)  
Antiguo 03/05/2004, 07:46
Avatar de SunDarK  
Fecha de Ingreso: diciembre-2003
Ubicación: Jerez de la Frontera
Mensajes: 1.193
Antigüedad: 20 años, 11 meses
Puntos: 8
Ummmmmm yo tenia entendido que no guardaba datos en la BD,pero si tu dices que lo usas estaré confundido,lo siento,yo siempre uso dataset y actualizo de acuerdo a su contenido,ya miraré lo que tu dices mas que nada por curiosidad :) Venga saludos,gracias y lo siento
  #12 (permalink)  
Antiguo 03/05/2004, 08:02
Avatar de lucxx  
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 321
Antigüedad: 21 años
Puntos: 0
Hombre, no hay nada que sentir...
Hacerlo desde dataset está bien cuando tienes un datagrid con modo de edición, etc. Pero hay muchos casos en los que no interesa subir a memoria toda una tabla de una base de datos cuando lo unico que quieres hacer es insertar una fila... Ejemplo: este foro, no creo que toda/s la/s tabla/s de mensajes esten en memoria del servidor (de hecho no lo estan), si este foro estuviera hecho en .net, los mensajes se insertarian con un command.ExecuteNonQuery() a la base de datos.

Salu2
  #13 (permalink)  
Antiguo 03/05/2004, 08:06
Avatar de lucxx  
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 321
Antigüedad: 21 años
Puntos: 0
Y en cuanto al tema original del mensaje, luiscl, el mensaje de error es "Debe usar una consulta actualizable" o algo así?
  #14 (permalink)  
Antiguo 03/05/2004, 08:41
Avatar de SunDarK  
Fecha de Ingreso: diciembre-2003
Ubicación: Jerez de la Frontera
Mensajes: 1.193
Antigüedad: 20 años, 11 meses
Puntos: 8
Ajan lo tomaré en cuenta lucxx,mushas gracias por el consejo y la aclaración
Saludos
  #15 (permalink)  
Antiguo 03/05/2004, 08:42
Avatar de lucxx  
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 321
Antigüedad: 21 años
Puntos: 0
De nada hombre, para eso estamos
  #16 (permalink)  
Antiguo 03/05/2004, 09:05
Avatar de luiscl  
Fecha de Ingreso: abril-2004
Ubicación: Zaragoza
Mensajes: 305
Antigüedad: 20 años, 7 meses
Puntos: 0
Hola a los dos;

Os había contestado, pero se me ha colgado esto...ole!!

Vuelta a empezar.

El error que me sale es símplemente "Desbordamiento". Si quito el ExecuteNonQuery no me graba en la bd, claro, pero al menos no me da error.

De todas formas he encontrado una forma de paginar sin necesidad de que haya un campo autonumérico, pero vamos, evidentemente sigo teniendo un problema porque no soy capaz de grabar en una base de datos los resultados de una consulta realizada con un dataset. Mientras encontramos una solución (y os agradezco el tiempo que estáis perdiendo), voy a tirar sin tabla intermedia.

Sin embargo, como soy un puto principiante, mi problema es que al hacer una consulta para guardar los resultados, con el datatable no me deja meter parámetros. Lo hago así:

seleccionstringLintermedia = "Select IdInmueble, Situación1, NúmeroExpediente, Precio1Euros, IdTipoInmueble, Precio1Pts From DAT_Inmueble Where IdTipoInmueble = @tipoinmueble " & " And DirecciónInmueble IS NOT NULL " & "And Situación1 IS NOT NULL " & " And Eliminado = 0 " & " And IdTipoOperación = 4 order by Precio1Pts"

dadpisos = New OleDbDataAdapter( seleccionstringLintermedia, conexionLintermedia)

dadpisos.SelectCommand.Parameters.Add(New OleDbParameter("@tipoinmueble", OleDbType.Integer))
dadpisos.SelectCommand.Parameters("@tipoinmueble") .Value=lblrespuesta.Text

El campo lblrespuesta.Text es un parámetro que me pasa desde otro formulario, y me llega perfectamente (¡¡¡gracias a Dios por el response.write!!!), pero no me lo pasa a la consulta. Tampoco me da error. Símplemente no encuentra ningún campo que cumpla esa condición. El resto de condiciones, sin parámetro, sin problema

De nuevo, gracias a los dos.
__________________
Pide lo que quieras...y luego paga por ello
  #17 (permalink)  
Antiguo 03/05/2004, 09:26
Avatar de lucxx  
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 321
Antigüedad: 21 años
Puntos: 0
Hola, bueno la verdad es que es mucho codigo y ya estoy un poco perdido de donde va cada cosa y de que es lo que quieres hacer , pero te dire varias cosas:

Cita:
seleccionstringLintermedia = "Select IdInmueble, Situación1, NúmeroExpediente, Precio1Euros, IdTipoInmueble, Precio1Pts From DAT_Inmueble Where IdTipoInmueble = @tipoinmueble " & " And DirecciónInmueble IS NOT NULL " & "And Situación1 IS NOT NULL " & " And Eliminado = 0 " & " And IdTipoOperación = 4 order by Precio1Pts"
¿esta consulta la has copiado y la has pegado directamente aquí?
En ese caso, supongo que los & están puestos para concatenar diferentes lineas de codigo, pero en vb, cuando una sentencia ocupa mas de una linea, hay que poner también "_", es decir:

lb_mensaje.Text = "Hola esto es" & _
"una prueba"

Por otro lado:
Cita:
dadpisos.SelectCommand.Parameters.Add(New OleDbParameter("@tipoinmueble", OleDbType.Integer))
dadpisos.SelectCommand.Parameters("@tipoinmueble") .Value=lblrespuesta.Text
yo pondría:
Cita:
dadpisos.SelectCommand.Parameters.Add(New OleDbParameter("@tipoinmueble", OleDbType.Integer))
dadpisos.SelectCommand.Parameters("@tipoinmueble") .Value=Integer.ParseInt(lblrespuesta.Text)
y por ultimo, no es nada recomendable que los nombres de los campos de las bases de datos lleven tildes

Salu2
  #18 (permalink)  
Antiguo 03/05/2004, 11:42
Avatar de luiscl  
Fecha de Ingreso: abril-2004
Ubicación: Zaragoza
Mensajes: 305
Antigüedad: 20 años, 7 meses
Puntos: 0
Vale, en cuanto pueda lo pruebo.

En cuanto a lo de los saltos de linea...pues efectivamente es porque en la respuesta no cabía todo junto...pero no lo sabía!!!.

De hecho, un error que me daba ya sé por qué es al pasar una cadena de parámetros para enviarlos por mail.

Es agobiante ser novato...

Un abrazo
__________________
Pide lo que quieras...y luego paga por ello
  #19 (permalink)  
Antiguo 03/05/2004, 11:51
Avatar de luiscl  
Fecha de Ingreso: abril-2004
Ubicación: Zaragoza
Mensajes: 305
Antigüedad: 20 años, 7 meses
Puntos: 0
Ah, en cuanto a las tildes...qué mas quisiera yo que no llevasen. Mis problemas vienen todos porque tengo que utilizar una base de datos de un programa que es una auténtica locura (64 tablas, cientos de campos...y tildes).

Yo no pongo nunca en variables, campos y demás..
__________________
Pide lo que quieras...y luego paga por ello
  #20 (permalink)  
Antiguo 04/05/2004, 01:06
Avatar de luiscl  
Fecha de Ingreso: abril-2004
Ubicación: Zaragoza
Mensajes: 305
Antigüedad: 20 años, 7 meses
Puntos: 0
Impresionante: He cambiado lo que me comentabas y seguía sin funcionarme. Cuando ya estaba a punto de cortarme las venas, me he dado cuenta de que tenía antes del parámetro, otros parámetros definidos que no utilizaba en la consulta sql (que no deberían afectar, puesto que en ningún sitio se los nombraba). Pues bien, ha sido borrarlos, y funcionar el parámetro. Lo explico mejor con el código, por si a alguien le vuelve a pasar.

Muchas gracias por vuestra ayuda. No creo que tarde en estar por aquí de nuevo...

seleccionstringLintermedia = "Select IdInmueble, Situación1, NúmeroExpediente, Precio1Euros, IdTipoInmueble, Precio1Pts From DAT_Inmueble Where IdTipoInmueble = @tipoinmueble " & " And DirecciónInmueble IS NOT NULL " & "And Situación1 IS NOT NULL " & " And Eliminado = 0 " & " And IdTipoOperación = 4 order by Precio1Pts"

dadpisos = New OleDbDataAdapter( seleccionstringLintermedia, conexionLintermedia)

dadpisos.SelectCommand.Parameters.Add(New OleDbParameter("@tipoinmueble", OleDbType.Integer,1))

¡¡¡este es el parámetro que no utilizaba, pero que me bloqueaba el parámetro último, el bueno!!!

dadpisos.SelectCommand.Parameters("@intStartIndex" ).Value= lblindice.Text

dadpisos.SelectCommand.Parameters("@tipoinmueble") .Value= lblrespuesta.Text
__________________
Pide lo que quieras...y luego paga por ello
  #21 (permalink)  
Antiguo 04/05/2004, 06:59
Avatar de SunDarK  
Fecha de Ingreso: diciembre-2003
Ubicación: Jerez de la Frontera
Mensajes: 1.193
Antigüedad: 20 años, 11 meses
Puntos: 8
Jejejej venga,pues de arte :D,saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:26.